Meskipun Document Type Definitions (DTD) dapat menerapkan aturan-
dasar
struktural pada dokumen, banyak
aplikasi yang
membutuhkan
metode validasi. Sehingga W3C membuat XML Schema Recommendation,
yang dirilis pada 2 Mei 2001 untuk menjawab pertanyaan diatas. Skema dapat menjelaskan complex restrictions pada elemen dan atribut. Beberapa skema dapat
dikombinasikan menjadi dokumen yang menggunakan beberapa kosakata XML. Dengan demikinan, skema dapat lebih powerful menggambarkan struktur dokumen
XML. XML
Schema merupakan informasi mengenai metadata yang mendefinisikan cara yang
tepat
penstrukturan file XML.
Overview
Sebuah
dokumen XML
yang
dideskripsikan
oleh skema disebut
dengan instance document. Jika dokumen memenuhi
semua konstrain yang dispesifikasikan oleh skema,
maka dianggap sebagai schema-valid.
Schemas Versus DTDs
DTDs memberikan kemampuan dasar untuk melakukan validasi item berikut
dalam dokumen XML:
55.
Element nesting
56.
Element occurrence constraints
57.
Permitted attributes
58.
Attribute types and default values
Sedangkan
skema standar memasukan :
59.
Simple and complex data types
60.
Type derivation
and
inheritance
61. Element occurrence constraints
62.
Namespace-aware element and attribute declarations
Namespace Issues
DTDs tidak memberikan dukungan
bagi eksplisit menyatakan namespace- aware aplikasi XML. Skema tidak seperti DTD yang menambahkan prefik pada elemen, skema memvalidasi kombinasi dari namespace URI dan lokal name yang mempunyai
prefiks.
Skema Dasar
Misalnya kita mempunyai
dokumen XML :
<?xml
version="1.0" ?>
<note>
<to>Ridho</to>
<from>Someone</from>
<heading>Reminder</heading>
<body>Don't forget me this
weekend!</body>
</note>
Kita dapat menuliskan
schema-nya seperti berikut :
<?xml
version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNameSpace="http://www.w3school.com" xmlns="http://www.w3school.com"
elementFormDefault="qualified">
<xs:element
name="note">
<xs:complexType>
<xs:sequence>
<xs:element
name="to" type="xs:string"/>
<xs:element name="from"
type="xs:string"/>
<xs:element name="heading"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
File XML Schema
biasanya
disimpan dengan ektensi *.xsd. Untuk
mempraktekannya, biatlah
file XSD diatas dan simpan dengan nama
XMLSchema.xsd. Selanjutnya buat dokumen XML diatas dengan nama
file contoh10_1.xml, mamun tambahkan atribut
dan manespace
pada elemen root, Sehingga kodenya menjadi
seperti berikut :
<?xml
version="1.0">
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="XMLSchema.xsd">
<to>Ridho</to>
<from>Someone</from>
<heading>Reminder</heading>
<body>Don't forget me
this weekend!</body>
</note>
jika kita
menjalankan
dokumen diatas dan memvalidasinya,
maka
tampak
bahwa dokumen tersebut valid. Seperti dapat dilihat pada gambar dibawah ini
XML Scema
juaga memiliki atribut xs:annotation yang digunakan untuk
menjamin bahwa komentar akan tetap utuh hingga
proses
parsing selesai.
Annotation memiliki konbinasi:
7. Elemen xs:documentation
<xs:annotation>
<xs:documentation
xml:lang="en-us"> Simple
schema example from O'Reilly's
<a
in a Nutshell.</a>
Copyright
2002 O'Reilly & Associates
</xs:documentation>
</xs:annotation>
<xs:element
name="fullName" type="xs:string"/>
</xs:schema>
8. Elemen xs:appinfo
berisi kombinasi karakter
data atau
markup dari
skema
yang akan
diincludekan
Dari contoh diatas, kita dapat
melihat
elemen berikut : <xs:element
name="from" type="xs:string"/>. Elemen tersebut berfungsi
sebagai pendeklarasian dari elemen. Pada contoh diatas
kita
akam mengisi elemen
from dengan data yang
tipenya string.
Jika
kita ingin
menuliskan elemen lain dalam siatu elemen, maka kita
definisikan pada
contoh diatas adalah :
<xs:element
name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to"
type="xs:string"/>
<xs:element
name="from" type="xs:string"/>
<xs:element
name="heading" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Maksudnya contoh diatas
adalah elemen note dapat berisi elemen lain seperti
to, from dan heading.
untuk mendeklarasikan atribut, kita
dapat menggunakanelemen xs:attribute sehingga
penulisannya
menjadi <xs:attribute name="language" type="xs:language"/>. Misalnya pada dokumen XML diatas kita
tambahkan sebuah atribut sehingga
sintaksnya
menjadi :
<note>
<to
age='34'>Ridho</to>
<from age='34'>Someone</from>
<heading>Reminder</heading>
<body>Don't forget me this
weekend!</body>
</note>
maka penulisan XML Schemanya adalah
:
<xs:element
name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to">
<xs:complexType>
<xs:attribute
name="umur" type="xs:language"/>
</xs:complexType>
</xs:element>
<xs:element name="from">
<xs:complexType>
<xs:attribute
name="umur"
type="xs:language"/>
</xs:complexType>
</xs:element>
<xs:element
name="heading" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Jika kita jalankan
dokumen diatas,
mak akan tampak seperti
berikut :
Tipe baru dapat
didefinisikan
dengan
elemen xs:complexType
atau xs:simpleType. Jika tipe tersebut dideklarasikan secara global, perlu diberikan nama agar dari atribut atau elemen dalam skema. jika tipenya
dedefinisikan secara
inline, maka tidak perlu diberi nama
dan tidak dapat
diarahkan oleh atribut dan
elemen didalan skema karena tidak memiliki nama.
Bekerja dengan Namespace
Untuk penulisan
namespace pada schema kita dapat menuliskan langsung pada elemen yang
akan kita
beri
namespace. Misalnya kita
ingin menamai sebuah
elemen, maka kita dapat menuliskannya dengan
:
<?xml
version="1.0"?>
<Book xmlns:lib="http://www.library.com">
<lib:Title>Sherlock
Holmes</lib:Title>
<lib:Author>Arthur
Conan Doyle</lib:Author>
</Book>
Elemen Kosong
Penulisan
elemen kosong adalah dengan
cara
tidak mengisikan elemen
kedalam deklarasi. Misalnya pada contoh berikut kita katakan bahwa elemen
heading adalah kosong, maka
format penulisan untuk XML Schema
adalah
seperti berikut :
<?xml
version="1.0" ?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNameSpace="http://www.w3school.com" xmlns="http://www.w3school.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to"
type="xs:string"/>
<xs:element
name="from" type="xs:string"/>
<xs:element
name="heading" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
atau apabila elemen heading memiliki atribut, maka penulisannya menjadi :
<xs:element
name="heading">
<xs:complexType>
<xs:attribute
name="number" type="xs:string"/>
</xs:complexType>
</xs:element>
Elemen
xs:simpleContent digunakan
untuk mendeklarasikan elemen
sederhana.
<xs:element
name="heading">
<xs:complexType>
<xs:simpleContent>
<xs:extension
base="xs:string">
<xs:attribute
name="number" type="xs:language"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Tipe kompleks
jika kita
ingin mendefinisikan semua elemen apapun, maka kita dapat
menuliskan elemen xs:any dimana elemen
ini membolehkan atribut yang menunjukan tingkat validasi yang harus diberikan pada konten jika ada.
Contohnya :
<xs:element
name="notes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:any namespace="http://www.w3.org/1999/xhtml"
minOccurs="0"
maxOccurs="unbounded" processContents="skip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Mixed Content
Untuk menggabungkan dokumen XML dengan schema (xsd), kita dapat
menggunakan
kode sebagai berikut :
<letter xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" "xsi:noNamespaceSchemaLocation="formletter.xsd">
<greeting><hello/>
Bob!</greeting>
<body>
Thank you
for ordering the <item/> ($<price/>), it should arrive
by <arrivalDate/>.
</body>
<closing/>
</letter>
Controlling Type Derivation
Atribut final dapat ditambahkan pada sebuah definisi tipe kompleks untuk mengatur #all, extension, atau restriction. Apabila suatu tipe berasal dari tipe lain yang memiliki atribut
final, schema processor memverifikasi. Contoh
penulisan :
<xs:complexType name="physicalAddressType"
final="extension">
kita
dapat men-setnya secara
permanen dengan nilai yang diberikan dengan cara menambahkan atribut fixed="true".
Untuk membuat suatu elemen menjadi unik, maka ktia dapat menggunakan elemen xs:unique dan xs:key. Elemen xs:unique akan memaksa nilai elemen dan atribut menjaid unik untuk
spesifikasi elemen
dalam skema
dokumen. Contoh :
<xs:element
name="contacts" type="addr:contactsType"
minOccurs="0">
<xs:unique
name="phoneNums">
<xs:selector xpath="phone"/>
<xs:field xpath="@addr:number"/>
</xs:unique>
</xs:element>
Sedangkan elemen xs:key hampir sama xs:unique namun, xs:key
menggunakan elemen xs:selector untuk mendefinisikan satu set elemen.
Contoh penggunaanya
adalah :
<xs:element
name="address">
<xs:complexType>
<xs:sequence>
<xs:element name="fullName">
. . .
. . .
</xs:element>
<xs:element
name="kids" minOccurs="0">
<xs:complexType>
<xs:sequence
maxOccurs="unbounded">
<xs:element name="kid">
<xs:complexType>
<xs:attribute name="ssn"
type="addr:ssn"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attributeGroup
ref="addr:nationality"/>
<xs:attribute
name="ssn" type="addr:ssn"/>
<xs:anyAttribute
namespace="http://www.w3.org/1999/xlink"
processContents="skip"/>
</xs:complexType>
</xs:element>