XML Schema学习(一)

最近埋头苦读 ** 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
34
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

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