استبدال العناصر في XSD (Element Substitution)
- الصفحة السابقة XSD <anyAttribute>
- الصفحة التالية مثال على 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>
لكن الملف التالي ليس صالحًا anymore:
<kunde> <navn>John Smith</navn> </kunde>
استخدام substitutionGroup
نوع العنصر القابل للتبديل يجب أن يكون نفس نوع العنصر الرئيسي أو مشتق منه. إذا كان نوع العنصر القابل للتبديل نفس نوع العنصر الرئيسي، فإنه لا يتطلب تحديد نوع العنصر القابل للتبديل.
يرجى ملاحظة أن جميع العناصر داخل substitutionGroup (العنصر الرئيسي والعناصر القابلة للإبدال) يجب أن تكون معلنة كعناصر عالمية، وإلا فإنها لن تعمل!
ما هي العناصر العالمية (Global Elements)؟
العناصر العالمية تشير إلى أطفال "schema" المباشرين!العناصر المحلية (Local elements) تشير إلى العناصر المدمجة في عناصر أخرى.
- الصفحة السابقة XSD <anyAttribute>
- الصفحة التالية مثال على XSD