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

با استفاده از نشانگر، می‌توانیم کنترل کنیم که چگونه عناصر در مستند استفاده شوند.

نشانگر

هفت نشانگر وجود دارد:

نشانگر ترتیب:

  • همه
  • انتخاب
  • ترتیب

نشانگر وقوع:

  • maxOccurs
  • minOccurs

نشانگر گروه:

  • نام گروه
  • 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 group و reference group)، مقدار پیش‌فرض maxOccurs و minOccurs یک است.

مؤشر 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 است) و به بیشترین 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 در داخل تعریف 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="组名称">
  ...
</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>