一个 XSD 实例

ਇਸ ਸੈਕਸ਼ਨ ਵਿੱਚ ਤੁਹਾਨੂੰ XML Schema ਲਿਖਣ ਦੀ ਪ੍ਰਦਰਸ਼ਨੀ ਦਿੱਤੀ ਜਾਵੇਗੀ। ਤੁਸੀਂ ਸਕੀਮਾ ਲਿਖਣ ਦੇ ਵੱਖ-ਵੱਖ ਤਰੀਕਿਆਂ ਨੂੰ ਵੀ ਸਿੱਖੋਗੇ।

XML ਡਾਕੂਮੈਂਟ

ਇਹ ਨਾਮ 'shiporder.xml' ਵਾਲਾ 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>

ਉੱਪਰਲੇ XML ਡਾਕੂਮੈਂਟ ਰੂਟ ਐਲੀਮੈਂਟ "shiporder" ਸਮੇਤ ਹੈ ਜਿਸ ਵਿੱਚ ਅਤੇ ਅਤੇ ਨਾਮ "orderid" ਦਾ ਪੈਰਾਮੀਟਰ ਹੈ। "shiporder" ਐਲੀਮੈਂਟ ਤਿੰਨ ਵੱਖ-ਵੱਖ ਉਪ-ਐਲੀਮੈਂਟਾਂ: "orderperson"、"shipto" ਅਤੇ "item" ਸਮੇਤ ਹੈ। "item" ਐਲੀਮੈਂਟ ਦੋ ਵਾਰ ਆਇਆ ਹੈ ਜਿਸ ਵਿੱਚ ਇੱਕ "title" ਹੈ, ਇੱਕ ਵਿਕਲਪਿਤ "note" ਐਲੀਮੈਂਟ, ਇੱਕ "quantity" ਅਤੇ ਇੱਕ "price" ਐਲੀਮੈਂਟ ਹੈ。

ਉੱਪਰਲੇ ਇਕ ਪਲੇਨ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ਨੂੰ ਸੂਚਿਤ ਕਰਦਾ ਹੈ ਕਿ XML ਪਾਰਸਿੰਗ ਐਗਜ਼ੇਕਟਰ ਕਿਸੇ ਸਕੀਮਾ ਦੇ ਅਧਾਰ 'ਤੇ ਇਹ ਡਾਕੂਮੈਂਟ ਪ੍ਰਮਾਣੀਕਰਨ ਕਰੇ। ਇਹ ਪਲੇਨ xsi:noNamespaceSchemaLocation="shiporder.xsd" ਸਕੀਮਾ ਦਾ ਸਥਾਨ (ਇੱਥੇ ਇਹ "shiporder.xml" ਦੇ ਇੱਕੋ ਫੋਲਡਰ ਵਿੱਚ ਹੈ) ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ。

ਇੱਕ 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) ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਹੈ, ਜਿਸ ਨਾਮ ਸਪੇਸ਼ਨ ਨਾਲ Schema ਦੇ ਭਾਸ਼ਾ ਪਰਿਭਾਸ਼ਾ (Schema language definition) ਸਬੰਧਤ ਹੈ, ਜਿਸ ਦਾ ਪ੍ਰਮਾਣਿਕ ਮੁੱਲ ਹੈ http://www.w3.org/2001/XMLSchema。

ਅਗਲੇ, ਅਸੀਂ "shiporder" ਐਲੀਮੈਂਟ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਹੈ। ਇਹ ਐਲੀਮੈਂਟ ਇੱਕ ਪ੍ਰਤੀਯੋਗਿਤਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਹੋਰ ਐਲੀਮੈਂਟ ਹਨ, ਇਸ ਲਈ ਅਸੀਂ ਇਸ ਨੂੰ ਕੰਪਲੈਕਸ ਟਾਈਪ ਮੰਨਦੇ ਹਾਂ। "shiporder" ਐਲੀਮੈਂਟ ਦੇ ਉਪ-ਐਲੀਮੈਂਟ ਨੂੰ xs:sequence ਐਲੀਮੈਂਟ ਦੁਆਰਾ ਘੇਰਿਆ ਗਿਆ ਹੈ, ਜਿਸ ਨਾਲ ਉਪ-ਐਲੀਮੈਂਟ ਦੀ ਕਿਸਮ ਨਿਰਧਾਰਿਤ ਕੀਤੀ ਗਈ ਹੈ:

<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
  ...
  ...
  </xs:sequence>
  ...
 </xs:complexType>
</xs:element>

ਤਦ ਅਸੀਂ "orderperson" ਐਲੀਮੈਂਟ ਨੂੰ ਸਰਲ ਟਾਈਪ ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਹੈ (ਇਹ ਇਸ ਲਈ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਕੋਈ ਪ੍ਰਤੀਯੋਗਿਤਾ ਜਾਂ ਕੋਈ ਹੋਰ ਐਲੀਮੈਂਟ ਨਹੀਂ ਹੈ)। ਟਾਈਪ (xs:string) ਦਾ ਪ੍ਰਤੀਕ ਨਾਮ ਸਪੇਸਸ਼ਨ ਦੇ ਪ੍ਰਤੀਕ ਦੁਆਰਾ ਨਿਰਧਾਰਿਤ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਨਾਮ ਸਪੇਸ਼ਨ ਨਾਲ XML schema ਦੇ ਅਧਿਸੂਚਿਤ ਪ੍ਰਤੀਯੋਗਿਤਾ ਦਾ XML schema ਸਬੰਧਤ ਹੈ:

<xs:element ਨਾਮ="orderperson" ਤਰੀਕਾ="xs:string"/>

ਅਗਲੇ, ਮੈਂ ਦੋ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਕੰਪਲੈਕਸ ਟਾਈਪ ਦੇ ਰੂਪ ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਹੈ: "shipto" ਅਤੇ "item"। ਅਸੀਂ "shipto" ਐਲੀਮੈਂਟ ਦੀ ਪਰਿਭਾਸ਼ਾ ਨਾਲ ਸ਼ੁਰੂ ਕਰਦੇ ਹਾਂ:

<xs:element name="shipto">
 <xs:complexType>
  <xs:sequence>
   <xs:element ਨਾਮ="name" ਤਰੀਕਾ="xs:string"/>
   <xs:element ਨਾਮ="address" ਤਰੀਕਾ="xs:string"/>
   <xs:element ਨਾਮ="city" ਤਰੀਕਾ="xs:string"/>
   <xs:element ਨਾਮ="country" ਤਰੀਕਾ="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

schema ਰਾਹੀਂ, ਅਸੀਂ maxOccurs ਅਤੇ minOccurs ਪ੍ਰਤੀਯੋਗਿਤਾ ਨੂੰ ਇੱਕ ਐਲੀਮੈਂਟ ਦੇ ਪ੍ਰਕਾਰ ਦੇ ਮੌਜੂਦਗੀ ਦੀ ਸੰਖਿਆ ਨਿਰਧਾਰਿਤ ਕਰ ਸਕਦੇ ਹਾਂ। maxOccurs ਇੱਕ ਐਲੀਮੈਂਟ ਦੇ ਮੌਜੂਦਗੀ ਦੀ ਸਭ ਤੋਂ ਵੱਧ ਸੰਖਿਆ ਨੂੰ ਨਿਰਧਾਰਿਤ ਕਰਦਾ ਹੈ, ਜਦਕਿ minOccurs ਇੱਕ ਐਲੀਮੈਂਟ ਦੇ ਮੌਜੂਦਗੀ ਦੀ ਸਭ ਤੋਂ ਘੱਟ ਸੰਖਿਆ ਨੂੰ ਨਿਰਧਾਰਿਤ ਕਰਦਾ ਹੈ। maxOccurs ਅਤੇ minOccurs ਦੀਆਂ ਮੂਲ ਪ੍ਰਤੀਯੋਗਿਤਾਵਾਂ 1 ਹਨ!

