XSD Öğe Değiştirme
XML Şemaları ile bir eleman başka bir elemanın yerini alabilir.
Eleman Değiştirme
Diyelim ki iki farklı ülkeden kullanıcılarımız var: İngiltere ve Norveç. Kullanıcının, XML belgesinde Norveççe öğe adlarını mı yoksa İngilizce öğe adlarını mı kullanmak istediğini seçmesine izin vermesini istiyoruz.
Bu sorunu çözmek için XML şemasında bir substitutionGroup tanımlayabiliriz. İlk önce bir head elementi ilan ediyoruz ve sonra head element için ikame edilebilir olduklarını belirten diğer elementleri ilan ediyoruz.
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
Yukarıdaki örnekte, "name" öğesi baş öğedir ve "navn" öğesi, "name" yerine kullanılabilir.
Bir XML şemasının şu parçasına bakın:
<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) şöyle görünebilir:
<customer>
<name>John Smith</name>
</customer>
veya bunun gibi:
<kunde>
<navn>John Smith</navn>
</kunde>
Öğe Değiştirmeyi Engelleme
Diğer öğelerin belirli bir öğeyle yer değiştirmesini önlemek için blok niteliğini kullanın:
<xs:element name="name" type="xs:string" block="substitution"/>
Bir XML şemasının şu parçasına bakın:
<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) şöyle görünür:
<customer>
<name>John Smith</name>
</customer>
AMA BU ARTIK GEÇERLİ DEĞİL:
<kunde>
<navn>John Smith</navn>
</kunde>
substitutionGroup'u kullanma
Değiştirilebilir elemanların tipi, baş elemanın tipi ile aynı veya ondan türetilmiş olmalıdır. İkame edilebilir elemanın tipi, baş elemanın tipi ile aynı ise, ikame edilebilir elemanın tipini belirtmeniz gerekmeyecektir.
substitutionGroup içindeki tüm öğelerin (baş öğe ve ikame edilebilir öğeler) genel öğeler olarak bildirilmesi gerektiğini unutmayın, aksi takdirde çalışmaz!
Küresel Unsurlar nelerdir?
Global öğeler, "şema" öğesinin doğrudan çocukları olan öğelerdir! Yerel öğeler, diğer öğelerin içine yerleştirilmiş öğelerdir.