An example of XSD

本节会为您演示如何编写一个 XML Schema。您还将学习到编写 schema 的不同方法。

wurin XML

ka kai girmu wani na kasa na kai kowa "shiporder.xml" na XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<shiporder orderid="889923">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
 <orderperson>George Bush</orderperson>
 <shipto>
  <name>John Adams</name>
  <address>Oxford Street</address>
  <city>London</city>
  <country>UK</country>
 </shipto>
 <item>
  <title>Empire Burlesque</title>
  <note>Special Edition</note>
  <quantity>1</quantity>
  <price>10.90</price>
 </item>
 <item>
  <title>Hide your heart</title>
  <quantity>1</quantity>
  <price>9.90</price>
 </item>
</shiporder>

wurin XML na kasa na kai kowa kara "shiporder", wanda ya kai kowa kara kowa na "orderid" na yanci. "shiporder" na kara ya kai kowa kara kowa na "orderperson", "shipto" da "item". "item" na kara ya kai kowa kara kowa na "title", kowa na "note" na yanci, kowa na "quantity" da kowa na "price" na kara.

wurin gari wanda na kasa, xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance", na na ya kai girmu XML a kanan kowa ka kara yin kowa schema. wani na kasa: xsi:noNamespaceSchemaLocation="shiporder.xsd" na ya kai kowa jiko na schema (a kowa, yana wani kowa na "shiporder.xml" na wani kowa).

创建一个 XML Schema

现在,我们需要为上面这个 XML 文档创建一个 schema。

我们可以通过打开一个新的文件来开始,并把这个文件命名为 "shiporder.xsd"。要创建schema,我们仅仅需要简单地遵循 XML 文档中的结构,定义我们所发现的每个元素。首先我们开始定义一个标准的 XML 声明:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
...
</xs:schema>

在上面的 schema 中,我们使用了标准的命名空间 (xs),与此命名空间相关联的 URI 是 Schema 的语言定义(Schema language definition),其标准值是 http://www.w3.org/2001/XMLSchema。

接下来,我们需要定义 "shiporder" 元素。此元素拥有一个属性,其中包含其他的元素,因此我们将它认定为复合类型。"shiporder" 元素的子元素被 xs:sequence 元素包围,定义了子元素的次序:


 
  <xs:sequence>
  ...
  ...
  </xs:sequence>
  ...
 </xs:complexType>

然后我们需要把 "orderperson" 元素定义为简易类型(这是因为它不包含任何属性或者其他的元素)。类型 (xs:string) 的前缀是由命名空间的前缀规定的,此命名空间与指示预定义的 schema 数据类型的 XML schema 相关联:

<xs:element name="orderperson" type="xs:string"/>

接下来,我需要把两个元素定义为复合类型:"shipto" 和 "item"。我们从定义 "shipto" 元素开始:


 
  <xs:sequence>
   <xs:element name="name" type="xs:string"/>
   <xs:element name="address" type="xs:string"/>
   <xs:element name="city" type="xs:string"/>
   <xs:element name="country" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>

通过 schema,我们可使用 maxOccurs 和 minOccurs 属性来定义某个元素可能出现的次数。maxOccurs 定义某元素出现次数的最大值,而 minOccurs 则定义某元素出现次数的最小值。maxOccurs 和 minOccurs 的默认值都是 1!

现在,我们可以定义 "item" 元素了。这个元素可在 "shiporder" 元素内部出现多次。这是通过把 "item" 元素的 maxOccurs 属性的值设定为 "unbounded" 来实现的,这样 "item" 元素就可出现创作者所希望的任意多次。请注意,"note" 元素是可选元素。我们已经把此元素的 minOccurs 属性设定为 0 了:

<xs:element name="item" maxOccurs="unbounded">
 
  <xs:sequence>
   <xs:element name="title" type="xs:string"/>
   <xs:element name="note" type="xs:string" minOccurs="0"/>
   <xs:element name="quantity" type="xs:positiveInteger"/>
   <xs:element name="price" type="xs:decimal"/>
  </xs:sequence>
 </xs:complexType>

Hakanan, a kai a bayyana attributes na elements "shiporder" na wa. saboda ana buƙata ita, amfani da use="required".

Tunawa da ake bayyana:Tafiyar da ake bayyana na wannan attributes a wajib ce ta ayyuka:

<xs:attribute name="orderid" type="xs:string" use="required"/>

tunawa da ake bayyana na wannan fassarkin schema "shiporder.xsd" shine:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

 
  <xs:sequence>
   <xs:element name="orderperson" type="xs:string"/>
   
    
     <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   
   <xs:element name="item" maxOccurs="unbounded">
    
     <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   
  </xs:sequence>
  <xs:attribute name="orderid" type="xs:string" use="required"/>
 </xs:complexType>

</xs:schema>

Furodusar Schema

Hakanan taron da aka yi shine dace, amma yana da mahimmanci sosai lokacin da dabbobi yana da abubuwa da dama, yana da rashin la'akari da yin gudanarwa.

Tunawa da ake bayyana sabon taro a cikin haka, kafin a yi la'akari da kowace yanki daattsuni, kafin a yi amfani da attributes na ref don nuna su.

tunawa da a dace wanda a riko sabon taro:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 简易元素的定义 -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>




 
  <xs:sequence>
   
   
   
   
  </xs:sequence>
 </xs:complexType>


 
  <xs:sequence>
   
   
   
   
  </xs:sequence>
 </xs:complexType>


 
  <xs:sequence>
   
   
   
  </xs:sequence>
  
 </xs:complexType>

</xs:schema>

使用指定的类型(Named Types)

第三种设计方法定义了类或者类型,这样使我们有能力重复使用元素的定义。具体的方式是:首先对简易元素和复合元素进行命名,然后通过元素的 type 属性来指向它们。

tasiyarin da a fassara shirin schema na uku ("shiporder.xsd") da:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="stringtype">
 <xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="inttype">
 <xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<xs:simpleType name="dectype">
 <xs:restriction base="xs:decimal"/>
</xs:simpleType>
<xs:simpleType name="orderidtype">
 <xs:restriction base="xs:string">
  <xs:pattern value="[0-9]{6}"/>
 </xs:restriction>
</xs:simpleType>
<xs:complexType name="shiptotype">
 <xs:sequence>
  <xs:element name="name" type="stringtype"/>
  <xs:element name="address" type="stringtype"/>
  <xs:element name="city" type="stringtype"/>
  <xs:element name="country" type="stringtype"/>
 </xs:sequence>
</xs:complexType>
<xs:complexType name="itemtype">
 <xs:sequence>
  <xs:element name="title" type="stringtype"/>
  <xs:element name="note" type="stringtype" minOccurs="0"/>
  <xs:element name="quantity" type="inttype"/>
  <xs:element name="price" type="dectype"/>
 </xs:sequence>
</xs:complexType>
<xs:complexType name="shipordertype">
 <xs:sequence>
  <xs:element name="orderperson" type="stringtype"/>
  <xs:element name="shipto" type="shiptotype"/>
  <xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
 </xs:sequence>
 <xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>
<xs:element name="shiporder" type="shipordertype"/>
</xs:schema>

koyarawarri hukun tsa hukuma tsa XML Schema, gaba waje kai kama gaba hukun tsa W3C XML Schema namespace. sabonin da yau ya zuwa, mutummutin kuma zai zama mutummutin hukun tsa tsaƙaici ko kuma hukun tsa ƙasuwanci:

<xs:restriction base="xs:string">

Element restriction ana amfani da shi domin kawo ƙarfi ga element. Gani daga abubuwan schema da ake kai amfani da su:

<xs:simpleType name="orderidtype">
 <xs:restriction base="xs:string">
  <xs:pattern value="[0-9]{6}"/>
 </xs:restriction>
</xs:simpleType>

Anan kuma ka amfani da koda, wanda ya nufin cewa kowane element ko attribute na dole ya kasance string, kuma ana wucewa kowane biyu na shekaru shida, kuma waɗannan shekaru na dole su kasance 0-9 na adadi.