XML Schema教程


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>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus