एक XSD उदाहरण
- पिछला पृष्ठ XSD एलीमेंट प्रतिस्थापन
- अगला पृष्ठ XSD स्ट्रिंग
इस भाग में आपको एक XML Schema लिखने के तरीके दिखाया जाएगा। आप अच्छे तरीके से 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 पठनकार को यह बताता है कि वह किसी schema के अनुसार इस दस्तावेज़ की पुष्टि करे। इस पंक्ति: xsi:noNamespaceSchemaLocation="shiporder.xsd" को यह बताता है कि schema कहाँ है (यहाँ यह "shiporder.xml" के अधिकांश फ़ोल्डर में है)।
एक XML Schema बनाएं
अब, हमको उपरोक्त XML दस्तावेज़ के लिए एक schema बनाना है。
हम एक नया फ़ाइल खोलकर इसे "shiporder.xsd" के नाम से नामित कर सकते हैं, और schema को बनाने के लिए हमें एक साधारण एक्सएमएल दस्तावेज़ की संरचना का अनुसरण करना है, जिसमें हम पाए हुए हर एलीमेंट को परिभाषित करते हैं। पहले, हम एक मानक एक्सएमएल घोषणा पर शुरू करते हैं:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... ... </xs:schema>
उपरोक्त schema में, हमने मानक नामस्पेस (xs) का इस्तेमाल किया है, जिसका संबंधित URI शेड्यूल लैंग्वेज डिफ़ाइनिशन (Schema language definition) है, जिसका मानक मान http://www.w3.org/2001/XMLSchema है。
अब, हम को "shiporder" एलीमेंट को परिभाषित करना है। इस एलीमेंट में एक अटीब्यूट है, जिसमें अन्य एलीमेंट हैं, इसलिए हम इसे कंपोजिट टाइप मानते हैं। "shiporder" एलीमेंट के सब-एलीमेंट एक्स:sequence एलीमेंट के भीतर बंद होते हैं, जो सब-एलीमेंट की क्रमिक व्यवस्था को परिभाषित करता है:
<xs:element name="shiporder"> <xs:complexType> <xs:sequence> ... ... </xs:sequence> ... </xs:complexType> </xs:element>
तब, हम "orderperson" एलीमेंट को सरल टाइप (इसके कारण यह कोई अटीब्यूट या अन्य एलीमेंट नहीं शामिल करता) के रूप में परिभाषित करना है। टाइप (xs:string) का प्रीफ़िक्स नामस्पेस के प्रीफ़िक्स से निर्दिष्ट होता है, जो नामस्पेस के प्रीफ़िक्स से एक्सएमएल शेड्यूल डेटा टाइप के लिए एक्सएमएल शेड्यूल के साथ संबंधित है:
<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" के मान से सेट करके हासिल किया जाता है, इस तरह "item" एलीमेंट कई बार प्रविष्ट हो सकता है जितना कि निर्माता चाहता है। ध्यान दें कि, "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>
एकत्रीय तत्व दर्शाता है कि डाटा टाइप W3C XML Schema नामस्पेस के डाटा टाइप से आता है। इसलिए, नीचे का टुकड़ा इस तरह का होता है: एलीमेंट या अट्रिब्यूट का मान शब्द टाइप का होना चाहिए:
<xs:restriction base="xs:string">
restriction एलीमेंट आमतौर पर एलीमेंट पर नियंत्रण लगाने के लिए उपयोग किया जाता है।इससे ऊपर के schema के उदाहरण देखें:
<xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType>
इस कोड से संकेत मिलता है कि एलीमेंट या गुण का मूल्य स्ट्रिंग होना चाहिए और यह लगातार छह अक्षर होना चाहिए, इसके अलावा ये अक्षर 0-9 के नंबर होने चाहिए。
- पिछला पृष्ठ XSD एलीमेंट प्रतिस्थापन
- अगला पृष्ठ XSD स्ट्रिंग