XSD Element Değişimi (Element Substitution)

XML Şeması ile, bir element diğer bir elementi değiştirebilir.

Element Değiştirme

Bir örnek verelim: Kullanıcılarımız İngiltere ve Norveç'ten geliyor. XML belgelerinde kullanıcıların Norveççe veya İngilizce element adlarını seçmelerine yetenekli olmak istiyoruz.

Bu sorunu çözmek için XML şemasında bir tanımlama yapabiliriz substitutionGroupÖncelikle, ana elementi tanımlayacağız, ardından bu ana elementi değiştirebilecek olan alt elementleri tanımlayacağız.

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

Yukarıdaki örnekte, "name" elementi ana element olarak, "navn" elementi ise "name" elementini değiştirebilir.

Bir XML şemasının parçasını inceleyin:

<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"/>

Geçerli XML belgesi, yukarıdaki şemaya göre bu gibi olmalıdır:

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

veya benzeri bir şekilde:

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

Element değiştirilmesini engelleme

Belirli bir elementin diğer elementler tarafından değiştirilmesini önlemek için block özelliğini kullanın:

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

Bir XML şemasının parçasını inceleyin:

<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"/>

Geçerli XML belgesi, yukarıdaki şemaya göre bu gibi olmalıdır:

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

Amaçlı belge artık geçerli değildir:

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

substitutionGroup kullanımı

Değiştirilebilir elementlerin türleri ana elementin türleriyle aynı olmalı veya ana elementten türemelidir. Eğer değiştirilebilir elementlerin türleri ana elementin türleriyle aynıysa, değiştirilebilir element türlerini belirtmenize gerek yoktur.

substitutionGroup içindeki tüm elementler (ana element ve değiştirilebilir elementler) global element olarak beyan edilmelidir, aksi takdirde çalışmaz!

Küresel Elementler (Global Elements) nedir?

Küresel Elementler "schema" Elementinin doğrudan alt elementleridir! Yerel Elementler (Local elements) diğer elementler içinde yerleştirilmiş elementlerdir.