ਹੁਣ, ਅਸੀਂ "item" ਐਲੀਮੈਂਟ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰ ਸਕਦੇ ਹਾਂ। ਇਹ ਐਲੀਮੈਂਟ "shiporder" ਐਲੀਮੈਂਟ ਅੰਦਰ ਕਈ ਵਾਰ ਦਿਖਾਈ ਦੇ ਸਕਦਾ ਹੈ। ਇਹ ਇਸ ਤਰ੍ਹਾਂ ਹੀ ਹੋਇਆ ਹੈ ਕਿ "item" ਐਲੀਮੈਂਟ ਦੇ maxOccurs ਪ੍ਰਤੀਯੋਗਿਤਾ ਦੀ ਕੀਮਤ ਨੂੰ "unbounded" ਨਾਲ ਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਜਿਸ ਨਾਲ "item" ਐਲੀਮੈਂਟ ਕਿਸੇ ਵੀ ਸਿਰਜਕ ਦੀ ਇੱਛਾ ਨੂੰ ਅਨੁਸਾਰ ਕਿਸੇ ਵੀ ਤਰ੍ਹਾਂ ਦੀ ਕਿਸਮ ਦੀ ਕਈ ਵਾਰ ਦਿਖਾਈ ਦੇ ਸਕਦਾ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ, "note" ਐਲੀਮੈਂਟ ਇੱਕ ਵਿਕਲਪਿਤ ਐਲੀਮੈਂਟ ਹੈ। ਅਸੀਂ ਇਸ ਐਲੀਮੈਂਟ ਦੇ minOccurs ਪ੍ਰਤੀਯੋਗਿਤਾ ਨੂੰ 0 ਨਾਲ ਸੈਟ ਕੀਤਾ ਹੈ:


 <xs:complexType>
  <xs:sequence>
   <xs:element ਨਾਮ="title" ਤਰੀਕਾ="xs:string"/>
   
   <xs:element ਨਾਮ="quantity" ਤਰੀਕਾ="xs:positiveInteger"/>
   <xs:element ਨਾਮ="price" ਤਰੀਕਾ="xs:decimal"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

现在,我们可以声明 "shiporder" 元素的属性了。由于这是一个必选属性,我们规定 use="required"。

注释:此属性的声明必须被置于最后:


这是这个名为 "shiporder.xsd" 的 schema 文件的文档清单:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element ਨਾਮ="orderperson" ਤਰੀਕਾ="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <xs:sequence>
      <xs:element ਨਾਮ="name" ਤਰੀਕਾ="xs:string"/>
      <xs:element ਨਾਮ="address" ਤਰੀਕਾ="xs:string"/>
      <xs:element ਨਾਮ="city" ਤਰੀਕਾ="xs:string"/>
      <xs:element ਨਾਮ="country" ਤਰੀਕਾ="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   
    <xs:complexType>
     <xs:sequence>
      <xs:element ਨਾਮ="title" ਤਰੀਕਾ="xs:string"/>
      
      <xs:element ਨਾਮ="quantity" ਤਰੀਕਾ="xs:positiveInteger"/>
      <xs:element ਨਾਮ="price" ਤਰੀਕਾ="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  
 </xs:complexType>
</xs:element>
</xs:schema>

分割 Schema

前面的设计方法非常容易,但当文档很复杂时却难以阅读和维护。

ਅਗਲੇ ਪੇਸ਼ ਕੀਤੇ ਗਏ ਡਿਜ਼ਾਇਨ ਤਰੀਕਾ ਪਹਿਲਾਂ ਸਾਰੇ ਇਲੈਕਟਰਨ ਅਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਪਰਿਭਾਸ਼ਾ ਕਰਨ ਦੇ ਮੱਦੇਨਜ਼ਰ ਹੈ, ਫਿਰ ਉਨ੍ਹਾਂ ਨੂੰ ref ਵਿਸ਼ੇਸ਼ਤਾ ਦੇ ਮਾਧਿਅਮ ਨਾਲ ਸੰਦਰਭਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ。

