1. 最简单的 Schema 文档
如何写一个最简单的 XML Schema 文档呢?
首先,我们写出一个最简单的 XML 文档。
hello.xml
-------------------
1<greeting>Hello World!!</greeting>
hello.xsd
----------
1<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
2<xsd:element name="greeting" type="xsd:string"></xsd:element>
3</xsd:schema>
XML Schema 文档后缀名是 .xsd ,完全符合 XML 语法,根元素是 schema ,命名空间 xmlns:xsd=" http://www.w3.org/2001/XMLSchema ,用元素
1<element> 定义实例文档中的元素,如 greeting 。
2
3# 2\. 含子元素的 Schema 文档
4
5假设实例文档是如下的:
6
7customer.xml
8
9\-----------
10
11<customer>
12<name>teiki</name>
13<address>No.237, Road Waitan, Shanghai </address>
14</customer>
15
16则可以写出以下的 XML Schema 文档:
17
18customer.xsd
19
20\----------------
21
22<?xml version="1.0"?>
23<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
24<xsd:element name="customer">
25<xsd:complextype>
26<xsd:sequence>
27<xsd:element name="name" type="xsd:string"></xsd:element>
28<xsd:element name="address" type="xsd:string"></xsd:element>
29</xsd:sequence>
30</xsd:complextype>
31</xsd:element>
32</xsd:schema>
33
34实例文档 customer.xml 中, <customer> 元素含有两个子元素,所以我们在 Schema 文档中采用 ComplexType 来定义该元素。 sequence 表示子元素依次出现的顺序。
35
36# 3\. 含子元素和孙元素的 Schema 文档
37
38这次我们给出一个更加复杂一些的文档:
39
40customer.xml
41
42\---------------
43
44<customer>
45<name>Teiki</name>
46<address>
47<!-- address 追加一个地址子元素 \-->
48<prefecture> Zhejiang </prefecture>
49<city> Hangzhou </city>
50<street> Xilu Road , No.121, 7F </street>
51</address>
52</customer>
53
54为此,我们需要一个更加复杂一点的 Schema 文档:
55
56address.xsd
57
58\-----------------
59
60<?xml version="1.0"?>
61<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
62<xsd:element name="customer">
63<xsd:complextype>
64<xsd:sequence>
65<xsd:element name="name" type="xsd:string"></xsd:element>
66<!-- 追加子元素 address-->
67<xsd:element name="address">
68<xsd:complextype>
69<xsd:sequence>
70<xsd:element name="prefecture" type="xsd:string"></xsd:element>
71<xsd:element name="city" type="xsd:string"></xsd:element>
72<xsd:element name="street" type="xsd:string"></xsd:element>
73</xsd:sequence>
74</xsd:complextype>
75</xsd:element>
76</xsd:sequence>
77</xsd:complextype>
78</xsd:element>
79</xsd:schema>
80
81不过,我们还可以采用 ref 元素来重新编写这个 Schema 文档:
82
83address2.xsd
84
85\----------------------
86
87<?xml version="1.0"?>
88<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
89<xsd:element name="customer">
90<xsd:complextype>
91<xsd:sequence>
92<xsd:element name="name" type="xsd:string"></xsd:element>
93<xsd:element ref="address"></xsd:element>
94</xsd:sequence>
95</xsd:complextype>
96</xsd:element>
97<xsd:element name="address">
98<xsd:complextype>
99<xsd:sequence>
100<xsd:element name="prefecture" type="xsd:string"></xsd:element>
101<xsd:element name="city" type="xsd:string"></xsd:element>
102<xsd:element name="street" type="xsd:string"></xsd:element>
103</xsd:sequence>
104</xsd:complextype>
105</xsd:element>
106</xsd:schema>
107
108使用 ref 元素可以直接将其指向另一个模块,使文档更加具有可读性。
109
110# 4\. 定义相同子元素的数量
111
112先看这个简单的订购数据实例文档:
113
114order.xml
115
116\---------
117
118<order>
119<orderitem>Accounting Book</orderitem>
120<orderitem>Taxation Book</orderitem>
121</order>
122
123假设 <orderitem> 元素,即每次的订购书目不能超过 10 种,那该怎么写这个 Schema 文档呢?这里要用到 <element> 的 maxOccurs 属性。
124
125order.xsd
126
127\--------------------
128
129<?xml version="1.0"?>
130<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
131<xsd:element name="order">
132<xsd:complextype>
133<xsd:sequence>
134<xsd:element maxoccurs="10" name="orderItem" type="xsd:string"></xsd:element>
135</xsd:sequence>
136</xsd:complextype>
137</xsd:element>
138</xsd:schema>
139
140第 7 行中的 maxOccurs 属性为 10 ,代表 orderItem 元素可以最大有 10 个。如果,不设定元素个数,则可以用 maxOccurs="unbounded" 来定义。
141
142类似,如果要定义最小值,可以使用 minOccurs ,比如下面这句:
143
144<xsd:element maxoccurs="10" minoccurs="5" name="orderItem" type="xsd:string"></xsd:element>
145
146这两个属性缺省值都是 1 。
147
148# 5\. 定义可选项的子元素
149
150假如上面的订书数据中,可以用书名或者书号任一一种订购,则实例文档可能如下:
151
152order2.xml
153
154\-----------------
155
156<order>
157<orderitem>
158<!-- 书名订购 \-->
159<name>Accounting Book</name>
160</orderitem>
161<orderitem>
162<!-- 书号订购 \-->
163<id>7-5058-3496-7</id>
164</orderitem>
165</order>
166
167这时书写 Schema 文档还需要使用 choice 元素。
168
169order2.xsd
170
171\-------------------------
172
173<?xml version="1.0"?>
174<xsd:schema xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
175<xsd:element name="order">
176<xsd:complextype>
177<xsd:sequence>
178<xsd:element maxoccurs="10" ref="orderItem"></xsd:element>
179</xsd:sequence>
180</xsd:complextype>
181</xsd:element>
182<xsd:element name="orderItem">
183<xsd:complextype></xsd:complextype></xsd:element></xsd:schema></element></orderitem></customer></element>