第三节 XML语言0035
Download
Report
Transcript 第三节 XML语言0035
XML应用体系结构
Application
SAX
XSL
XML Namespace
DOM
XPath
XML Specification
DOM4J
XLink
XML Schema
(DTD)
XML文档:list.xml
<?xml version="1.0" encoding=" GB2312 " ?>
DTD文档:contact.dtd
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE list SYSTEM “contact.dtd">
<list>
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
<email>[email protected]</email>
<电话>(010)62345678</电话>
<地址>
<省份>北京</省份>
<城市>北京</城市>
<街道>五街1234号</街道>
</地址>
</联系人>
</list>
<!ELEMENT list (联系人)*>
<!ELEMENT 联系人 (姓名,ID,公
司,email,电话,地址)>
<!ELEMENT 地址 (省份,城市,街道)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT ID (#PCDATA)>
<!ELEMENT 公司 (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT 电话 (#PCDATA)>
<!ELEMENT 街道 (#PCDATA)>
<!ELEMENT 城市 (#PCDATA)>
<!ELEMENT 省份 (#PCDATA)>
XSL文档
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl …>
<xsl:template><xsl:apply-templates/></xsl:template>
<xsl:template match = "/">
<HTML> <HEAD><TITLE>F公司的客户联系信息</TITLE>
</HEAD><BODY> <xsl:apply-templates select="联系人列表
"/></BODY></HTML>
</xsl:template>
<xsl:template match = "联系人列表">
<xsl:for-each select="联系人">
<UL>
<LI><xsl:value-of select="姓名"/></LI>
<UL>
<LI>用户ID:<xsl:value-of select="ID"/></LI>
<LI>公司: <xsl:value-of select="公司"/></LI>
<LI>EMAIL: <xsl:value-of select=“email"/></LI>
<LI>电话: <xsl:value-of select="电话"/></LI>
</UL>
</UL>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
将XML文档中的<姓名>
标签转换为HTML中的
<UL>标签;
将XML文档中的 <ID>、<
公司>、<email>、<电话>
等标签转换为HTML中的
< LI>标签。
第二章 XML语言
第一节
第二节
第三节
第四节
第五节
第六节
第七节
第八节
XML概述
XML语法
DTD
Schema
Namespace
XSL
XML的应用
其他
第四节 schema
schema介绍
schema规范
schema应用
Schema及其发展
Schema起源
DTD存在许多缺陷,如:
采用非XML的语法规则
不支持多种数据类型
扩展性较差等。
W3C成员先后提交5个schema:
XML-Data
DCD(Document Content Description for XML)
SOX(Schema for Object-Oriented XML)、
DDML(Document Definition Markup Language)
XML Schema。
XML-Data
1998年由微软等公司发起,首次引入Schema概念。
提供一种在Web上描述和交换结构化和网络化数据的
规范,并描述了XML Schema数据字典。
DCD(Document
Content Description for XML )
1998年由IBM、微软共同发起。
目的是用XML语法规范来定义XML文档结构,
以取代DTD。
SOX(Schema for Object-Oriented XML)
1998年由Veo Systems Inc发起,
提出一种Schema规范,支持对XML文档的结构、
内容和语义进行严格定义。
提供一些诸如基本数据类型和扩展数据类型
机制、内容模型和属性接口继承机制、高效
命名空间机制、嵌入式文档等等。
DDML(Document
Definition Markup Language,又叫
XSchema、XSD)
1999年由xml-dev提交W3C。
DDML只是对DTD的逻辑结构进行了重新定义,使得
Schema文档可以被众多XML工具所编辑。
XML Schema
(http://www.w3.org/XML/Schema)
2001年W3C推荐XML Schema
取重家之长。
XML Schema分为三部分:
第一部分 总体介绍(XML Schema Part 0: Primer)
–帮助读者快速理解利用Schema语法创建Schema文档;
第二部分(XML Schema Part 1: Structure)
–为描述XML1.0文档的结构和内容约束提供了文档,
第三部分(XML Schema Part 2: Datatypes)
–为Schema及其他XML规范定义了数据类型。
XML Schema特点
一致性
Schema书写语法和XML文件相同,清晰直观
DTD结构和XML文件不同,需要单独学习DTD
Schema。
扩展性
DTD定义的数据类型有限。
Schema可以定义多样数据类型。
易用性
Schema可以沿用XML编辑工具、解析工具、应用工具
–如DOM、SAX。
DOM、SAX等不支持DTD。
XML Schema特点
规范性
Schema也提供了一套完整机制以约束XML文档中置标
的使用,比DTD更具有规范性.
互换性
每个人都可定义适合自己的Schema,可以同其他人交
换彼此的Schema。
通过映射机制,还可以将不同的Schema进行转换,以
实现更高层次的数据交换。
第四节 schema
Schema介绍
Schema规范
Schema应用
一个XML Schema实例
[1] <?xml version="1.0"? Encoding=“GB2312”>
[2] <xs:schema
[3] xmlns:xs="http://www.w3.org/2001/XMLSchema"
[4] targetNamespace="http://www.book.com.cn"
[5] elementFormDefault="qualified">
[6] attributeformDefault=“unqualified” />
[7]
<xs:element name=“图书“ type=“xs:string”> </xs:element>
[8] </xs:schema>
说明
[1]XML文档声明。
[2]-[6]Schema根元素声明,包含:
[3] Schema命名空间的声明。
[4] 本schema定义元素归属的名称空间
[5] 必须使用前缀或设置默认命名空间显示限定所有元素
[6] 不得限定属性
[7] 正文:定义一个元素,类型为string
[8]结束标记。
一个Schema可以包含多个命名空间
<xs:schema
xmlns:xs=“http://www.w3.org/2001/XMLSchema”
xmlns:dt=“urn:schemas-microsoft-com:datatypes”
xmlns:myNS=“http://www.xml_step_by_step.edu\ns.xml”>
Xmlns:xs="http://www.w3.org/2001/XMLSchema"
–指明xs命名地址;
xmlns:dt=“urn:schemas-microsoft-com:datatypes”
–指明dt命名(数据类型)地址;
xmlns:myNS=“http://www.xxx.xxx\ns.xml”
–指明myNS命名(自定义的元素或属性等)地址。
Schema定义
(1)元素定义
(2)属性定义
(3)类型定义
(4)对元素或属性的限定
(1)元素定义
语法
说明
name: 可选。元素名称。如果父元素是 schema
元素,则必需。
type:可选。指定元素类型
内建数据类型(如int、string)
<xs:element
name=“元素名称”
type=“元素类型”
simpleType 、 complexType
maxOccurs:可选。元素可出现最大次数,大于
等于零,默认为 1。
maxOccurs=“最多出现次数” minOccurs:可选。元素可出现最小次数,大于
等于零,默认为 1。
minOccurs=“最少出现次数”
default:可选。元素默认值,仅当元素内容是简
default=“默认值”
单类型或 textOnly 时使用。
fixed=“固定值”
fixed:可选。元素固定值,仅当元素内容是简单
ref=QName>
子元素
<xs:/element>
类型或 textOnly 时使用。
ref:可选。对另一元素的引用。
ref 属性可包含一个命名空间前缀。
如果父元素是 schema 元素,则不使用该属性。
实例
Schema文档
<?xml version="1.0" encoding="GB2312"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://myspace.cn"
xmlns="http://myspace.cn" >
<xsd:element name="通信录">
<xsd:complexType>
<xsd:element name="姓名" type="xsd:string"/>
<xsd:element name="地址" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XML文档
<?xml version="1.0" encoding="GB2312" ?>
<通信录 xmlns="http://myspace.cn"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://myspace.cn list-2.xsd">
<姓名>张大万</姓名>
<地址>北京市海淀区三里河路1号</地址>
</通信录>
(2)属性定义
语法
说明
<xs:attribute
name=“属性名称”
type=“属性类型”
use=“使用方式”
default=“默认值”
fixed=“固定值”
ref=QName>
子元素
<xs:/attribute>
name、 type 、default、fixed、ref
含义与element定义相同,但type只能
是简单类型 。
use:
Optionalo:不是必须的,默认属性
prohibited:禁用
required: 必备
(3)类型定义
三种类型
内嵌数据类型
在《XML Schema Part 2: Datatypes》中定义
– http://www.w3.org/2001/XMLSchema.xsd
简单类型(simpleType)
复杂类型( complexType)
内嵌数据类型
简单类型定义:simpleType
简单类型
被定义元素只包含文本内容,不包含子元素
语法
<xs:simpleType
id=“id值”
name=”类型名称“
any attributes>
(annotation?,(restriction|list|union))
<xs:/simpleType>
id=“id值”:可选。规定该元素的
唯一的 ID。
name=”类型名称“:该名称必须是
在 XML 命名空间规范中定义的
无冒号名称 (NCName)。
any attributes :可选。规定带有
non-schema 命名空间的任何其
他属性。
? :符号声明元素可在 simpleType
元素中出现零次或一次。
简单类型定义:simpleType
限制性定义元素:restriction
用于为 XML 元素或者属性定义可接受的值. 例如:
例1:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
例1:
<xs:element name="age“ type=“vage>
</xs:element>
<xs:simpleType name=“vage”>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
简单类型定义:simpleType
指定数据类型为简单类型列表列表:list
用空格分离。
Schema文档:
XML文档:
<xs:element name=“作者”
type:=“authlist”/>
<作者>张三 李四 王五</作
者>
<xs:simpleType name=“authlist”>
<xs:list itemType="xs:string“/>
</xs:simpleType>
简单类型定义:simpleType
指定数据类型为多个简单类型集合:union
Schema文档:
XML文档:
<xs:element name=“生日” type=“birthtype”/> <生日>1986-10-10 </生日>
<xs:simpleType name=“birthtype”>
<xs:list memberTypes="xs:string xs:date“/>
</xs:simpleType>
或者
<生日>1986年10月10日 </生日>
复合类型定义:complexType
复合类型:complexType
指被定义元素中可以包含子元素 /属性及混合内容。
语法:
<xs:complexType
name=“类型名称”
mixed=“是否包含字符数据”>
子元素
</xs:complexType>
mixed:
true:可以包含字符型数据
false:不可以包含字符型数据
子元素限定:
sequence
choice
all
simpleContent
complexContent
复合类型定义:complexType
sequence限定
子元素按定义顺序出现
方式一:
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name=“email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
方式二:
<xs:element name="employee“ type=“emtype” />
<xs:complexType name=“emtype”>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name=“email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
复合类型定义:complexType
choice限定
从所定义的多个子元素中选择一个
<xs:element name=“籍贯“ type=“fromtype” />
<xs:complexType name=“fromtype”>
<xs:choice>
<xs:element name=“省" type="xs:string"/>
<xs:element name=“自治区" type="xs:string"/>
<xs:element name=“直辖市" type="xs:string"/>
</xs:choice>
</xs:complexType>
XML文档:
<籍贯>
<省>河北 </省
</籍贯>
或者
<籍贯>
<自治区>宁夏 </自治区>
</籍贯>
或者
<籍贯>
<直辖市>北京 </直辖市>
</籍贯>
复合类型定义:complexType
all限定
所有定义的子元素都出现一次,顺序无限制。
<xs:element name=“教室“ type=“courseroom” />
<xs:complexType name=“courseroom”>
<xs:all>
<xs:element name=“生物" type="xs:string"/>
<xs:element name=“物理" type="xs:string"/>
<xs:element name=“化学" type="xs:string"/>
</xs:all>
</xs:complexType>
XML文档:
<教师>
<物理>S101 </物理>
<生物>S103 </生物>
<化学>S108 </化学>
</教师>
复合类型定义:complexType
复合内容:complexContent
在复合元素类型基础上(继承)进行扩展或限定。
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
对personinfo扩展,
增加Address、
city
(4)对元素或属性的限定
1. restriction元素
用于对simpleType、simpleContent、complexContent等元素限定。
语法: <xs:restriction base=“QName”>子元素</ xs:restriction >
minInclusive/maxInclusive
enumeration
<xs:element name="age">
<xs:simpleType>
<xs:simpleType name=“cartype”>
<xs:restriction base="xs:string">
<xs:restriction base="xs:integer">
<xs:enumeration value="Audi"/>
<xs:minInclusive value="0"/>
<xs:enumeration value="Golf"/>
<xs:maxInclusive value="120"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:restriction>
</xs:simpleType>
</xs:simpleType>
</xs:element>
(4)对元素或属性的限定
1. restriction元素
语法: <xs:restriction base=“QName”>子元素</ xs:restriction >
pattern(四字母字串,2数字2字母)
pattern(a-z中零或多个字母)
<xs:simpleType name=“pasword”>
<xs:element name="letter">
<xs:restriction base="xs:string">
<xs:pattern value="[a-z][0-9][a-z][0-9]"/>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:restriction>
</xs:simpleType>
</xs:element>
(4)对元素或属性的限定
1. restriction元素
语法: <xs:restriction base=“QName”>子元素</ xs:restriction >
pattern(8字节,大小写字母或数字)
pattern(a-z中零或多个字母)
<xs:simpleType name=“pasword”>
</xs:simpleType>
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:pattern value=“([a-z][A-Z][09])+"/>
<xs:pattern
value="male|female"/>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z09]{8}"/>
</xs:restriction>
(4)对元素或属性的限定
1. restriction元素
语法: <xs:restriction base=“QName”>子元素</ xs:restriction >
Value=:
对空白的限定:whiteSpace
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
preservce: 保留空白
replace:移除所有空白字符(换行、
回车、空格以及制表符)。
collapse :将移除所有空白字符(换
行、回车、空格以及制表符会被替
换为空格,开头和结尾的空格会被
移除,而多个连续的空格会被缩减
为一个单一的空格)。
(4)对元素或属性的限定
1. restriction元素
语法: <xs:restriction base=“QName”>子元素</ xs:restriction >
对长度的限定:指定精确长度
对长度的限定:
<xs:element name="password">
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
(4)对元素或属性的限定
1.restriction元素
(4)对元素或属性的限定
2.extension元素
用于扩展simpleContent、complexcontent元素
语法: <xs:extension base=“QName”>子元素</ xs:extension >
(4)对元素或属性的限定
3.any、anyAttribute元素
指定在XML文档中可以使用未在 schema中 规定的元素、属性。
family.xsd
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs=“0”/>
{person可以有任意元素}
</xs:sequence>
<xs:anyAttribute/>
{person可以有任意属性}
</xs:complexType>
</xs:element>
(4)对元素或属性的限定
3.any、anyAttribute元素
children.xsd
<xs:element name="children">
{自定义元素}
<xs:complexType>
<xs:sequence>
<xs:element name="childname" type="xs:string"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
(4)对元素或属性的限定
3.any、anyAttribute元素
family.xml
<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3school.com.cn children.xsd">
<person>
<firstname>David</firstname>
<lastname>Smith</lastname>
<children>
<childname>mike</childname>
</children>
</person>
(4)对元素或属性的限定
3.any、anyAttribute元素
myfamily.xsd
…
<xs:attribute name=“gender”>
{自定义属性}
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
…
(4)对元素或属性的限定
3.any、anyAttribute元素
myfamily.xml
<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3school.com.cn children.xsd">
…
<person gender="female" >
<firstname>David</firstname>
<lastname>Smith</lastname>
<children>
<childname>mike</childname>
</children>
</person>
<person gender="male" >
<firstname>Jack</firstname>
<lastname>Smith</lastname>
</person>
(4)对元素或属性的限定
4.group元素分组
<group
name=”元素分组名称“
ref=“引用的元素分组名称”
maxOccurs =“最大次数” minOccurs=“最小次数” >
子元素
</group>
(name 和 ref 属性不能同时出现 )
<xs:group name="custGroup">
<xs:sequence>
<xs:element name="customer" type="xs:string"/>
<xs:element name="orderdetails" type="xs:string"/>
<xs:element name="billto" type="xs:string"/>
<xs:element name="shipto" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:element name="order" type="ordertype"/>
<xs:complexType name="ordertype">
<xs:group ref="custGroup"/>
<xs:attribute name="status" type="xs:string"/>
</xs:complexType>
(4)对元素或属性的限定
4.attributeGroup属性分组
<attributeGroup
name=”属性分组名称“
ref=“引用的属性分组名称” any attributes >
子元素
</attributeGroup>
(name 和 ref 属性不能同时出现 )
<xs:attributeGroup name="personattr">
<xs:attribute name="attr1" type="string"/>
<xs:attribute name="attr2" type="integer"/>
</xs:attributeGroup>
<xs:complexType name="person">
<xs:attributeGroup ref="personattr"/>
</xs:complexType>
第四节 schema
Schema介绍
Schema规范
Schema应用
Schema的应用
由于XML Schema的种种优点,国际上一些知
名企业和组织都提供对XML Schema的支持。
微软从其浏览器软件IE 5.0开始支持Schema。
微软Schema资源库
http://www.biztalk.org/
BizTalk是微软发布的schema库
各商家定义自己的schema,提交到bizTalk.org
进行注册;
每个Schema必须遵守编写规则,而且要有一些规
定好的必要元素和属性。
用户可以注册和查找schema,共享。
xml.org的Schema资源库
http://www.xml.org/
xml.org是OASIS发布的Schema资源。
通过xml.org,OASIS进行了XML应用信息的搜集、
管理和发布,包括数据字典、Schema、命名空间和
DTD。
企业机构和组织也可将自己制定的Schema提交到
xml.org。
企业用户或开发者在xml.org查找相关Schema,在
自己的系统中应用。
第二章 XML语言
第一节
第二节
第三节
第四节
第五节
第六节
第七节
第八节
XML概述
XML语法
DTD
Schema
Namespace
XSL
XML的应用
其他
第五节 Namespace
命名空间
命名空间是一种名称的集合,通过一种 URI
来引用标识,作为元素类型和属性的名称,
它应用于 XML文档。
命名空间规范
Namespaces in XML 1.0 (Third Editoion)
http://www.w3.org/TR/REC-xml-names
XML命名空间
声明命名空间
命名空间的使用
声明命名空间
命名空间规范
XML 使用 URI 作标识符指定命名空间
使用 URI 的目的是保持域名的唯一性,XML 名域只
将它作为字符串处理。
URI 不必是有效的,它可以不指向任何真实位置,
即使计算机没有与 Internet 连接,也可以处理
XML文档。
不需要建立专门的机构来接受特定名称的申请、审
核和维护,使用者也免去了申报、注册之类的繁杂
事务。
名域是大小写敏感的
Student 和 student 代表不同的名域。
声明命名空间
命名空间的声明格式
<元素 xmlns:前缀=“URI”>
XML 命名空间由两部分构成:
URI(Uniform Resource Identifier),它是区分名域的依据。
前缀(prefix),用以标识元素来自哪个名域,避免了直接
使用冗长的 URI 或网址做元素、属性的标识,给名域的使
用带来极大的便利。
命名空间引用方式:
<前缀:元素>
在Schema文件中,命名空间是由xmlns属性来
指定:
<Schema name="mySchema"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes“
xmlns:myNS=“http://www.url.edu\ns.xml”
>
以前面的“联系人列表”为例子,假定需要知道每个联系人的直
接上级,DTD中要为“联系人”元素增加一个子元素“直接上级”。
修改后的DTD文件源码如下: ( 联系人列表.dtd )
<!ELEMENT
<!ELEMENT
级)>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
联系人列表 (联系人)*>
联系人 (姓名,ID,公司,EMAIL,电话,地址,直接上
地址 (街道,城市,省份)>
姓名 (#PCDATA)>
ID (#PCDATA)>
公司 (#PCDATA)>
EMAIL (#PCDATA)>
电话 (#PCDATA)>
直接上级 ANY>
街道 (#PCDATA)>
城市 (#PCDATA)>
省份 (#PCDATA)>
“直接上级”的内容来自于另一个DTD声
明—(企业经理.dtd):
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
企业经理 (姓名,电话)>
姓名 (#PCDATA)>
电话 (秘书电话,手机)>
秘书电话 (#PCDATA)>
手机 (#PCDATA)>
没有命名空间的XML
<联系人列表 xmlns="联系人列表.dtd" >
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
<EMAIL>[email protected]</EMAIL>
<电话>(010)62345678</电话>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
</地址>
<直接上级>
<姓名>王五</姓名>
<电话>
<秘书电话>(010)62345678</秘书电话>
<手机>13601234567</手机>
</电话>
</直接上级>
</联系人>
</联系人列表>
冲突
使用命名空间的XML
<联系人:联系人列表 xmlns:联系人 ="联系人列表.dtd" xmlns:企业经理
="企业经理.dtd">
<联系人:联系人>
<联系人:姓名>张三</联系人:姓名>
<联系人:ID>001</联系人:ID>
<联系人:公司>A公司</联系人:公司>
<联系人:EMAIL>[email protected]</联系人:EMAIL>
<联系人:电话>(010)62345678</联系人:电话>
<联系人:地址>
<联系人:街道>五街1234号</联系人:街道>
<联系人:城市>北京市</联系人:城市>
<联系人:省份>北京</联系人:省份>
</联系人:地址>
<联系人:直接上级>
<企业经理:姓名>王五</企业经理:姓名>
<企业经理:电话>
<企业经理:秘书电话>(010)62345678</企业经理:秘书电话>
<企业经理:手机>13601234567</企业经理:手机>
</企业经理:电话>
</联系人:直接上级>
</联系人:联系人>
</联系人:联系人列表>
XML文件中元素的合法名称的形式是:
前缀部分:本地部分
“前缀部分”和“本地部分”都要求是一个合法
XML名称。
前缀部分必须是一个已经经过声明的命名空间前缀,
语法分析器将把它与命名空间声明中的URI引用相
联系;
本地部分则是在DTD或Schema中定义的元素和属性
名。
例如:
企业经理:姓名
dc:title
命名空间的声明方式
直接方式
<企业经理:姓名>
<dc:title>
缺省方式
缺省声明的命名空间就是作用域内的缺省命名空间,因此,
在这个作用域内使用该命名空间的元素、属性的合法名称无
须再写前缀部分。
例如:
<books xmlns="http://purl.org/dc/elements/1.1/”>
<title>呐喊</title>
</books>
XML命名空间
声明命名空间
命名空间的使用
命名空间作用于元素
要求
用于起始元素标记、结束元素标记和空元素标记。
前缀部分必须是一个已经声明过的命名空间前缀
声明的位置
既可以在使用该前缀的起始元素的标记处
也可以是在父元素标记处
作用域
声明所在元素范围内,包括所有子元素;
可以被新声明所覆盖。
<联系人:联系人列表 xmlns:联系人 ="联系人列表.dtd">
<联系人:联系人>
<联系人:姓名>张三</联系人:姓名>
作用全局
<联系人:ID>001</联系人:ID>
<联系人:公司>A公司</联系人:公司>
<联系人:EMAIL>[email protected]</联系人:EMAIL>
<联系人:电话>(010)62345678</联系人:电话>
<联系人:地址>
<联系人:街道>五街1234号</联系人:街道>
作用局部
<联系人:城市>北京市</联系人:城市>
<联系人:省份>北京</联系人:省份>
</联系人:地址>
<联系人:直接上级 xmlns:企业经理 =“企业经理.dtd”>
<企业经理:姓名>王五</企业经理:姓名>
<企业经理:电话>
<企业经理:秘书电话>62345678</企业经理:秘书电话>
<企业经理:手机>13601234567</企业经理:手机>
</企业经理:电话>
</联系人:直接上级>
</联系人:联系人>
</联系人:联系人列表>
<联系人列表 xmlns="联系人列表.dtd"
缺省命名空间
xmlns:企业经理 ="企业经理.dtd">
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
<EMAIL>[email protected]</EMAIL>
<电话>(010)62345678</电话>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
</地址>
<直接上级>
<企业经理:姓名>王五</企业经理:姓名>
<企业经理:电话>
<企业经理:秘书电话>(010)62345678</企业经理:秘书电话>
<企业经理:手机>13601234567</企业经理:手机>
</企业经理:电话>
</直接上级>
</联系人>
</联系人列表>
<联系人列表 xmlns="联系人列表.dtd">
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
命名空间声明中URI
<EMAIL>[email protected]</EMAIL>
为空串时,元素不
<电话>(010)62345678</电话>
属于任何命名空间。
<地址>
<街道>五街1234号</街道>
这里,两个“姓名”
<城市>北京市</城市>
元素不一样。
<省份>北京</省份>
</地址>
<直接上级>
<姓名 xmlns = "">王五</姓名>
<电话 xmlns = "">
<秘书电话 xmlns = "">(010)62345678</秘书电话>
<手机 xmlns = "">13601234567</手机>
</电话>
</直接上级>
</联系人>
</联系人列表>
命名空间作用于属性
命名空间也可用于属性
如下:
<联系人 xmlns:企业经理 = “http://www.xml.net.cn/联系人
列表.dtd”>
<姓名 企业经理:文种 = “中文”>李华</姓名>
<电话 企业经理:城市 = “北京”>62348765</电话>
</联系人>
第二章 XML语言
第一节
第二节
第三节
第四节
第五节
第六节
第七节
第八节
XML概述
XML语法
DTD
Schema
Namespace
XSL
XML的应用
其他
第六节 XSL
样式单(Style Sheet)
描述结构文档表现方式,既可以描述文档如何在屏幕上显示,
也可以描述它们的打印效果,甚至声音效果。
XML数据与样式单被定义成不同文件
XML格式文档不像HTML那样复杂、繁乱,XML编写者可集中精
力于数据本身,而不受显示方式的影响。
相同的数据,因为定义不同样式单可以使呈现出不同的显示
外观。
W3C推荐两种样式单标准
层叠样式单CSS(Cascading Style Sheets)
可扩展样式单语言XSL(eXtensible Stylesheet Language)。
第六节 XSL
CSS
可以定义HTML或XML文档中元素的显示效果,
包括元素的位置、颜色、背景、边空、字体、
排版格式等等。
HTML应用CSS的例子
<HTML>
<HEAD> <STYLE>
H1{color:red; }
myclass{color:green}
H2.myclass{color:blue} #myid{color:brown}</STYLE>
</HEAD>
<BODY>
<H1>这是红色的一号标题。</H1>
<P class="myclass">"myclass"类中的正文是绿色的。</P>
<H2 class="myclass">但"myclass"类中的二号标题是蓝色的。</H2>
<P class="myclass" id="myid">以"myid"为标识的正文则是棕色的。</P>
</BODY>
</HTML>
这是红色的一号标题。
"myclass"类中的正文是绿色的。
但"myclass"类中的二号标题是蓝色的。
以"myid"为标识的正文则是棕色的。
XML文档使用CSS
student.xml:
<?xml version="1.0" encoding="gb2312" ?>
<?xml-stylesheet type="text/css" href="mystyle.css"?>
<roster>
<student>
<name>李华</name>
<origin>河北</origin>
<age>15</age>
<telephone>62875555</telephone>
</student>
<student>
<name>张三</name>
<origin>北京</origin>
<age>14</age>
<telephone>82873425</telephone>
</student>
</roster>
XML文档使用CSS
mystyle.css:
roster,student
{
font-size:15pt; font-weight:bold;
color:blue; display:block;
margin-bottom:5pt;
}
origin,age,telephone
{
font-weight:bold; font-size:12pt;
display:block; margin-left:20pt;
}
name
{
font-weight:bold; font-size:14pt;
display:block; color:red;
margin-top:5pt; margin-left:8pt;
}
第六节 XSL
XSL(eXtensible Stylesheet Languge)
可扩展样式单语言,由W3C制定。
XSL通过XML进行定义,遵守XML语法规则,
是XML的一种具体应用,XSL文档可以被XML解
释器解析。
XSL由两大部分组成
第一部分
根据XML文档构造源树
根据给定的XSL将这个源树转换为可以显示的结果树。
W3C推荐标准是:XSLT(XSL Transformations)。
第二部分
格式化:按照格式对象FO(Formatted Object)解释
结果树,产生一个可以在屏幕上、纸上、语音设备或
其它媒体中输出的结果。
W3C还未能出台一个得到多方认可的FO。
XSLT基本思想
通过定义转换模板,将XML源文档转换为带
样式信息的可浏览文档。
为了支持对XML文档节点元素的操作,XSLT
包含一种可扩展路径语言:XPath
XPath
功用
结点定位
XML文档中的元素结点、属性结点、文本
结点、命名空间结点、处理指令结点等
简单操作
XPath提供一些函数,支持数字计算、布尔
计算、字符串处理等。
XPath:路径表达式
指定结点路径获得相关信息
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath:谓词
对结点进行过滤操作
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath:定位阶
路径表达式: /step/step……
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath测试
路径表达式:
<?xml version="1.0" encoding="ISO-8859-1"?>
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.selectNodes("/bookstore/book")
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
测试结果:
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
XPath测试
路径表达式:
<?xml version="1.0" encoding="ISO-8859-1"?>
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.selectNodes("/bookstore/book[1]")
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
测试结果:
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
XPath测试
路径表达式:
<?xml version="1.0" encoding="ISO-8859-1"?>
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.selectNodes(“/bookstore/book/price/text()")
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
测试结果:
29.99
39.95
XPath测试
路径表达式:
<?xml version="1.0" encoding="ISO-8859-1"?>
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.selectNodes("//title[@lang='eng']")
<bookstore>
<book>
<title lang=“fra">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
测试结果:
<title lang="eng">Learning
XML</title>
XSLT应用场景
XML文档
XSLT
转换器
XSLT文档
HTML文档
XSLT结构
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" >
<xsl:template>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=“XPath表达式”>
模板内容
</xsl:template>
……
</xsl:stylesheet》
XSLT模板
模板定义
<xsl:template match=“XPath表达式”
name=“模板名称”>
模板内容
</xsl:template>
模板实例
<xsl:template match=“//book[1]”>
<table border=“1”>
<tr>
<td> <B>书名</B> </td>
<td> <B>价格</B> </td>
</tr>
<tr>
<td><xsl:value-of select=“title"/></td>
<td><xsl:value-of select=“price"/></td>
</tr>
</table>
</xsl:template>
XSLT模板引用(一)
<xsl:apply-templates>应用形式一
<xsl:template match=“/”>
<xsl:apply-templates />
</xsl:template>
表示对当前节点(根节点)的所有子节点应用模板。
<xsl:apply-templates>应用形式二
<xsl:template match=“student”>
<xsl:apply-templates select=“Name” />
</xsl:template>
表示模板只应用于“student”节点下的“Name”子节点。
XSLT模板引用(一)
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" >
<xsl:template match=“/”>
<xsl:apply-templates select=“book[1]”/>
</xsl:template>
<xsl:template match=“book[1]”>
<TABLE BORDER=“1”>
<THEAD>
<TD> <B>书名</B> </TD>
<TD> <B>价格</B> </TD>
</THEAD>
<TR>
<TD><xsl:value-of select=“title"/></TD>
<TD><xsl:value-of select=“price"/></TD>
</TR>
</TABLE>
</xsl:template>
</xsl:stylesheet》
XSLT模板引用(二)
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" >
<xsl:template match=“/”>
<xsl:call-templates name=“list”/>
</xsl:template>
<xsl:template match=“/” name=“list”>
<TABLE BORDER=“1”>
<THEAD>
<TD> <B>书名</B> </TD>
<TD> <B>价格</B> </TD>
</THEAD>
<TR>
<TD><xsl:value-of select=“/bookstore/book[1]/title"/></TD>
<TD><xsl:value-of select=“/bookstore/book[1]/ price"/></TD>
</TR>
</TABLE>
</xsl:template>
</xsl:stylesheet》
XSLT操作指令
xsl:value-of
功能:提取指定结点的值
语法:<xsl:value-of select=“XPath表达式”/>
实例:
<xsl:value-of select=“//title”/>
输出title元素的值。
<xsl:value-of select=“//title/@lang”/>
输出title元素的属性lang的值。
XSLT操作指令
xsl:for-each
功能:多结点的循环处理指令
语法:
<xsl:for-each select=“XPath表达式”
order-by=“子结点名称” >
子元素
</xsl:for-each>
实例:
<xsl:for-each select=“book" order-by=“title">
<TR>
<TD><xsl:value-of select=“title"/></TD>
<TD><xsl:value-of select=“price"/></TD>
</TR>
</xsl:for-each>
XSLT操作指令
xsl:if
功能:条件判断
语法:
<xsl:if test=“条件表达式”>
子元素
</xsl:if>
实例:
<xsl:template match=“book”>
<xsl:for-each select=“title”>
<xsl:if test=“@lang=‘eng’”>
本书为英文书,名称为<xsl:value-of select=“title"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
XSLT操作指令
xsl:choose
功能:多条件判断
语法:
<xsl:choose>
<xsl:when test=“条件表达式1”
……
</xsl:when>
<xsl:when test=“条件表达式2”
……
</xsl:when>
……
<xsl:otherwise”
……
</xsl:otherwise>
</xsl:choose>
XSLT应用实例
国家科学图书馆SRU检索平台
(SRU, Search and Retrieval via URL)
XSL
Stylesheet
HTML
浏览器
XML
Response
URL
Request
NSL
联合目录库
NSL
SRU Server
NSL
学位论文库
国防
科技信息库
XSLT应用实例
国家科学图书馆SRU检索平台
(SRU, Search and Retrieval via URL)
检索URL
http://sru.csdl.ac.cn/SRW/services/DEIS?query=dc.title+%3D+
%22system%22&version=1.1&operation=searchRetrieve&rec
ordSchema=info%3Asrw%2Fschema%2F1%2Fdc-v1.1&maxi
mumRecords=10&startRecord=1&resultSetTTL=300&recordP
acking=xml&recordXPath=&sortKeys=&stylesheet=/SRW/db
ase/DEIS/searchRetrieveResponse.xsl
检索结果
没有指定XSL的XML
– DEMO
指定了XSL的XML—客户端转换
– DEMO
XSLT转换实现
客户端转换
以上国科图SRU例子
服务器端转换
在服务前端完成:XML + XSL -> HTML 转换,然后再将
HTML文件送往客户端进行浏览。
优点是兼容任何浏览器,缺点是要管理转换过程。
查看
浏览器
HTML
服务器
XML+XSL
第七节 XML的应用
Web标准描述成为XML主要应用形式
面向网页的应用: XHTML
面向科技领域的应用:MathML
面向图形图象的应用:SVG
面向多媒体的应用:SMIL
面向无线网的应用:HDML和WML
面向电子商务的应用
面向电子政务的应用
面向e-publishing的应用
面向e-learning的应用
面向Web服务集成的应用
面向网页的应用
XHTML
XHTML是将HTML改用XML来重新定义,
是HTML到XML的过渡版本。
XHTML必须遵守XML的规范,严格执行,
不再像过去那么随便。
面向科技领域的应用:MathML
MathML的目标是用XML描述数学公式
W3C于1998年发布了MathML的1.0版
本,现在MathML2.0草案也在讨论之
中。
例如,要描述下列公式
XML描述如下
<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>±</mo>
<msqrt>
<mrow>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</mrow>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
面向图形图象的应用
SVG
(Scalable Vector Graphics)
W3C于1999年发布了第一个讨论草案,
后几经修订发布了最终草案。
SVG是一种基于XML的用来描述二维矢
量图形和矢量/点阵混合图形的置标语
言,其全称是可扩展矢量图形规范。
面向多媒体的应用
SMIL:同步多媒体合成语言,即Synchronized
Multimedia Integration Language。
描述多媒体对象,以便将视频、音频、图象、文字
在时间和空间轴上集成为一个同步多媒体演示文档。
SMIL包含了以下三方面的内容:
描述演示文档的屏幕布局
描述演示文档的时间行为
描述媒体对象间的相关链接
面向无线网的应用
HDML:Handheld Device Markup Language
Specification
为小显示屏的手持设备定义类似超文本内容和应用
的语言
HDML的重点是内容的表现与布局,为手机、呼机、
无线PDA等手持设备提供服务。
WML :Wireless Markup Language
WML是WAP论坛制定的一个基于XML的移动通信设备
的置标语言,它定义了在较窄的显示设备上进行
Web浏览的内容及用户界面,包括使用手机上网。
面向电子商务的应用
基于XML的电子商务标准分为三类:
体系结构相关的标准:
ebCPP( ebXML Collaborative Partner Profile Agreement )
ebMS( ebXML Messaging Service Specification )
ebRIM( ebXML Registry Information Model )
ebRS( ebXML Registry Services Specification)
供应链各环节功能相关标准:
xCBL(XML Common Business Library):电子商务交换标准
tpaML(Trading partner agreement Markup Language ):电子合同
cXML(Commerce XML ):在线交换数据格式
WIDL (Web Interface Definition Language):定义Web接口
面向电子政务的应用
系统架构标准
FEA(Federal Enterprise Architecture):美国联邦政府组织架构
e-GIF(e-Government Interoperability Framework):英国政府电
子政务互操作框架
SAGA(Standards and Architectures for E-Government
Applications):德国政府电子政务应用标准与架构
文档格式标准
ODF(Open Document Format)ISO/IEC 26300:2006 :国际标准
UOF(Unified Office Document format):中文办公文档格式
OOXML(Office Open XML):微软办公文档格式
面向e-publishing的应用
国际数字出版论坛IDPF三个开放标准:
Open Publication Structure (OPS)
前身是1999年颁布的OEB( Open eBook
Structure Specification 1.0):统一文档数据格式
标准。
Open Packaging Format (OPF)
统一封装格式
Open Container Format (OCF)
开放容器格式
面向e-learning的应用
ADL(Advanced Distributed Learning Initiative )
SCORM(Sharable Content Object Reference Model):学习对象定义、
访问、重用、互操作标准。
Sakai
IMS (IMS Global Learning Consortium )
IMS Content Packaging: 内容封装规范
IMS Simple Sequencing:内容序列规范
IEEE
Data Model for Content to Learning Management System Communication:
数据模型
ECMAScript application programming interface for content to runtime
services communication:界面交互规范
LOM(Learning Object Metadata):学习对象元数据规范
Markup Language (XML) Schema Definition Language Binding for
Learning Object Metadata:学习对象schema
面向Web服务集成的应用
应用举例
服务描述标准
WSDL(Web Services Description Language )
资源描述框架
RDF(Resource Description Framework )
概念描述语言
OWL(Web Ontology Language )
消息交换标准
SOAP(Simple Object Access Protocol)
内容聚合标准
RSS(Really Simple Syndication)
第八节 其他
XML编程之:DOM4J
the starting guide
第八节 其他
JSON (JavaScript Object Notation)
JSON 是一种轻量级的计算机数据交换语言。
优点:
JSON数据格式比较简单, 易于读写, 格式都是压缩的, 占用
带宽小;
解析性能高;
支持多种语言, 包括Actionscript、ColdFusion、Java、
Javascrīpt、Perl、PHP、Python、Ruby等;
代码开发量小,可维护性强。
第八节 其他
JSON 与XML比较
<?xml version=”1.0” encoding=”UTF-8”?>
<Image>
<Width>800</Width>
<Height>600</Height>
<Title>View from 15th Floor</Title>
<Thumbnail>
<Url>http://scd.mm-b1.yimg.com
/image/481989943</Url>
<Height>125</Height>
<Width>100</Width>
</ Thumbnail>
<IDs>
<ID>116</ID>
<ID 943<ID>
<ID>234</ID>
<ID>38793</ID>
</IDs>
</Image>
{
"Image":
{
"Width":800,
"Height":600,
"Title": "View from 15th Floor",
"Thumbnail":
{
"Url":"http://scd.mm-b1.yimg.com
/image/481989943",
"Height": 125,
"Width": "100"
},
"IDs": [ 116, 943, 234, 38793 ]
}
}
第八节 其他
JSON 编程举例
Demo1
静态页面
Demo2
AJAX+JSON
第八节 其他
发展前景
随着Web2.0发展,JSON将有越来越多
的应用,如:
Rich UI
– AJAX+JSON成为新的用户界面开发模式
Mashup
– Google、Amazon、Flickr等都提供JSON API
作业
三选一:
1.选择一个XML编辑工具,用它编辑生成以下课表信息文档:
(1)定义一个DTD或Schema;
(2)根据上边定义的DTD或Schema ,创建一个XML文档;
(3)根据自行设计的显示风格编写一个XSL;
(4)最后,写出实验报告,要包含:
a)所选择xml工具介绍;
b)DTD(XSD)、XML、XSL三个文件内容及显示效果截图;
c)总结实验中遇到的问题,并进行评价。
2.利用DOM4J 等工具做XML编程实验,测试XML文档读取/写入、或转
换(xml->html)等功能。提交实验报告,包括编程平台介绍、
环境配置过程、程序代码、相关的XML/XSL/HTML等文件,对实验
进行评价、分析。
3.在Tomcat等环境下,做一个Web应用试验,实现后台JSON包数据封
装、浏览器JSON数据解析以及用户界面控制等功能。提交实验报
告,包括应用环境配置过程、JSON数据结构、程序代码html/jsp
等文件,对实验进行评价、分析。
选择2或3的同学,可参照以下资料:
http://crossdomain.las.ac.cn/licw/wis/xml.zip
推荐参考书
《XML实用教程》
范立锋主编
人民邮电出版社,北京,2009
ISBN:978-7-115-20527-8
198页
24.00元
本书内容主要包括:XML概述、XML文件规则、XML
数据底层结构、XML Schema模式、使用CSS格式化
显示XML文件、使用XSL格式化显示XML文件、XML数
据源对象等.
同时还介绍两个XML解析器:DOM、SAX。