XML Schema学习(二)

** 三、 ** ** XML Schema ** ** 数据类型 ** **

**

XML Schema 提供了一组丰富的内置数据类型,用于定义元素中允许的类型。下面将介绍一些完全符合 C# 标准的通用类型。

** 1 ** ** 、基本数据类型

**

基本数据类型是在 XML Schema 中使用的每种数据类型的最基本构成块。可以根据这些类型构造自定义的类型。这些类型包括:

boolean 可以是 1 ( true )或者 0 ( false )。

dateTime 表示时间的部分可选,格式: CCYY-MM-DDThh:mm:ss

例如: 2005-3-18T14:48:12

decimal 表示任意精度的十进制数字。

string 字符数据。

int 表示从 -2,147,483,648 到 2,147,483,648 之间一个整数。

nonNegativeInteger 表示大于或者等于 0 的一个整数。

nonPositiveInteger 表示小于或者等于 0 的一个整数。

short 表示从 -32768 到 32767 之间的一个整数。

例如:

 1<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 2<xsd:element name="”ContactDetails”">
 3<xsd:complextype>
 4<xsd:sequence>
 5<xsd:element ref="”name”"></xsd:element>
 6<xsd:element name="”rate”" type="”xsd:decimal”"></xsd:element>
 7</xsd:sequence>
 8<xsd:attribute name="”lastUpdated”" type="”xsd:dateTime”"></xsd:attribute>
 9</xsd:complextype>
10</xsd:element>
11<xsd:element name="”name”">
12<xsd:complextype>
13<xsd:sequence>
14<xsd:element name="”first”" type="”xsd:string”"></xsd:element>
15<xsd:element name="”middle”" type="”xsd:string”"></xsd:element>
16<xsd:element name="”last”" type="”xsd:string”"></xsd:element>
17</xsd:sequence>
18<xsd:attribute name="”local”" type="”xsd:boolean”"></xsd:attribute>
19</xsd:complextype>
20</xsd:element>
21</xsd:schema>

以上文档对应有效的 XML 文档如下:

1<contactdetails 2005-3-18t14:48:12”="" lastupdated="”">
2<name local="”true”">
3<first>santld</first>
4<middle></middle>
5<last>wang</last>
6</name>
7<rate>10.27</rate>
8</contactdetails>

** 2 ** ** 、简单类型

**

虽然从内置数据类型中得到了许多的功能,但是在许多情况下,只有数据类型来限制数据的值是远远不够的。这里在学习简单类型之前,先看看关于约束。

** 约束方面

**

enumeration 用空格分开的一组指定的数值。它把数据类型约束为指定的值。

fractionDigit 指定小数点后的最大位数。

length 长度单位。

minExclusive 下限值,所有的值都必须大于该值。

maxExclusive 上限值,所有的值都应该小于该值。

minLength 长度单位的最小个数。

maxLength 长度单位的最大数。

minInclusive 最小值,所有的值都应该大于或者等于该值。

maxInclusive 最大值,所有的值都应该小于或者等于该值。

pattern 数据类型的值必须匹配的指定模式, pattern 值必须是一个正则表达式。

totalDigits 指定小数最大位数的值。

whiteSpace 其值为: preserve (值中的空格不能改变), replace (所有的制表

符、换行 符和回车符都用空格代替), collapse (执行 replace ,删

除相邻的、结尾处 和开头处的空格)。

要应用上述的约束,就要利用元素 restriction 。这个元素中有 2 个属性: id 属性是模式文档中 restriction 元素的唯一标识符, base 属性设置为一个内置的 XSD 数据类型或者现有的简单类型定义,他是一种被限制的类型。

例如:

1<xsd:restriction base="”xsd:string”">
2<xsd:minlength value="”4”"></xsd:minlength>
3<xsd:maxlength value="”10”"></xsd:maxlength>
4</xsd:restriction>

如上,将字符串最小长度限定为 4 个字符,将最大长度限定为 10 个字符。

1<xsd:restriction base="”xsd:int”">
2<xsd:mininclusive value="”1”"></xsd:mininclusive>
3<xsd:maxinclusive value="”100”"></xsd:maxinclusive>
4</xsd:restriction>

如上,将一个整数的取值范围设置为 1 到 100 之间。

1<xsd:restriction base="”xsd:string”">
2<xsd:enumeration value="”FistValue”"></xsd:enumeration>
3<xsd:enumeration value="”SecondValue”"></xsd:enumeration>
4<xsd:enumeration value="”ThirdValue”"></xsd:enumeration>
5</xsd:restriction>

如上,字符串只能为枚举出的三种值。

** 简单类型

**

简单类型是对一个节点的可能值进一步限制的自定义数据类型。创建简单类型需要利用 simpleType 元素,其定义如下:

1<simpletype final="”(#all|(list|union|restriction))”" id="”ID”" name="”NCName”"></simpletype>

id 属性应唯一的标明文档内的 simpleType 元素, name 不能使用冒号字符。 simpleType 不能包含元素,也不能有属性,根据在 simpleType 中定义的规则,它基本上是一个值,或者是一个值的集合。

