Home » XML » XSD : Elemen Substitusi – Kode dan Contohnya

XSD : Elemen Substitusi – Kode dan Contohnya

by Hanifah Nurbaeti
by Hanifah Nurbaeti

Dengan XML Schemas, satu elemen dapat menggantikan elemen lain.

Elemen Substitusi

Katakanlah kita ingin memiliki pengguna dari dua negara yang berbeda: Inggris dan Norwegia. Kita ingin kemampuan untuk membiarkan pengguna memilih apakah dia ingin menggunakan nama elemen Norsk atau nama elemen bahasa Inggris dalam dokumen XML.

Untuk mengatasi masalah ini, kita bisa mendefinisikan substitutionGroup dalam skema XML. Pertama, kita akan mendeklarasikan elemen head dan kemudian mendeklarasikan elemen lain yang menyatakan bahwa mereka dapat diganti dengan elemen head.

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

Dalam contoh di atas, elemen “name” adalah elemen head dan elemen “navn” dapat diganti dengan “name”.

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 (sesuai dengan skema di atas) bisa 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 mengganti 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 (sesuai dengan skema di atas) terlihat seperti ini:

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

TAPI INI TIDAK LAGI VALID :

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

Menggunakan substitutionGroup

Jenis elemen yang dapat diganti harus sama dengan, atau berasal dari, jenis elemen head. Jika tipe elemen pengganti sama dengan tipe elemen head, ktia tidak perlu menentukan tipe elemen yang dapat diganti.

Perhatikan : Semua elemen dalam substitutionGroup (elemen head dan elemen substitusi) harus dideklarasikan sebagai elemen global, jika tidak maka tidak akan berfungsi!

Apa itu Elemen Global?

Elemen global adalah elemen yang merupakan turunan langsung dari elemen “skema”! Elemen lokal adalah elemen yang bersarang di dalam elemen lain.

You may also like