一、Schema的概述
1.XML Schame 概念:
XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
2.XML Schema的特征:
(1)一致性:利用XML的基本语法规则来定义其文档结构,从而使XML的模式和实例定义达到了统一;继承了XML的自描述性可扩展性,使其更具有可读性和灵活性;
(2)完备性:XML Schema 对DTD进行了扩充,引入了数据类型、名称空间,并且支持对其他XML Schema的引用,从而使其具备较强的模块性;
(3)规范性和准确性:XML Schema提供了更加规范和完备的机制来约束XML文档;XML Schema的语义更加准确,可以完成一些DTD不能完成的定义,如对元素出现次数的约束等;
(4)面向对象特征:XML Schema中引入了许多成熟的面向对象机制(如继承性和多态性),使得数据模式在应用中更加灵活;
(5)扩展性:DTD所描述的文档结构是非常严格的(closed),没有经过显式声明的内容绝不允许出现在XML实例数据中;而XML Schema则提供了一些扩展机制(open),允许在事先无法准确描述数据模式的情况下,在XML实例数据中根据需要添加相关的数据。
二、Schema 的基本结构
1.Schema 文档示例
2.1扩展名为.xsd
2.2基本结构:
(1)根标记必须是schema;
(2)名称空间必须是:http://www.w3.org/2001/XMLShema
(3)必须定义且只能定义一个Schema根元素,根元素用于说明文档类型、模式的约束、XML模式名称空间的定义、版本的信息。
2.3XML文档与Schema关联:
<?xml version="1.0" enconding="gb2312"?>
<studenntlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamesapaceSchemaLocation="要关联的文件.xsd">
2.Schema的主要组件
2.1类型
简单类型:带有子元素或使用属性的元素
复杂类型:不包含任何子元素和属性,只含有文本内容的元素
2.2元素
1)name:声明元素的名字;
2)type:声明元素的数据类型,可以使用Schema的数据类型,也可以使用自定义的数据类型。该类型要么是声明元素的属性,要么是声明元素标签之间的内容或者子元素。
3)minOccurs:该属性值为一个整数,表示该声明元素最少要出现的次数,最小值为0。
4)maxOccurs:该属性值为一个整数,表示该声明元素最多能出现的次数,最小值为1,如果值为unbounded,则表示无限制。
(course)元素的声明:
<xsd:element name="course" type="xsd:string"/>
2.3属性声明
注意:1.只有复杂类型的元素才能拥有属性,简单类型的元素没有属性。
2.元素可以有简单类型或复杂类型,而属性只能有简单类型。
<element name="元素名称" type="元素数据类型">
<xsd:complexType name="元素数据类型">
<xsd:attribute name="属性名称" type="属性的数据类型" use="use-method" default="value" fixed="value">
</xsd:attribte>
</xsd:conplexType>
说明:
1.use-method:(属性取值的实际要求):
1)optional:表示该属性值可有可无,是默认值。
2)required:表示该属性值必须存在,该属性值至少出现一次。
3)prohibited:表示该属性值不可出现,用于在restriction元素中限制属性的使用。
2.default和fixed两者取一个,default指属性的默认值,fixed指属性如果存在,则其内容只能由本属性指定的值,不可更改。
2.4组定义
元素组是指把若干个元素组成一组。
<xsd:group name="组名称">
<xsd: sequence>
<xsd:element name="element1" type="datatype"/>
<xsd:element name="element2" type="datatype"/>
…
</xsd: sequence>
</xsd:group>
三、XML Schema中数据类型
1.简单类型
(simpleType来定义)
1.1restriction:
<xsd:schema
<xsd:element name
<xsd:simple Type name="name">
<xsd: restriction base=" xsd: string">
</xsd:restriction>
</xsd:simpleType>
1.2list
<? xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<xsd:element name="myint">
<xsd:simpleType>
<xsd:list itemType="xsd:int"/>
</xsd:simpleyType>
</xsd:element>
</xsd:schema>
注意:通过list定义了基于int数据类型的元素myint,允许用户输入多个数据,数据间需要用空白间隔。
1.3union
<?xml version="1.0"encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name=“myint1">
<xsd:union>
<xsd:simpleType><xsd:restriction base="xsd:int"/></xsd:simpleType>
<xsd:simpleType><xsd:restriction base="xsd:string"/></xsd:simpleType>
<!一从多个匿名数据类型联合派生出产的数据类型-->
</xsd:union>
<xsd:simpleType>
<xsd:simpleType name="myint2">
<xsd:union memberTypes=“xsd:int xsd:string"/>
<!––直接从已有的数据类型联合派生新的数据类型-->
<\xsd:simpleType>
<xsd:all>
<xsd:element name=“myint" type=“myint1"/>
<xsd:element name=“mystring" type=“myint2"/><xsd:.ement
</xsd:all>
</xsd:complexType>
</xsd:element>
注意:上述用两种方式定义了union数据类型myint1和myint2,二者都可以包含int或string数据类型,但是只能使用其中一种。
2.复杂类型
(通过complexType来定义)
<xsd:element name="元素名称" type="数据类型">
<xsd:complex Type name=" ">
<xsd:sequence>
<xsd:attribute name=" " type=" " use=" ">
</xsd:sequence>
</xsd:complex Type>
</ xsd: element>
注意:
1)“元素名称”用于指明复杂类型元素的名称。
2)“数据类型”指自定义数据类型的名称。
3)<sequence>子元素表示在其定义范围内的所有元素都必须按顺序出现。除了<sequence>子元素外,其他可选的子元素如表所列,用于定义复杂类型所包含的内容模式。
总结:
1)当前元素只有属性:
attribute
2)当前元素只有子元素:
sequence
3)当前元素既有属性,又有子元素:
sequence、attribute
4)当前元素既有属性,又有文本数据:
simpleContent
5)当前元素既有属性,又有文本数据,又有子元素:
<complexType mixed="true>
四、XML S chema的名称空间
1.概念:
XML名称空间提供了一套简单的方法将XML文档和URI引用标记的名称相结合来限定其中的元素和属性名。即名称空间给XML名称添加前缀,使其能够区分所属的领域,从而为元素和属性提供唯一的名称,其主要用于融合不同词汇集的XML文档。
名称空间表示名称的来源和使用范围。通过名称空间可以区分不同的XML应用。但具有相同名称的标识,可以把来自某种XML应用的相关元素和属性集合在一起,以方便软件识别和处理。
名称空间通过给标识名称加一个网址(URL)定位的方法来区别同名的标识。但这不是一个真实的网址。
真实的网址是:
http://www.w3.org/2001/XMLShema
2.声明(一般用属性xmlns)
<元素名 xmlns:prefix="URL">
注意:
1)xmlns::名称空间属性名,是声明名称空间必需的属性。
2)prefix:指明名称空间的前缀名,它的值不能为XML。在引用此名称空间中的名称时,需要在名称前加该前缀名
声明时若前缀名省略,则声明的是默认的空间,引用默认名称空间中的元素和属性时可不加前缀名。
默认名称空间的声明语法格式如下:
<元素名 xmlns="URI">