ایکس ای اس عنصر بدلنا (Element Substitution)

با XML Schema، يك عنصر مي‌تواند يك عنصر ديگر را جايگزين كند.

عنصر جايگيري

بیایید مثالی بزنیم: کاربران ما از بریتانیا و نروژ هستند. ما می‌خواهیم بتوانیم کاربران را قادر کنیم که انتخاب کنند در اسناد XML از نام‌های عناصر به زبان نروژی یا انگلیسی استفاده کنند.

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

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

در مثال بالا، عنصر "name" عنصر اصلی است و عنصر "navn" می‌تواند جایگزین عنصر "name" شود.

یک قطعه از شماتیک XML را ببینید:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

اسناد XML معتبر شبیه این هستند (بر اساس شماتیک بالا):

<customer>
  <name>John Smith</name>
</customer>

یا شبیه این:

<kunde>
  <navn>John Smith</navn>
</kunde>

جلوگیری از جایگزینی عناصر

برای جلوگیری از جایگزینی سایر عناصر با یک عنصر مشخص، از ویژگی block استفاده کنید:

<xs:element name="name" type="xs:string" block="substitution"/>

یک قطعه از شماتیک XML را ببینید:

<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>

معتبر XML اسناد باید شبیه این باشند (بر اساس شماتیک بالا):

<customer>
  <name>John Smith</name>
</customer>

لیکن اسناد زیر دیگر معتبر نیستند:

<kunde>
  <navn>John Smith</navn>
</kunde>

substitutionGroup استفادہ کیا جاندا

قابل بدل عنصر کا نوع باید ماتر عنصر کا ہو یا ماتر عنصر سے نکلی ہو۔ اگر قابل بدل عنصر کا نوع ماتر عنصر کا ہو تو آپ کو قابل بدل عنصر کا نوع طے نہیں کرنا چاہیئے۔

توجہ دیئے، substitutionGroup میں تمام عنصر (ماتر عنصر اور قابل بدل عنصر) کو عالمی عنصر کہا جانا چاہیئے، نہ تو وچ کام کیا جاندا ہے!

عالمی عنصر (Global Elements) کیا ہو؟

عالمی عنصر "schema" عنصر کا براہ راست واسی عنصر کہا جاندا ہے! مقامی عنصر (Local elements) دوسرے عنصر میں بیجا ہوئے عنصر کہا جاندا ہے۔