例如:

1<xsd:simpletype name="”personsName”">
2<xsd:restriction base="”xsd:string”">
3<xsd:minlength value="”4”"></xsd:minlength>
4<xsd:maxlength value="”8”"></xsd:maxlength>
5</xsd:restriction>
6</xsd:simpletype>
1<xsd:element name="”first”" type="”personsName”"></xsd:element>

以上文档对应有效的 XML 文档如下:

1<first>Santld</first>

以下就是无效的 XML 文档:

1<first>SS</first>

或者

1<first>Santld wang</first>

再举个例子:

1<xsd:simpletype name="”personsTitle”">
2<xsd:restriction base="”xsd:string”">
3<xsd:enumeration value="”Mr.”"></xsd:enumeration>
4<xsd:enumeration value="”Mrs.”"></xsd:enumeration>
5<xsd:enumeration value="”Miss.”"></xsd:enumeration>
6</xsd:restriction>
7</xsd:simpletype>
1<xsd:element name="”title”" type="”personsTitle”"></xsd:element>

上面定义的类型 personsTitle 是一个字符串类型,但它的值只能是 Mr. 、 Mrs. 或者 Miss. 其中的一个。

** 复杂类型

**

复杂类型的定义必须使用 complexType 元素,在这里可以包含属性和元素。在复杂类型的使用中,主要是 complexType 和 simpleType 配合使用。格式如下:

1<xsd:complextype name="”name”"></xsd:complextype>

例如:

1<xsd:element name="name" type="FullName"></xsd:element>
1<xsd:complextype name="FullName">
2<xsd:sequence>
3<xsd:element default="John" maxoccurs="1" minoccurs="0" name="first" type="PersonsFirstname"></xsd:element>
4<xsd:element maxoccurs="unbounded" minoccurs="0" name="middle" nillable="true" type="xsd:string"></xsd:element>
5<xsd:element default="Doe" maxoccurs="1" minoccurs="1" name="last" type="xsd:string"></xsd:element>
6</xsd:sequence>
7<xsd:attribute default="Mr." name="title" type="PersonsTitle"></xsd:attribute>
8</xsd:complextype>
1<xsd:simpletype name="PersonsFirstname">
2<xsd:restriction base="xsd:string">
3<xsd:minlength value="4"></xsd:minlength>
4<xsd:maxlength value="10"></xsd:maxlength>
5</xsd:restriction>
6</xsd:simpletype>
1<xsd:simpletype name="PersonsTitle">
2<xsd:restriction base="xsd:string">
3<xsd:enumeration value="Mr."></xsd:enumeration>
4<xsd:enumeration value="Mrs."></xsd:enumeration>
5<xsd:enumeration value="Miss."></xsd:enumeration>
6</xsd:restriction>
7</xsd:simpletype>

如上就实现了一个复杂类型,该例子实现了一个复杂类型 FullName ,其中包含了两个简单类型 PersonsFirstname 和 PersonsTitle 。

** 分组和属性

**

在为定义 XML 文档而创建的一些更为复杂的定义中,会有一些元素集、属性集的组合,这是我们就使用了分组的概念。分组定义中使用的是 group 元素。

例如:

1<xsd:group name="”CityChoice”">
2<xsd:choice>
3<xsd:element beijing="" name="”" type="”xsd:string”" ”=""></xsd:element>
4<xsd:element name="”" shanghai="" type="”xsd:string”" ”=""></xsd:element>
5<xsd:element name="”Xian”" type="”xsd:string”"></xsd:element>
6</xsd:choice>
7</xsd:group>
1<xsd:element name="”City”">
2<xsd”group maxoccurs="”1”" minoccurs="”1”" ref="”CityChoice”"></xsd”group>
3</xsd:element>

对属性的分组,应该使用 attributeGroup 元素,例如:

1<xsd:attributegroup name="”contactAttribs”">
2<xsd:attribute name="”city”" type="”xsd:string”"></xsd:attribute>
3<xsd:attribute name="”country”" type="”xsd:string”"></xsd:attribute>
4<xsd:attribute name="”age”" type="”xsd:string”"></xsd:attribute>
5</xsd:attributegroup>
1<xsd:element name="”contact”">
2<xsd:complextype>
3<xsd:attributegroup ref="”contactAttribs”"></xsd:attributegroup>
4</xsd:complextype>
5</xsd:element>

以上文档对应有效的 XML 文档如下:

1<contact age="”25”" beijing="" china="" city="”" country="”" ”=""></contact>

** 内容模型

**

内容模型可以对在 XML 文档内使用的元素、属性和类型进行限制,确定用户可以在 XML 实例的哪些等级添加自己的元素和属性。

** any

**

当在 XML 中声明元素时 any 是默认的内容模型,该模型可以包含文本、元素和空格。如果允许添加元素的内容,且无需屋里修改模式文件,就可以使用该模型。

<p class

Published At
Categories with Web编程
Tagged with
comments powered by Disqus