一个 XSD 实例

ఈ భాగంలో మీరు XML Schema రాయడానికి చూపిస్తాము. మీరు Schema రాయడానికి వివిధ పద్ధతులను కూడా నేర్చుకుంటారు.

XML డాక్యుమెంట్

ఈ పేరుతో "shiporder.xml" అనే XML డాక్యుమెంట్ నిమిత్తం చూడండి:

<?xml version="1.0" encoding="ISO-8859-1"?>
<shiporder orderid="889923">


 <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),与此命名空间相关联的 URI 是 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) 的前缀是由命名空间的前缀规定的,此命名空间与指示预定义的 schema 数据类型的 XML schema 相关联:

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

ఆగమనంలో, నేను రెండు ఎలిమెంట్లను కంపౌండ్ టైప్గా నిర్వచించాలి: "shipto" మరియు "item". మేము "shipto" ఎలిమెంట్ నిర్వచించడం మొదలు చేస్తాము:

<xs:element name="shipto">
 <xs:complexType>
  <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>

schema ద్వారా, మేము maxOccurs మరియు minOccurs అట్రిబ్యూట్లను వినియోగించవచ్చు, అలా కొన్ని ఎలిమెంట్లు ఎంతసార్లు కనిపించవచ్చాయి అని నిర్వచించవచ్చు. maxOccurs కొన్ని ఎలిమెంట్లు కనిపించవచ్చు అత్యధిక సంఖ్యను నిర్వచిస్తుంది, మరియు minOccurs కొన్ని ఎలిమెంట్లు కనిపించవచ్చు అత్యవసర సంఖ్యను నిర్వచిస్తుంది. maxOccurs మరియు minOccurs యొక్క డిఫాల్ట్ విలువలు 1!

ఇప్పుడు, మేము "item" ఎలిమెంట్ను నిర్వచించవచ్చు. ఈ ఎలిమెంట్ "shiporder" ఎలిమెంట్లో అనేకసార్లు కనిపించవచ్చు. ఇది "item" ఎలిమెంట్ యొక్క maxOccurs అట్రిబ్యూట్ విలువను "unbounded" గా సెట్ చేయడం ద్వారా సాధ్యపడుతుంది, అలా ఈ ఎలిమెంట్ సృష్టికర్త కోరుకున్న ఏమైనా అనేకసార్లు కనిపించవచ్చు. చూపించండి, "note" ఎలిమెంట్ ఎంపికలుకున్న ఎలిమెంట్ కాదు. మేము ఈ ఎలిమెంట్ యొక్క minOccurs అట్రిబ్యూట్ విలువను 0 గా సెట్ చేశాము:

<xs:element name="item" maxOccurs="unbounded">
 <xs:complexType>
  <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:element>

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

注释:ఈ అట్రిబ్యూట్ ప్రకటన చివరిగా ఉండాలి:

<xs:attribute name="orderid" type="xs:string" 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 name="orderperson" type="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <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>
   <xs:element name="item" maxOccurs="unbounded">
    <xs:complexType>
     <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:element>
  </xs:sequence>
  <xs:attribute name="orderid" type="xs:string" use="required"/>
 </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 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: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>
<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>

restriction మూలకం డేటా టైప్ ను W3C XML Schema నామకరణ రంగం నుండి ప్రాప్తి చేసుకుంటుంది. అందువల్ల, దిగువ పాక్షికాంశం అంశం లేదా అంశం యొక్క విలువ స్ట్రింగ్ టైప్ విలువలు ఉండాలి:

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

restriction మూలకం సాధారణంగా అంశాలపై పరిమితులను విధిస్తుంది. దిగువన ఉన్న స్కీమా నుండి చివరి పాక్షికాంశాలను చూడండి:

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

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