Mfano wa XSD

Makadaro hii inaonyesha hizi kama inayokusanya XML Schema. Umasifu wa kusoma pia unaweza kufahamisha maadili ya kusoma schema tofauti.

Barua ya XML

Tunaelezea barua ya XML ya kwanza inayoitwa "shiporder.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>

Barua ya XML hii ina elementi za kigeni "shiporder", ambayo ina uwanja wa "orderid" wajogoo. Elementi ya "shiporder" ina mikundi mitatu tofauti: "orderperson", "shipto" na "item". Elementi ya "item" inaonyesha mara mbili, ina "title", elementi inayowezekana "note", "quantity" na elementi ya "price".

Inuhusu hii barua yanaelezea kwa msahari ya XML kuwa inaonekana na schema fulani. Barua hii: xsi:noNamespaceSchemaLocation="shiporder.xsd" inaeleza eneo la schema (hapa, hii na "shiporder.xml" ni kwa kifurushi moja).

Kumwambia Schema ya XML

Sasa, tunahitaji kumwambia schema ya hii faili ya XML.

Tunaweza kuanza na kufungua faili mpya, na kumwambia jina lake "shiporder.xsd". Kukubalia schema, tunapataa kufolisha huzuni ya faili ya XML, kusoma kipengele kila moja ambao tunatoa: kwanza tunastartea na kufafanua kina cha kawaida cha XML:

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

Kwenye schema ya juu, tumetumia eneo lenye jina ya msingi (xs), eneo hili linatokea na kina ya Schema language definition, kiwango cha kawaida ni http://www.w3.org/2001/XMLSchema.

Kiasi hicho, tunahitaji kufafanua kipengele "shiporder". Kipengele hiki ina uwezo mmoja, kinaweza kuhusisha vingine vya kipengele, kwa hiyo tunaelezea kuwa kipekee. Vingine vya kipengele cha kipengele "shiporder" vinatokana na kipengele cha xs:sequence, kinasababisha ujenzi wa vingine vya kipengele:

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

Baada ya hii, tunahitaji kufafanua kipengele "orderperson" kwa aina ya kawaida (kwa sababu hana vitu vya kiwango au vingine vya kipengele). Kifupi cha ujenzi (xs:string) kinatokana na kifupi cha jina cha eneo lenye jina, eneo hili linatokea na schema ya XML ya data ya kawaida ya schema:

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

Kiasi hicho, naona inafikia kupendeza kufafanua kipekee kwa kipengele kwa aina ya matokeo: "shipto" na "item". Sasa tunastartea na kufafanua kipengele "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>

Kwa sababu ya schema, tunaweza kutumia uwezo wa maxOccurs na minOccurs kusoma mara nyingi ya kipengele fulani. maxOccurs inasema kiwango cha kipengele kilichoweza kushika mara nyingi kipya, na minOccurs inasema kiwango cha kipengele kilichoweza kushika mara nyingi kizuri. uwezo wa maxOccurs na minOccurs kwa kawaida ni 1!

Sasa, tunaweza kudefini "item" kipengele. Kipengele huzingatwa katika kipengele "shiporder" mara nyingi. Hii inafanyika kwa kupitia kufungua uwezo wa maxOccurs wa kipengele "item" kwa "unbounded", kwa hiyo kipengele "item" kinaweza kushika mara kwa kawaida zaidi ya ambao mwenye huria anayefikia. Tunaonesha kwamba kipengele "note" ni kipengele kilichoweza kufikia: tunameweka uwezo wa minOccurs wa kipengele hiki kuwa 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>

Sasa, tunaweza kuwasiliana kwa kiwango cha "shiporder" kwa ajili ya mafanikio. Kwa sababu hii ni kiwango cha chaguo, tunasababisha use="required".

Mafano:Tafadhali wakilisha kwa uwanja wa mwisho ya hali hiyo:

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

Hii ni orodha ya wasomaji ya faili ya schema ya kina "shiporder.xsd":

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

Kuchunguza Schema

Usababishaji huo una uharibifu dhaifu, lakini hauwezi kusomwa kwa mawasiliano ya matumizi inayotarikia.

Usababishaji ulioitwa hapa ni unaanisha kufikiria kwa kwanza kufikiria visano na uwanja wa mawili na kisha kutumia kiwango cha ref kuwaandaa wenzao.

Hii ni schema ya faili inayotengwa kwa sababu ya uzoefu mpya:

<?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"/>
<!-- Mifano ya kipimo -->
<xs:attribute name="orderid" type="xs:string"/>
<!-- Mifano ya uwanja wa kina -->
<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>

Tumia spishi zilizotumika (Spishi Zilizotumika)

Methodi ya uwanja ya tatu inadefini kilele au spishi, hivyo inaonesha inabali kusaidia kufanya kwa uwanja wa uadilifu. Njia inayotumiwa ni: kwanza kumwambia jina kwa maelezo ya uwanja wa kawaida na kwa uwanja wa kawaida wa kina, kisha kutumia kipimo cha type kwa kumaliza kwa uwanja wa kawaida.

Hii ni schema ya uwanja wa kawaida iliyotumika methodi ya tatu ("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>

Mfano wa 'restriction' inaelekea kiwango cha data type kinatokana na eneo la kifaa cha W3C XML Schema. Kwa hivyo, mawingu ya hizi pia inaelekea kwamba thamani ya kiwango kinahitaji kuhusiana na mazingira ya neno:

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

Muundo wa <restriction> kina wa kusaidia kufikia muundo wa element. Tazama mabagamizi ya schema ya juu:

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

Makala hii inadai kuwa thamani ya element au property inayotumiwa kwa ukweli ni maandiko, na inahitajika kuwa muundo wa matumizi ya tano ya kwanza, na maneno haya yana uhusiano wa namba 0-9.