Substitusi Elemen XSD
Dengan Skema XML, satu elemen dapat menggantikan elemen lain.
Substitusi Elemen
Katakanlah kami memiliki pengguna dari dua negara berbeda: Inggris dan Norwegia. Kami ingin kemampuan untuk membiarkan pengguna memilih apakah dia ingin menggunakan nama elemen Norwegia atau nama elemen bahasa Inggris dalam dokumen XML.
Untuk mengatasi masalah ini, kita bisa mendefinisikan substitusiGroup dalam skema XML. Pertama, kami mendeklarasikan elemen kepala dan kemudian kami mendeklarasikan elemen lain yang menyatakan bahwa mereka dapat disubstitusikan untuk elemen kepala.
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
Dalam contoh di atas, elemen "nama" adalah elemen kepala dan elemen "navn" dapat disubstitusikan untuk "nama".
Lihat fragmen skema XML ini:
<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"/>
Dokumen XML yang valid (menurut skema di atas) dapat terlihat seperti ini:
<customer>
<name>John Smith</name>
</customer>
atau seperti ini:
<kunde>
<navn>John Smith</navn>
</kunde>
Substitusi Elemen Pemblokiran
Untuk mencegah elemen lain menggantikan dengan elemen tertentu, gunakan atribut blok:
<xs:element name="name" type="xs:string" block="substitution"/>
Lihat fragmen skema XML ini:
<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"/>
Dokumen XML yang valid (menurut skema di atas) terlihat seperti ini:
<customer>
<name>John Smith</name>
</customer>
TAPI INI TIDAK LAGI BERLAKU:
<kunde>
<navn>John Smith</navn>
</kunde>
Menggunakan SubstitusiGroup
Jenis elemen yang dapat disubstitusikan harus sama dengan, atau berasal dari, jenis elemen kepala. Jika jenis elemen yang dapat disubstitusikan sama dengan jenis elemen kepala, Anda tidak perlu menentukan jenis elemen yang dapat disubstitusikan.
Perhatikan bahwa semua elemen dalam Grup substitusi (elemen kepala dan elemen yang dapat diganti) harus dideklarasikan sebagai elemen global, jika tidak maka tidak akan berfungsi!
Apa itu Elemen Global?
Elemen global adalah elemen yang merupakan anak langsung dari elemen "skema"! Elemen lokal adalah elemen yang bersarang di dalam elemen lain.