نشانگرها (XSD Indicators)
«نشانگر (Indicator)» در XSD قوانین استفاده از «عنصر (Element)» را مشخص می کند. با این قوانین، ترتیب، تعداد، و گروه بندی عناصر کنترل می شود.
دسته بندی نشانگرها
سه دسته داریم: ترتیب، تکرار، و گروه. ترتیب یعنی چگونگی چیدن فرزندها. تکرار یعنی کمینه و بیشینه رخداد. گروه یعنی بسته ای از عناصر یا ویژگی ها.
نشانگرهای ترتیب (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 است.
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>
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 یعنی چند بار تکرار مجاز است. کمینه با minOccurs و بیشینه با maxOccurs کنترل می شود.
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>
اگر محدودیت نخواهی، مقدار را unbounded بگذار.
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>
نمونه کامل: XML و XSD
در این نمونه، person می تواند چند child_name داشته باشد.
<?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 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>
نشانگرهای گروه (Group)
گروه ها بسته ای از عناصر یا ویژگی ها هستند. هدف، استفاده مجدد است.
گروهِ عنصر: group
ابتدا گروه را با sequence یا choice یا all تعریف می کنیم.
<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>
سپس گروه را با ref در نوع دیگر استفاده می کنیم.
<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
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>
گام های تمرینی
- با sequence دو عنصر بساز.
- minOccurs را صفر بگذار.
- یک گروه عنصر بساز و ارجاع بده.
جمع بندی سریع
- all ترتیب آزاد می دهد.
- choice فقط یکی را می پذیرد.
- sequence ترتیب را اجباری می کند.
- minOccurs و maxOccurs تعداد را کنترل می کنند.
- group و attributeGroup استفاده مجدد می دهند.
نشانگرهای XSD در محتوای ترکیبی هم کاربرد دارند.