Schema概述
XML Schema是针对DTD存在的缺点而设计。
DTD缺点:
⑴DTD不是用XML语言编写的,需要不同的分析器技术。
⑵DTD不支持名称空间。
⑶DTD在支持继承和子类方面存在局限性。
⑷DTD没有数据类型的概念,无法对特定元素施加数据类型,对强制性结构化数据无计可施。
与DTD相比,XML Schema具有一致性、完备性、规范性和准确性、面向对象特征、扩展性。
XML Schema的基本结构
XML Schema文档示例:
XML Schema文档是一种特殊的XML文档,要遵循XML语法规则,是一个独立于XML文档的文本文件,扩展名为. xsd。XML Schema文档基本结构:
<?xml version="1.0" encoding="GB2312"?>
<xsd: schema name=" slschema" xmlns: xsd="http://www.w3.org/2001/XMLSchema">
...
</xsd: schema>
XML Schema的主要控件:
⒈类型
XML Schema的类型包括复杂类型和简单类型
复杂类型:带有子元素或使用属性的元素。例如:
<student>
<sno>2013001</sno>
<sname>张三</sname>
</student>
简单类型:不包含任何子元素和属性,只含有文本内容。例如:<mobilephone>13613891234</mobilephone>
⒉元素声明
元素是XML Schema的重要组成部分,一个XML文档中可能不包含任何属性或文本数据,但必须包含元素(至少包含一个根元素)。
XML Schema通过element元素声明来定义XML文档中的元素:
<element name="元素名称" type="数据类型" minOccurs="int" maxOccurs="int"/>
- name属性用于指明XML元素的名称
- type属性用于指明XML元素的数据类型,可以选取XML内置的数据类型或用户自定义的数据类型
- minOccurs属性用于指明XML元素的最小出现次数,最小为值0,是可选属性。
- maxOccurs属性用于指明XML元素的最多出现次数,最小值为1,最大值为unbounded,表示无限次,是可选属性。
⒊属性声明
XML Schema有关于元素声明属性的语法,需要注意:第一,只有复杂类型的元素才能拥有属性,简单类型的元素没有属性;第二,元素可以有简单类型或复杂类型,而属性只能有简单类型。属性声明语法格式如下:
<element name="element_name" type="dataType">
<xsd:complexType name="dataType">
<xsd:attribute name="attribute_name"type="simple_type" use="use_method" default="value" fixed="value">
</xsd:attribute>
</xsd:complexType>
- element_name指对应XML 文件中元素的名称。
- attribute_name指属性的名称。
- simple_type指属性的数据类型,可以是内置的数据类型,也可以是由 simple_type元素所定义的自定义数据类型。
- use_method指明XML 元素中属性的实际取值要求,可以是 optional、required、prohibited。其中, optional 表示该属性值可有可无,是默认值; required 表示该属性值必须存在,此属性值至少出现一次;prohibited 表示该属性值不可出现,用于在 restriction 元素中限制属性的使用。
- default 指属性的默认值。
- fixed指如果属性存在,则其内容只能是由本属性指定的值,不可更改。
注意:声明属性时,一定要设置属性名称(name)与属性类型(type)
⒋组定义
原素组是指把若干个若干个元素组成一组,声明格式如下:
<xsd:group name="组名称">
<xsd:sequence>
<xsd:element nane="element1" type="datatype"/>
<xsd:element nane="element2" type="datatype"/>
...
</xsd:sequence>
</xsd:group>
注意:元素组必须是schema根元素的直接子元素。其他类型元素若需要将元素组作为子元素,必须通过引用来实现。
⒌注释
便于阅读理解XML Schema添加注释语句解释说明。可以使用<!-- -->注释方式,还可以使用专门的<annotation/>元素。
<annotation/>元素含有两个子元素,如下:
- <documentation/>:该元素里主要存放适合阅读的信息。
- <appinfo/>:该元素里主要存放针对其他应用程序的信息。
<annotation/>元素里可以出现任意多个<documentation/>和<appinfo/>子元素,且没有顺序要求。
XML Schema中的数据类型
XML Schema定义了两种主要的数据类型:简单类型和复杂类型。两个类型的主要区别是复杂类型可以像数据一样包含其他函数,而简单类型只能包含数据。
简单类型:
XML Schema的简单类型分为两种:一种是XML Schema内置的简单数据类型。如:
string:字符串数据
boolean:二元类型True或False
date:历法日历,格式为CCYY-MM-DD
dateTime:历法日期和时间
time:24小时格式时间,可根据时区调节
decimal:任意精度和位数的十进制数
integer:整数
float:标准32为浮点数
另一种是用户自定义的简单数据类型,自定义类型使用<simpleType>标记。如:
<xsd:simpleType name="name">
<xsd:restriction base="xsd:datatypes">
<xsd:facets_element value="value"/>
...
</xsd:restriction>
</xsd:simpleType>
- name属性用于指明用户定义的数据类型名称。
- restriction 子元素定义用户自定义元素(simpleType)使用的数据类型。
- base属性指明自定义数据类型派生于哪个基本数据类型。
- facets_element子元素用于描述自定义数据类型的约束规则,如长度、范围、枚举类型、联合类型等。
自定义数据的约束规则:
minInclusive 内容范围的最小值,且包含此值
maxInclusive 内容范围的最大值,且包含此值
minExclusive 内容范围的最小值,且不包含此值
maxExclusive 内容范围的最大值,且不包含此值
length元素内容的长度
minLength元素内容的最小长度
maxLength元素内容的最大长度
enumeration枚举列表,元素内容从此列表内容中选择其中之一
list允许用户输入多个数据,数据间用空白间隔
pattern正规语法定义数据的组合类型
union元素内可包含多种不同数据类型, 但同时只能存在一种
totalDigits限制有效数字的最大位数
fractionDigits限制小数点后的位数
pattern用于指定数据类型的值必须匹配指定的正则表达式。如下图:
复杂类型:
复杂类型元素是指含有子元素或属性的元素,XML Schema中用< complexType>标记来定义,可以指定元素与元素或元素与属性的从属关系。语法格式如下:
<xsd:elementname="元素名称" type="数据类型">
<xsd:complexTypename="数据类型">
<!--子元素描述部分-->
<xsd:sequence>
...
</xsd:sequence>
</xsd:complexType>
</xsd:element>
- "元素名称"用于指明复杂类型元素的名称。
- "数据类型"指自定义数据类型的名称。
- <sequence>子元素表示在其定义范围内的所有元素都必须按顺序出现。除了<sequence>子元素外,其他可选的子元素如下图所列, 用于定义复杂类型所包含的内容模式。