XSD Eleman Değiştirme (Element Substitution)

XML Şeması sayesinde bir element, bir başka elementi değiştirebilir.

Element Değişimi

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 olmamız gerekiyor.

Bu sorunu çözmek için XML şemasında bir tanımlama yapabiliriz. substitutionGroupÖncelikle ana elemanı beyan ederiz, ardından ikincil elemanları beyan ederiz, bu ikincil elemanlar ana elemanı değiştirebileceklerini beyan edebilirler.

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

Yukarıdaki örnekte, "name" elementi ana elementken, "navn" elementi "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 bir XML belgesi, yukarıdaki şemaya göre şu şekilde olmalıdır:

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

veya benzeri şu şekilde:

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

Element değiştirilmesini engelleme

Belirli bir elementin 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 bir XML belgesi, yukarıdaki şemaya göre şu şekilde olmalıdır:

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

Ancak aşağıdaki belge artık geçerli değil:

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

substitutionGroup kullanın

Değiştirilebilir element türü, ana elementle aynı olmalı veya ana elementten türemiş olmalıdır. Eğer değiştirilebilir element türü ana element türüyle aynıysa, değiştirilebilir element türünü belirtmenize gerek yoktur.

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

Küresel Elemanlar (Global Elements) nedir?

Küresel Elemanlar "schema" elemanının doğrudan alt elemanlarıdır! Yerel Elemanlar (Local elements) diğer elemanlar içinde gömülü olan elemanlardır.