استبدال العناصر في XSD

من خلال 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) تشير إلى العناصر المدمجة في عناصر أخرى.