Latest web development tutorials

المثال مخطط XML

هذا القسم سوف تظهر لك كيفية كتابة مخطط XML. سوف تتعلم أيضا طرق مختلفة لكتابة المخطط.


وثائق 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>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</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"، الذي يحتوي على سمة "معرف الطلب" من. "Shiporder" عنصر يحتوي على ثلاثة عناصر تابعة مختلفة: "orderperson"، "shipto" و "البند". يبدو "البند" العنصر مرتين، وأنه يحتوي على "اللقب"، اختياري "مذكرة" عنصر، و "كمية" و "السعر" العناصر.

وXMLNS خط أعلاه: XSI = وقال "http://www.w3.org/2001/XMLSchema-instance" مخطط استنادا إلى محلل XML للتحقق من صحة هذه الوثيقة. السطر: XSI: noNamespaceSchemaLocation = "shiporder.xsd" مخطط يحدد موقف (في هذه الحالة، فإنه "shiporder.xml" في نفس المجلد).


إنشاء مخطط XML

الآن، نحن بحاجة إلى إنشاء مخطط للمستند XML أعلاه.

يمكننا أن نبدأ من خلال فتح ملف جديد ويدعى هذا الملف "shiporder.xsd". لإنشاء مخطط، ونحن بحاجة فقط لمجرد اتباع هيكل وثيقة XML، كل عنصر من عناصر تعريف ما وجدناه. أولا، نبدأ بتعريف إعلان XML القياسية:

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

في المخطط أعلاه، ونحن نستخدم مساحة الاسم القياسي (XS)، مساحة URI المرتبطة بهذا الاسم هو تعريف لغة مخطط من (تعريف لغة مخطط)، القيمة القياسية التي هي http://www.w3.org/ 2001 / XMLSchema.

المقبل، ونحن بحاجة إلى تحديد "shiporder" عنصر. هذا العنصر له خاصية يحتوي على عناصر أخرى، لذلك حددنا بأنها نوع معقد. العنصر الفرعي "shiporder" العنصر XS: تسلسل تحيط عنصر يحدد ترتيب العناصر الفرعية:

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

ثم نحن بحاجة ليعرف "orderperson" العنصر كنوع بسيط (لأنه لا يحتوي على أية سمات أو عناصر أخرى). نوع (XS: سلسلة) مسبوقة بأحكام مساحة بادئة مساحة الاسم هذا وتعليمات محددة مسبقا مخطط أنواع البيانات XML المخطط المقترن مع:

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

بعد ذلك، أنا في حاجة إلى العنصرين تعرف بأنها نوع معقد: "shipto" و "البند". نبدأ من خلال تحديد "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>

حسب المخطط، ويمكننا تحديد عدد المرات التي يمكن أن تحدث عنصر باستخدام maxOccurs والصفات minOccurs. maxOccurs تحدد تظهر أكبر عدد ممكن من العناصر، وminOccurs يحدد الحد الأدنى لعدد من الحوادث عنصر. افتراضي maxOccurs وminOccurs هو 1!

الآن، يمكننا تحديد "البند" عنصر. يمكن أن يظهر هذا العنصر عدة مرات داخل عنصر "shiporder". ويتم ذلك من قبل "البند" maxOccurs عنصر السمة تعيين القيمة إلى "غير محدود" لتحقيق، حتى أن "البند" عنصر يمكن أن يكون الخالق تظهر العديد من المرات كما تريد. يرجى ملاحظة، "علما" عنصر اختياري. تم تعيين سمة لدينا 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" سمة العنصر. لأن هذا هو سمة إلزامية، فإننا تحديد استخدام = "المطلوبة".

ملاحظة: يجب أن يعلن هذا العقار على الاخير:

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

هذه هي قائمة من الوثائق، ودعا "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>


مخطط تقسيم

أمام طريقة تصميم من السهل جدا، ولكن من الصعب أن يقرأ والحفاظ على الوثائق Shique معقدة.

المقبل، وفقا لطريقة تصميم وصفها في أول تعريف جميع العناصر والسمات، ومن ثم استخدام المرجع تنسب إلى الرجوع إليها.

تم تصميم هذا النهج الجديد ملف المخطط ( "shiporder.xsd"):

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

<!-- definition of simple elements -->
<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"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<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>


استخدام نوع محدد (المسماة أنواع)

يحدد طريقة التصميم الثالث فئة أو نوع، بحيث يكون لدينا القدرة على تحديد العناصر التي يعاد استخدامها. نهج محدد هو: العنصر الأول من بسيط ومعقد اسم العناصر، ثم اكتب سمة من عنصر للإشارة إلى لهم

هذا الأسلوب الثالث هو استخدام ملف تصميم مخطط ( "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. ولذلك، فإن جزء التالية يعني أن القيمة قيمة عنصر أو سمة يجب أن يكون نوع السلسلة:

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

عنصر تقييد غالبا ما تستخدم لفرض قيود على العناصر. النظر في جزء التالية من المخطط أعلاه:

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

يشير هذا الرمز إلى أن قيمة عنصر أو سمة يجب أن تكون سلسلة، ويجب أن تكون متتالية ستة أحرف، ويجب أن تكون هذه الأحرف 0-9.