جایگزینی (XSD Substitution)
«جایگزینی عنصر (Element Substitution)» یعنی یک «عنصر (Element)» به جای عنصر «سرگروه» بیاید. این کار با «گروه جایگزینی (substitutionGroup)» انجام می شود. مثل بازی که قهرمان ذخیره جای اصلی بازی کند.
مقدمه سریع جایگزینی عنصر
برای جایگزینی، یک عنصر «سرگروه» می سازیم. سپس عناصر دیگر می گویند عضو substitutionGroup همان سرگروه هستند. بنابراین، در سند می توانیم یکی را به جای دیگری استفاده کنیم.
<xs:element name="name" type="xs:string" />
<xs:element name="navn" substitutionGroup="name" />
نکته: «substitutionGroup» یعنی «این عنصر می تواند جای سرگروه بیاید».
جایگزینی در نوع پیچیده مشتری
در این قطعه، name سرگروه است. عنصر navn می تواند جای name بیاید. همچنین kunde می تواند جای customer بیاید.
<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" />
نمونه های معتبر از سند
<customer>
<name>John Smith</name>
</customer>
<kunde>
<navn>John Smith</navn>
</kunde>
مسدودسازی جایگزینی با block
اگر نخواهی عنصر دیگری جایگزین شود، ویژگی «block» را با مقدار «substitution» بگذار. این یعنی «جایگزینی ممنوع».
<xs:element name="name" type="xs:string" block="substitution" />
<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" />
پس از مسدودسازی چه می شود؟
<customer>
<name>John Smith</name>
</customer>
هشدار: الان <kunde> با <navn> دیگر معتبر نیست. چون جایگزینی مسدود شد.
قوانین substitutionGroup و عناصر سراسری
نوع عنصر جایگزین باید «هم نوع» یا «مشتق شده» از نوع سرگروه باشد. همچنین، همه عناصر گروه جایگزینی باید «سراسری (Global)» باشند. یعنی فرزند مستقیم xs:schema باشند.
راهنمای عملی سه گام
- عنصر سرگروه را جهانی تعریف کن.
- عناصر جایگزین را با substitutionGroup تعیین کن.
- در صورت نیاز، با block جایگزینی را ببند.
جمع بندی سریع
- جایگزینی عنصر، نام ها را قابل تغییر می کند.
- substitutionGroup پیوند عنصرها را مشخص می کند.
- block جلوی جایگزینی را می گیرد.
- عناصر باید سراسری باشند.
جایگزینی (XSD Substitution) مرجع همین صفحه است.
anyAttribute در XSD برای گسترش با ویژگی ها مفید است.
عنصر any در XSD برای گسترش با عناصر مفید است.