XSD 元素替换(Element Substitution)

Gaba ɗaya XML Schema, iyali a iya kasancewa iyali.

Kasancewa iyali

Ka wajibiyar: Wannan mutum a baya daga Burtaniya da Norway. A na iya samun ita ce mutum zai iya zartarwa kuma a XML document zai iya zartarwa kuma a yi amfani da sunan iyali na Norwegian ko yadda a yi amfani da sunan iyali na Ingilishi.

Lakawin wannan matsalar, a na iya sanya cikakken XML schema. substitutionGroupKafin, a na ce sabunta kiyi a cikin, kuma kafin a ce sabunta iyali, kuma iyali a iya sabunta iyali a cikin sabunta iyali.

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

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

یک بخش از XML schema را ببینید:

<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 schema را ببینید:

<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)指嵌套在其他元素中的元素。