• XML Schema bertujuan untuk menjelaskan jenis dokumen XML,
biasanya dinyatakan dalam bentuk konstrain struktur dan isi dokumen • Contoh XML Schema: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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:element name="body" type="xs:string"/> </xs:sequence>
</xs:complexType> </xs:element>
• XML Schema adalah alternatif dari DTD yang berbasis XML • Dokumen XML Schema disebut XML Schema Definition (XSD) • Sebuah XML Schema:
– Mendefinisikan elemen yang dapat muncul – Mendefinisikan atribut yang dapat muncul
– Mendefinisikan elemen yang merupakan child element – Mendefinisikan urutan dari child element
– Mendefinisikan jumlah dari child element
– Mendefinisikan apakah sebuah elemen kosong atau bisa berisi
teks
– Mendefinisikan tipe data dari elemen dan atribut
– Mendefinisikan default value dan fixed value dari elemen dan
• XML Schema lebih extensible untuk perubahan selanjutnya – Menggunakan kembali XML Schema yang ada pada XML
Schema yang lain
– Membuat tipe data bentukan dari tipe data standar
– Merujuk ke beberapa XML Schema dari satu dokumen XML • XML Schema ditulis dengan menggunakan aturan XML
– Tidak perlu mempelajari bahasa baru
– Dapat menggunakan XML editor yang ada
– Dapat menggunakan XML parser yang ada untuk
memproses XML Schema
• XML Schema mendukung adanya tipe data
– Lebih mudah mendefinisikan konten yang dibolehkan
dalam dokumen
– Lebih mudah memvalidasi data
– Lebih mudah bekerja dengan tipe data dari database – Lebih mudah mendefinisikan batasan data
– Lebih mudah mendefinisikan pola data
– Lebih mudah mengkonversi antar tipe data
• XML Schema lebih lengkap dan powerfull daripada DTD • XML Schema mendukung adanya namespace
• Berikut adalah dokumen XML Schema note.xsd: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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:element name="body" type="xs:string"/> </xs:sequence>
</xs:complexType> </xs:element>
• Dokumen XML berikut menggunakan
XML
Schema
dari note.xsd:<?xml version="1.0"?> <note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading>
<body>Don't forget me this weekend!</body> </note>
• Elemen dalam
XML Schema
didefinisikandalam beberapa jenis:
– Simple element
• Hanya mengandung teks – Complex element
• Empty element: Elemen kosong
• Element content: Element yang mengandung elemen
lain
• Simple content: Element yang mengandung teks dan
atribut
• Mixed content: Element yang mengandung elemen lain,
• Sintaks :
<xs:element name="xxx" type="yyy"/>
• Contoh penggunaan simple element:
<lastname>Refsnes</lastname> <age>36</age>
<dateborn>1970-03-27</dateborn>
• Berikut adalah pendefinisian dari schema di atas:
<xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/>
•
Sebuah elemen dapat memiliki nilai
default
dan
fixed
•
Berikut adalah contoh elemen color yang
memiliki nilai
default
red
<xs:element name="color" type="xs:string" default="red"/>
•
Berikut adalah contoh elemen color yang
memiliki nilai
fixed
red
• Contoh empty element: <product prodid="1345" />
• XML Schema dari elemen di atas adalah:
<xs:element name="product"> <xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType>
</xs:element>
• Atau dapat menggunakan XML Schema berikut (untuk pendefinisian tipe data bentukan):
<xs:element name="product" type="prodtype"/> <xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType>
• Contoh element content: <person>
<firstname>John</firstname> <lastname>Smith</lastname> </person>
• XML Schema dari elemen di atas:
<xs:element name="person"> <xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence>
</xs:complexType> </xs:element>
• Contoh simple content:
<shoesize country="france">35</shoesize>
• XML Schema dari elemen di atas adalah:
<xs:element name="shoesize"> <xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" /> </xs:extension>
</xs:simpleContent>
</xs:complexType> </xs:element>
• Sintaks:
<xs:attribute name="xxx" type="yyy"/>
• Sebuah atribut dapat memiliki nilai default dan fixed
• Berikut adalah contoh atribut lang yang memiliki nilai
default EN
<xs:attribute name="lang" type="xs:string" default="EN"/>
• Berikut adalah contoh atribut lang yang memiliki nilai fixed
EN
<xs:attribute name="lang" type="xs:string" fixed="EN"/> • Secara default sebuah atribut adalah optional. Untuk
mendefinisikan bahwa sebuah atribut harus ditulis, dapat digunakan cara sebagai berikut:
• Contoh mixed content:
<letter>
Dear Mr.<name>John Smith</name>. Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>. </letter>
• XML Schema dari elemen di atas adalah:
<xs:element name="letter">
<xs:complexType mixed="true"> <xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/>
</xs:sequence> </xs:complexType> </xs:element>
• xs:string • xs:normalizedSring • xs:token • xs:date • xs:time • xs:dateTime • xs:decimal • xs:integer • xs:boolean • xs:anyURI
•
Digunakan untuk mendefinisikan batasan nilai
yang dibolehkan untuk elemen atau atribut
XML
– Restriction on Values
– Restriction on Set of Values
– Restriction on Series of Values
– Restriction on Whitespace Characters
• Contoh di bawah ini membatasi nilai dari elemen age. Nilai dari age tidak boleh lebih rendah daripada 0 dan tidak boleh lebih tinggi daripada 120
<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element>
• Untuk membatasi konten XML pada serangkaian nilai, digunakan batasan enumeration
• Contoh di bawah ini mendefinisikan nilai untuk elemen car, yakni: Audi, Golf, dan BMW
<xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
• Untuk mendefinisikan konten XML pada pola dari sebuah nilai, digunakan batasan pattern
• Contoh di bawah ini mendefinisikan nilai yang boleh
untuk elemen letter, yakni abjad lowercase dari a sampai z <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen initial, yakni tiga abjad
uppercase dari a sampai z
<xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen initial, yakni dua abjad
lowercase atau uppercase dari a sampai z
<xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z][a-zA-Z]"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang
boleh untuk elemen choice, yakni satu dari abjad yang boleh dari x, y, atau z
<xs:element name="choice"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[xyz]"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang
boleh untuk elemen prodid, yakni tiga digit angka dari 0 sampai 9 <xs:element name="prodid"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:pattern value="[0-9][0-9][0-9]"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen letter, yakni jumlah
kemunculan abjad dari a sampai z dari 0 sampai beberapa kali kemunculan
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-z])*"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen letter, yakni jumlah kemunculan abjad dari a sampai z dengan pola lowercase dahulu
kemudian diikuti oleh uppercase minimal satu kali
kemunculan. Contohnya nilai sToP akan dianggap valid, namun nilai STOP, Stop, atau stop tidak dianggap valid
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-z][A-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen gender, yakni nilai yang dibolehkan hanya male atau female
<xs:element name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="male|female"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan nilai yang boleh untuk elemen password, yakni delapan karakter angka atau abjad
<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9]{8}"/> </xs:restriction> </xs:simpleType> </xs:element>
• Batasan whitespace digunakan untuk mendefinisikan
bagaimana karakter whitespace akan ditangani
• Contoh di bawah ini mendefinisikan elemen address, di
mana karakter whitespacenya tidak akan dimodifikasi
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan elemen
address, di mana karakter whitespacenya akan
digantikan dengan karakter spasi
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="replace"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya mendefinisikan elemen
address, di mana karakter whitespacenya akan
digantikan dengan satu karakter spasi
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="collapse"/> </xs:restriction> </xs:simpleType> </xs:element>
• Batasan length digunakan untuk membatasi panjang dari sebuah nilai
• Contoh berikut akan membatasi nilai dari elemen
password, yakni harus tepat delapan karakter
<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> </xs:element>
• Contoh selanjutnya akan membatasi nilai dari elemen password, yakni minimal lima karakter dan maksimal delapan karakter
<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction> </xs:simpleType> </xs:element>
• Digunakan untuk mengontrol bagaimana elemen akan digunakan dalam XML
• Ada tujuh indicator:
– Order indicators: • All • Choice • Sequence – Occurrence indicators: • maxOccurs • minOccurs – Group indicators: • Group name • attributeGroup name
• Mendefinisikan bahwa child element dapat muncul
dalam urutan bebas dan setiap child element muncul
tepat satu kali
<xs:element name="person"> <xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:all>
</xs:complexType> </xs:element>
• Mendefinisikan bahwa hanya satu dari beberapa child element yang dapat muncul
<xs:element name="person"> <xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/> <xs:element name="member" type="member"/> </xs:choice>
</xs:complexType> </xs:element>
• Mendefinisikan bahwa child element harus muncul dalam urutan tertentu
<xs:element name="person"> <xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType> </xs:element>
• Mendefinisikan jumlah kemunculan dari child element
• Contoh di bawah ini mendefinisikan jumlah kemunculan dari elemen child_name minimal 0 kali dan maksimal 10 kali
<xs:element name="person"> <xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/>
</xs:sequence> </xs:complexType> </xs:element>
• Untuk membolehkan kemunculan suatu elemen tidak
• Mendefinisikan sekumpulan child element untuk digunakan pada definisi elemen XML lain
• Contoh di bawah ini mendefinisikan group persongroup dan digunakan pada elemen person
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="birthday" type="xs:date"/> </xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/> <xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/> </xs:sequence>
• Mendefinisikan sekumpulan atribut untuk digunakan pada definisi elemen XML lain
• Contoh di bawah ini mendefinisikan attribute group
personattrgroup dan digunakan pada elemen person
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/> <xs:attribute name="lastname" type="xs:string"/> <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup> <xs:element name="person"> <xs:complexType> <xs:attributeGroup ref="personattrgroup"/> </xs:complexType> </xs:element>
• Digunakan untuk memperluas dokumen XML menggunakan elemen yang belum didefinisikan pada XML Schema
<xs:element name="person"> <xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:any minOccurs="0"/>
</xs:sequence> </xs:complexType> </xs:element>
• XML Schema di atas adalah potongan dari dokumen family.xsd. Terdapat definisi dari <any> artinya elemen person tersebut dapat diperluas dengan menambahkan child element lain yang belum didefinisikan pada family.xsd
• Sekarang perhatikan dokumen children.xsd berikut
merupakan definisi dari elemen children yang akan kita tambahkan ke sebuah dokumen XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="children">
<xs:complexType> <xs:sequence>
<xs:element name="childname" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence> </xs:complexType> </xs:element>
• Dokumen MyFamily.xml berikut ini menggunakan komponen dari dua
XML Schema yang berbeda, yakni family.xsd dan children.xsd
<?xml version="1.0" encoding="ISO-8859-1"?> <persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="family.xsd children.xsd">
<person> <firstname>Hege</firstname> <lastname>Refsnes</lastname> <children> <childname>Cecilie</childname> </children> </person> <person> <firstname>Stale</firstname> <lastname>Refsnes</lastname> </person> </persons>
• Digunakan untuk memperluas dokumen XML menggunakan atribut yang belum didefinisikan pada XML Schema
<xs:element name="person"> <xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence>
<xs:anyAttribute/>
</xs:complexType> </xs:element>
• XML Schema di atas adalah potongan dari dokumen family.xsd. Terdapat definisi dari <any> artinya elemen person tersebut dapat diperluas dengan menambahkan atribut lain yang belum
• Sekarang perhatikan dokumen attribute.xsd berikut merupakan definisi dari atribut gender yang akan kita tambahkan ke sebuah dokumen XML
<?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:attribute name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="male|female"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:schema>
• Dokumen MyFamily.xml berikut ini menggunakan komponen dari dua XML Schema yang berbeda, yakni family.xsd dan
attribute.xsd
<?xml version="1.0" encoding="ISO-8859-1"?> <persons
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="family.xsd attribute.xsd">
<person gender="female"> <firstname>Hege</firstname> <lastname>Refsnes</lastname> </person> <person gender="male"> <firstname>Stale</firstname> <lastname>Refsnes</lastname> </person> </persons>
•
Andaikan kita membuat dokumen XML untuk
dua negara berbeda dengan bahasa yang
berbeda. Misalkan Inggris dan Norwegia
•
Kita ingin pengguna dapat memilih nama
elemen berbahasa Norwegia atau bahasa
Inggris
•
Kita dapat menggunakan substitusi elemen
dengan mendefinisikan
substitutionGroup
• Perhatikan definisi XML Schema berikut 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"/>
• Maka dokumen XML yang valid adalah berikut:
<customer> <name>John Smith</name> </customer> atau <kunde> <navn>John Smith</navn> </kunde>
• Agar elemen lain tidak dapat mensubstitusi suatu elemen, gunakan atribut block, contohnya:
<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"/>
• Maka dokumen XML berikut tidak akan valid lagi:
<kunde>
<navn>John Smith</navn> </kunde>