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

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

نشان‌دهنده

هفت نوع نشان‌دهنده وجود دارد:

نشان‌دهنده‌ی ترتیب:

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

نشان‌دهنده‌ی رخداد:

  • 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" داشته باشد.

این فایل شمای 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>