XML Schema可以将文档中的元素声明为特定的类型,准许解析器检查文档的内容及其结构。
一、简单类型
XML Schema的简单类型只能包含数据。分为两种:
1.XML Schema内置的简单数据类型(共40多种)
优:可以把数据分的很具体
简单类型 | 定义 |
---|---|
string | 字符串数据 |
boolean | 二元类型的True或者 False |
date | 历法日期,格式是 CCYY-MM-DD |
dateTime | 历法日期和时间 |
time | 24小时格式的时间,可根据时区调节 |
decimal | 任意精度和位数的十进制数 |
integer | 整数 |
float | 标准的32位浮点 |
2.用户自定义的简单数据类型
自定义数据类型是指一个XML Schema类型为基础,添加一些限制条件,使之成为一个新的类型。
自定义数据类型使用<simple Type>标记,通过这个标记可以给XML Schema提供的数据类型添加一些限制,从而构造出新的类型。
使用simpleTvpe元素为XML文档中的元素和属性自定义数据类型的具体语法格式如下:
<xsd:simpleType name="name">
<xsd:restriction base="xsd:datatypes">
<xsd:facets_element value="value"/>
...
</xsd:restriction>
</xsd:simpleType>
其中,有几点说明如下。
name属性用于指明用户定义的数据类型名称。
restriction子元素定义用户自定义元素(simpleType)使用的数据类型。
base属性指明自定义数据类型派生于哪个基本数据类型。
facets element子元素用于描述自定义数据类型的约束规则,如长度、范围、枚举类型、联合类型等。
在自定义数据类型时,可根据需要使用下表所示的具体元素名称来表示约束规则,且每个元素都能用 value属性来指定范围或长度等具体的细节限制。
元素 | 说明 |
---|---|
minInclusive | 内容范围的最小值,且包含此值 |
maxInclusive | 内容范围的最大值,且包含此值 |
minExclusive | 内容范围的最小值,且不包含此值 |
maxExclusive | 内容范围的最大值,且不包含此值 |
length | 元素内容的长度 |
minLength | 元素内容的最小长度 |
maxLength | 元素内容的最大长度 |
enumeration | 枚举列表,元素内容从此列表内容中选择其中之一 |
list | 允许用户输入多个数据,数据间用空白间隔 |
pattern | 正规语法定义数据的组合类型 |
union | 元素内可包含多种不同数据类型,但同时只能存在一种 |
totalDigits | 限制有效数字的最大位数 |
fractionDigits | 限制小数点后的位数 |
其中pattern用于指定数据类型的值必须匹配指定的正则表达式。
符号 | 说明 | 示例 | 匹配 |
---|---|---|---|
? | 定义字符可出现0次或1次 | ab? | a、ab |
* | 定义字符可出现0次或多次 | ab* | a、abb |
+ | 定义字符可出现多次 | ab+ | ab、abb |
{n}或{n,m} | 定义字符可出现n或n~m次(n,m为整数) | ab{3,4} | abbb |
[字符] | 定义可出现的字符范围 | [a-z] | a、b... |
| | 表示选择关系 | a|b | a或b |
^ | 表示非的关系 | [^0-9] | 非数字 |
() | 匹配次数时,括号中的表达式可以作为整体被修饰 | (ab){2} | abab |
二、复杂类型
复杂类型可以像数据一样包含其他元素。
复杂类型是指含有子元素或属性的元素。在XML Schema中,用<complexType>标记来定义复杂类型元素。通过<complexTvpe>可以指定元素与元素或元素与属性的从属关系。
语法格式如下:
<xsd:element name="元素名称” type="数据类型">
<xsd:complexType name="数据类型">
<1-子元素描述部分->
<xsd:sequence>
...
</xsd:sequence>
</xsd:complexType>
</xsd:complexType>
"元素名称"用于指明复杂类型元素的名称。
"数据类型"指自定义数据类型的名称。
<sequence>子元素表示在其定义范围内的所有元素都必须按顺序出现。除了<sequence>子元素外,其他可选的子元素如表4-4所列,用于定义复杂类型所包含的内容模式。
complexType元素的子元素 | 定义 |
---|---|
all | 其定义的XML子元素可以无顺序地出现一个或多个 |
sequence | 其定义的XML子元素都必须按顺序出现 |
choice | 其定义的XML子元素选择其中之一出现 |
any | 其定义的任何XML子元素都必须出现 |
simpleContent | 没有XML子元素,只有数据内容、属性 |
complexContent | 只有XML子元素或空元素 |
attribute | 这种复杂类型只能包含命名属性 |