最近埋头苦读 ** WMFC ** 定义的接口 1 标准文档,其中对 XML 格式的定义都使用了 ** XML ** Schema ,由于 ** XML Schema ** 在很多方面都有很大的作用,大有取代 ** DTD ** 的趋势,所以在此写了一些学习笔记,有疏漏的地方请大家指正!
** XML Schema ** 的其他方面偶就不在这里罗嗦了,直接进入主题,关于 ** XML Schema ** 的基本语法。
XSDL ( XML Schema 定义语言 ) 由元素、属性、命名空间和 XML 文档种的其他节点构成的。
** 一、 ** ** XSD ** ** 中的元素 **
XSD 文档至少要包含: schema 根元素和 XML 模式命名空间的定义、元素定义。
** 1 ** ** 、 schema ** ** 根元素 **
语法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="“" xmlschema="" ”="">
2
3…
4
5</xsd:schema>
在 XSD 中必须定义一个且只能定义一个 schema 根元素。根元素中包括模式的约束、 XML 模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些属性。
** 2 ** ** 、元素 **
语法如下:
1<xsd:element name="”user”" type="”xsd:string”"></xsd:element>
XSD 中的元素是利用 element 标识符来声明的。其中 name 属性是元素的名字, type 属性是元素值的类型,在这里可以是 XML Schema 中内置的数据类型或其他类型。
例子:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="“" xmlschema="" ”="">
2<xsd:element name="”user”" type="”xsd:string”"></xsd:element>
3</xsd:schema>
以上文档对应的有效 XML 文档如下:
1<user>string</user>
在元素的定义中还有 2 个属性: minOccurs 和 maxOccurs 。其中 minOccurs 定义了该元素在父元素中出现的最少次数(默认为 1 ,值为大于等于 0 的整数), maxOccurs 定义了该元素在父元素中出现的最多次数(默认为 1 ,值为大于等于 0 的整数)。在 maxOccurs 中可以把值设置为 unbounded ,表示对元素出现的最多次数没有限制。
例子:
1<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2<xsd:element maxoccurs="”unbounded”" minoccurs="”0”" name="”user”" type="”xsd:string”"></xsd:element>
3</xsd:schema>
表示为元素 user 的类型为 string ,出现的次数最少为 0 (也就是可选),最多不限制。
** 3 ** ** 、引用元素和替代 **
语法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="”" xmlschema="" ”="">
2<xsd:element name="”user”" type="”xsd:string”"></xsd:element>
3<xsd:element name="”name”">
4<xsd:complextype>
5<xsd:sequence>
6<xsd:element ref="”user”"></xsd:element>
7</xsd:sequence>
8</xsd:complextype>
9</xsd:element>
10</xsd:schema>
引用是利用 element 标记符的 ref 属性实现的。主要适用于避免在文档中多次定义同一个元素,应当将经常使用的元素定义为根元素的子元素,以便在文档的任何地方引用它。
在这里还可以为某个定义的元素起一个别名(偶的理解 ^o^ ),方法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="”" xmlschema="" ”="">
2<xsd:element name="”yonghu”" substitutiongroup="”user”" type="”xsd:string”"></xsd:element>
3<xsd:element name="”user”" type="”xsd:string”"></xsd:element>
4<xsd:element name="”name”">
5<xsd:complextype>
6<xsd:sequence>
7<xsd:element ref="”user”"></xsd:element>
8</xsd:sequence>
9</xsd:complextype>
10</xsd:element>
11</xsd:schema>
以上文档对应的有效 XML 文档如下:
1<name>
2<user>string</user>
3</name>
或者:
1<name>
2<yonghu>string</yonghu>
3</name>
主要是利用 element 标识符中的属性 substitutionGroup 实现的。
** 4 ** ** 、设置默认值和固定值 **
语法如下:
1<xsd:element default="”xian”" name="”city”" type="”xsd:string”"></xsd:element>
1<xsd:element fixed="”china”" name="”country”" type="”xsd:string”"></xsd:element>
通过 default 属性的设置,可以在 XML 文档中没有对 city 元素定义时赋予默认值。而使用 fixed 属性,可以给元素 country 设定一个固定的值 china ,并且不允许改变!
** 5 ** ** 、利用组合器控制结构 **
** sequence ** 组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。语法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="”" xmlschema="" ”="">
2<xsd:element name="”name”">
3<xsd:complextype>
4<xsd:sequence>
5<xsd:element name="”first”" type="”xsd:string”"></xsd:element>
6<xsd:element name="”middle”" type="”xsd:string”"></xsd:element>
7<xsd:element name="”last”" type="”xsd:string”"></xsd:element>
8</xsd:sequence>
9</xsd:complextype>
10</xsd:element>
11</xsd:schema>
** all ** 组合器,允许所定义的元素可以按照任意顺序显示, all 元素的子元素在默认情况下是必须的,而且每次最多显示一次。语法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="”" xmlschema="" ”="">
2<xsd:element name="”name”">
3<xsd:complextype>
4<xsd:all minoccurs="”0”">
5<xsd:element name="”first”" type="”xsd:string”"></xsd:element>
6<xsd:element name="”middle”" type="”xsd:string”"></xsd:element>
7<xsd:element name="”last”" type="”xsd:string”"></xsd:element>
8</xsd:all>
9</xsd:complextype>
10</xsd:element>
11</xsd:schema>
** choice ** 组合器,允许指定多组声明中的一个,用于互斥情况。语法如下:
1<xsd:schema 2001="" http:="" www.w3.org="" xmlns:xsd="”" xmlschema="" ”="">
2<xsd:element name="”name”">
3<xsd:complextype>
4<xsd:choice>
5<xsd:element name="”first”" type="”xsd:string”"></xsd:element>
6<xsd:element name="”middle”" type="”xsd:string”"></xsd:element>
7<xsd:element name="”last”" type="”xsd:string”"></xsd:element>
8</xsd:choice>
9</xsd:complextype>
10</xsd:element>
11</xsd:schema>
** 二、定义属性 **
在 XML Schema 文档中可以按照定义元素的方法定义属性,但受限制的程度较高。它们只能是简单类型,只能包含文本,且没有子属性。可以应用在 attribute 元素定义中的属性如下:
default 初始默认值
fixed 不能修改和覆盖的属性固定值
name 属性的名称
ref 对前一个属性定义的引用
type 该属性的 XSD 类型或者简单类型
use 如何使用属性
form 确定 attributeFormDefault 的本地值
id 模式文档中属性唯一的 ID
Default 、 fixed 、 name 、 ref 和 type 属性与在 element 标记中定义的对应属性相同,但 type 只能是简单类型。 Use 属性的值可以是: optional (属性不是必须的,此为默认属性)、 prohibited 或者 required (属性是强制的)。
** 1 、创建属性 **
语法如下:
1<xsd:attribute name="”age”" type="”xsd:integer”"></xsd:attribute>
该语句定义了一个名为 age 的属性,它的值必须是一个整数。把它添加到模式中时,它必须时 schema 元素、 complexType 元素或者 attributeGroup 元素的子元素。
<p class="MsoNormal" style="MARGIN: 0c