• Tidak ada hasil yang ditemukan

XML Schema bertujuan untuk menjelaskan jenis dokumen XML,

N/A
N/A
Protected

Academic year: 2021

Membagikan "XML Schema bertujuan untuk menjelaskan jenis dokumen XML,"

Copied!
49
0
0

Teks penuh

(1)
(2)

• 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>

(3)

• 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

(4)

• 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

(5)

• 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

(6)

• 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>

(7)

• 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>

(8)

• Elemen dalam

XML Schema

didefinisikan

dalam 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,

(9)

• 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"/>

(10)

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

(11)

• 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>

(12)

• 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>

(13)

• 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>

(14)

• 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:

(15)

• 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>

(16)

xs:string xs:normalizedSring xs:token xs:date xs:time xs:dateTime xs:decimal xs:integer xs:boolean xs:anyURI

(17)

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

(18)

• 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>

(19)

• 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>

(20)

• 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>

(21)

• 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>

(22)

• 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>

(23)

• 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>

(24)

• 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>

(25)

• 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>

(26)

• 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>

(27)

• 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>

(28)

• 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>

(29)

• 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>

(30)

• 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>

(31)

• 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>

(32)

• 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>

(33)

• 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>

(34)

• 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

(35)

• 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>

(36)

• 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>

(37)

• 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>

(38)

• 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

(39)

• 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>

(40)

• 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>

(41)

• 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

(42)

• 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>

(43)

• 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>

(44)

• 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

(45)

• 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>

(46)

• 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>

(47)

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

(48)

• 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>

(49)

• 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>

Referensi

Dokumen terkait