مؤشرات XSD
يمكننا التحكم في كيفية استخدام العناصر في المستندات ذات المؤشرات.
المؤشرات
هناك سبعة مؤشرات:
مؤشرات الطلب:
- الجميع
- خيار
- تسلسل
مؤشرات التواجد:
- maxOccurs
- minOccurs
مؤشرات المجموعة:
- أسم المجموعة
- اسم المجموعة
مؤشرات الطلب
تُستخدم مؤشرات الطلب لتحديد ترتيب العناصر.
كل مؤشر
يحدد المؤشر <all> أن العناصر الفرعية يمكن أن تظهر بأي ترتيب ، وأن كل عنصر فرعي يجب أن يحدث مرة واحدة فقط:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
ملاحظة: عند استخدام مؤشر <all> ، يمكنك ضبط مؤشر <minOccurs> على 0 أو 1 ويمكن فقط ضبط مؤشر <maxOccurs> على 1 (يتم وصف <minOccurs> و <maxOccurs> لاحقًا).
مؤشر الاختيار
يحدد مؤشر <choice> إمكانية حدوث عنصر فرعي واحد أو آخر:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
مؤشر التسلسل
يحدد مؤشر <sequence> أن العناصر الفرعية يجب أن تظهر بترتيب معين:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
مؤشرات التواجد
تُستخدم مؤشرات التكرار لتحديد عدد المرات التي يمكن أن يحدث فيها عنصر ما.
ملاحظة: بالنسبة لجميع مؤشرات "الترتيب" و "المجموعة" (أي ، والجميع ، والاختيار ، والتسلسل ، واسم المجموعة ، ومرجع المجموعة) ، فإن القيمة الافتراضية لـ maxOccurs و minOccurs هي 1.
مؤشر maxOccurs
يحدد مؤشر <maxOccurs> الحد الأقصى لعدد مرات ظهور العنصر:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
يشير المثال أعلاه إلى أن عنصر "اسم_الأطفال" يمكن أن يحدث مرة واحدة على الأقل (القيمة الافتراضية لـ minOccurs هي 1) وبحد أقصى عشر مرات في عنصر "الشخص".
مؤشر minOccurs
يحدد مؤشر <minOccurs> الحد الأدنى لعدد مرات ظهور العنصر:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
يشير المثال أعلاه إلى أن عنصر "child_name" يمكن أن يحدث بحد أدنى صفر مرة وعشر مرات كحد أقصى في عنصر "person".
نصيحة: للسماح لعنصر بالظهور لعدد غير محدود من المرات ، استخدم maxOccurs = "غير مقيد" العبارة:
مثال عملي:
ملف XML يسمى "Myfamily.xml":
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
يحتوي ملف XML أعلاه على عنصر جذر يسمى "الأشخاص". داخل عنصر الجذر هذا ، حددنا ثلاثة عناصر "شخص". يجب أن يحتوي كل عنصر "شخص" على عنصر "full_name" ويمكن أن يحتوي على ما يصل إلى خمسة عناصر من "اسم_الأطفال".
هنا ملف المخطط "family.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
مؤشرات المجموعة
تُستخدم مؤشرات المجموعة لتحديد مجموعات العناصر ذات الصلة.
مجموعات العنصر
يتم تعريف مجموعات العناصر بإعلان المجموعة ، مثل هذا:
<xs:group name="groupname">
...
</xs:group>
يجب تحديد عنصر الكل أو الاختيار أو التسلسل داخل إعلان المجموعة. يحدد المثال التالي مجموعة تسمى "persongroup" ، والتي تحدد مجموعة من العناصر التي يجب أن تحدث في تسلسل دقيق:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
بعد تحديد مجموعة ، يمكنك الرجوع إليها في تعريف آخر ، مثل هذا:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
مجموعات السمات
يتم تعريف مجموعات السمات من خلال إعلان attributeGroup ، مثل هذا:
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
يحدد المثال التالي مجموعة سمات تسمى "personattrgroup":
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
بعد تحديد مجموعة سمات ، يمكنك الرجوع إليها في تعريف آخر ، مثل هذا:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>