مؤشرات نوع المركبة XSD

من خلال المؤشرات، يمكننا التحكم في الطريقة التي يتم استخدام العناصر في الوثيقة.

المؤشر

هناك سبعة مؤشرات:

مؤشر الترتيب:

  • كل
  • الاختيار
  • السلسلة

مؤشر الظهور:

  • maxOccurs
  • minOccurs

مُشير Group:

  • name Group
  • name attributeGroup

مُشير Order

مُشير Order يستخدم لتحديد ترتيب العناصر.

مُشير All

<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

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

نصيحة:لإعداد ظهور العناصر الفرعية في أي عدد مرات، يمكنك تعيين <maxOccurs> (سيتم شرحه لاحقًا) إلى غير محدود (عدد غير محدود من المرات).

مُشير Sequence

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

مُشير Occurrence

مُشير Occurrence يستخدم لتحديد تردد ظهور العنصر.

التعليق:لجميع مُشيرات "Order" و "Group" (any، all، choice، sequence، name group و reference group)، القيم الافتراضية للمكسورات 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>

مثال السابق يظهر أن العنصر الفرعي "child_name" يمكن أن يظهر في العنصر "person" من مرة واحدة على الأقل (حيث يمثل قيمة الافتراضية لـminOccurs 1)، إلى 10 مرات على الأكثر.

مُشير 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" من 0 إلى 10 مرات على الأكثر.

نصيحة:لجعل عدد ظهور عنصر غير محدود، استخدم هذا الت声明 maxOccurs="unbounded":

مثال حقيقي:

ملف XML "Myfamily.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>David Smith</full_name>
<child_name>Jogn</child_name>
<child_name>mike</child_name>
<child_name>kyle</child_name>
<child_name>mary</child_name>
</person>
<person>
<full_name>Michael Smith</full_name>
</person>
</persons>

ملف XML هذا يحتوي على عنصر جذر يُدعى "persons". داخل هذا العنصر، قمنا بتعريف ثلاثة عناصر "person". يجب أن يحتوي كل عنصر "person" على عنصر "full_name"، ويمكنه أن يحتوي على ما يصل إلى 5 عناصر "child_name".

هذا ملف schema "family.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>

مؤشر Group

مؤشر Group يستخدم لتعريف مجموعة من العناصر ذات الصلة.

مجموعات العناصر

تُعرف مجموعات العناصر من خلال بيانات group

<xs:group name="组名称">
  ...
</xs:group>

يجب عليك تعريف عنصر all أو choice أو sequence داخل بيانات group. في هذا المثال، يتم تعريف 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>

بعد اكتمال تعريف 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="组名称">
  ...
</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>