ਇਹ ਨਵੇਂ ਤਰੀਕੇ ਨਾਲ ਡਿਜ਼ਾਇਨ ਕੀਤੇ ਗਏ schema ਫਾਈਲ ਹੈ:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- ਸਰਲ ਇਲੈਕਟਰਨ ਦੇ ਪਰਿਭਾਸ਼ਾ -->
<xs:element ਨਾਮ="orderperson" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="name" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="address" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="city" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="country" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="title" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="note" ਤਰੀਕਾ="xs:string"/>
<xs:element ਨਾਮ="quantity" ਤਰੀਕਾ="xs:positiveInteger"/>
<xs:element ਨਾਮ="price" ਤਰੀਕਾ="xs:decimal"/>
<!-- ਅਟਰੀਬਿਊਟ ਦੇ ਨਿਰਧਾਰਣ -->
<xs:attribute name="orderid" type="xs:string"/>
<!-- ਕੰਪਲੈਕਸ ਐਲੀਮੈਂਟ ਦੇ ਨਿਰਧਾਰਣ -->
<xs:element name="shipto">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="name"/>
   <xs:element ref="address"/>
   <xs:element ref="city"/>
   <xs:element ref="country"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>
<xs:element name="item">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="title"/>
   <xs:element ref="note" minOccurs="0"/>
   <xs:element ref="quantity"/>
   <xs:element ref="price"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>
<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="orderperson"/>
   <xs:element ref="shipto"/>
   <xs:element ref="item" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="orderid" use="required"/>
 </xs:complexType>
</xs:element>
</xs:schema>

ਸ਼ਾਰਟ ਨਾਮ ਦੇ ਤਰੀਕੇ ਨਾਲ

ਤੀਜਾ ਡਿਜਾਇਨ ਤਰੀਕਾ ਕਲਾਸ ਜਾਂ ਤਰੀਕੇ ਨਿਰਧਾਰਿਤ ਕਰਦਾ ਹੈ ਜਿਸ ਨਾਲ ਅਸੀਂ ਐਲੀਮੈਂਟ ਦੇ ਨਿਰਧਾਰਣ ਨੂੰ ਮੁੜ ਵਰਤਣ ਦੀ ਸਮਰੱਥਾ ਰੱਖਦੇ ਹਾਂ। ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ: ਪਹਿਲਾਂ ਸਰਲ ਐਲੀਮੈਂਟ ਅਤੇ ਕੰਪਲੈਕਸ ਐਲੀਮੈਂਟ ਦਾ ਨਾਮ ਕਰੋ ਅਤੇ ਫਿਰ ਐਲੀਮੈਂਟ ਦੇ type ਪ੍ਰਤੀ ਇਸਦਾ ਨਿਰਦੇਸ਼ ਦਿਓ。

ਇਹ ਤੀਜੇ ਤਰੀਕੇ ਨਾਲ ਡਿਜਾਇਨ ਕੀਤਾ ਗਿਆ schema ਫਾਇਲ ('shiporder.xsd') ਹੈ:

<?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 name="inttype">
 <xs:restriction base="xs:positiveInteger"/>

<xs:simpleType name="dectype">
 <xs:restriction base="xs:decimal"/>


 
  
 

<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>

restriction عناصر اجاوز وسیع را نشون می‌دهد که نوع داده‌های داده‌های نوع داده‌های نام‌فضای W3C XML Schema هستند. بنابراین، بخش زیرین نیز به معنای آن است که مقدار عناصر یا ویژگی‌ها باید مقدارهای نوع رشته باشند:


restriction 元素常被用于向元素施加限制。请看下面这些来自以上 schema 的片:


 
  
 

这代码指示出,元素或属性的值必须为字符串,并且必须是连续的六个字符,同时这些字符必须是 0-9 的数字。