نشانگرهای نوع ترکیبی XSD

通过指示器,我们可以控制在文档中使用元素的方式。

指示器

有七种指示器:

Order 指示器:

  • All
  • Choice
  • Sequence

Occurrence 指示器:

  • maxOccurs
  • minOccurs

نشان‌دهنده Group:

  • Group name
  • attributeGroup name

نشان‌دهنده 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> (که در ادامه توضیح داده خواهد شد) را به unbounded (بی‌نهایت) تنظیم کنید.

نشان‌دهنده 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 گروه و reference گروه)، مقدار پیش‌فرض 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" رینجوں کا حامل ہو سکتا ہے۔

یہ سکیم فائل "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 اعلان کے ذریعے تعریف کیا جاتا ہے:

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

آپ کو گروپ کے اعلان کے اندر ایک all، choice یا sequence علامت کو کاٹر کرنا ہوگا۔ ایک مثال میں اس طرح "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="组名称">
  ...
</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>