XML Data Disusun Oleh Lily W
DTD DTD berfungsi untuk menjelaskan spesifikasi dan aturan terhadap elemen-elemen dan atribut yang harus dimiliki oleh sebuah xml dokumen. Kumpulan dari aturan-aturan tersebut disebut dengan SCHEMA SCHEMA tidak wajib dimiliki, tetapi diperlukan untuk memastikan konsistensi dokumen
DTD Elemen-elemen DTD Element, satu blok data yang diawali dengan tag pembuka dan tag penutup Atribut, informasi pendukung element yang disertakan pada tag pembuka Entity, karakter pengganti untuk sekumpulan informasi yang didefinisikan
DTD Mendefinisikan elemen pada DTD : <!ELEMENT animal (lion)>: element animal hanya boleh memiliki satu elemen lion. <!ELEMENT picture EMPTY>: element picture tidak mempunyai elemen lain. <!ELEMENT animal ANY>: element animal dapat berisikan element lainnya. Mendefinisikan element yang berisikan text <!ELEMENT name(#PCDATA)>
DTD Mendefinisikan element yang mempunyai beberapa element <!ELEMENT animal(name, weight)> Berdasarkan aturan di atas maka element harus mempunyai element nama dan weight : <animal> <name>lion</name> <weight>350 pounds</weight> </animal>
DTD Mendefinisikan element dengan beberapa pilihan element <!ELEMENT animal ((name, weight) | (picture)> Berdasarkan aturan di atas maka element animal harus mempunyai elemen name dan weight atau hanya punya element picture. Pendefinisian Unit pada element : <!ELEMENT animal (name+, weight?, picture, subspecies*) Artinya : name harus tampil setidaknya satu kali weight dapat tampil sekali atau tidak tampil sama sekali picture hanya harus tampil sekali subspecies dapat tampil beberapa kali pun atau tidak tampil samasekali
Atribut Terkadang penggunaan atribut dapat lebih berarti dari pada memecah element menjadi sub-sub element. Kedua element ini berarti sama : <population animal=“lion”>80</population> <population><animal>lion</animal><quantity>80</ quantity></population> Attribute harus dideklarasikan juga pada DTD untuk dapat dipergunakan <!ELEMENT population (#PCDATA)> <!ATTLIST population year CDATA #IMPLIED>
Atribut Mendefinisikan Atribut wajib (Required Attribute) : <!ELEMENT population (#PCDATA)> <!ATTLIST population year (2000 | 2001) #REQUIRED> Berarti : element populasi harus mempunyai atribut year yang bernilai 2000 atau 2001 <population year=“2000”>80</population> Mendefinisikan Attribute default (Default Attribute) : <!ATTLIST population year CDATA “2000”>
Atribut Mendefinisikan Atribut default (Default Attribute) : <!ELEMENT population (#PCDATA)> <!ATTLIST population year CDATA #FIXED “2000”> Invalid : <population year=“2001”>80</population> Valid : <population year=“2000”>80</population> Valid : <population>80</population> Mendefinisikan Unique Attribute : <!ELEMENT animal (name)> <!ATTLIST animal code ID #REQUIRED>
Deklarasi DTD Internal : <?xml version=“1.0”?> <!DOCTYPE animal [ ]> <animal> </animal> animal is the root element DTD berada dalam kurung “[]”brackets pada “DOCTYPE” Eksternal : <!DOCTYPE animal SYSTEM “http://www.animals.com/xml/animal.dtd”>
Entity Entity XML digunakan untuk menggantikan kalimat yang panjang atau satu blok elemen yang sering digunakan dengan sebuah pengenal singkat. Misalnya ingin menggantikan kalimat “Manajemen Data dan Informasi dengan XML/XSL”dengan entity &judul; Sekali entity didefinisikan di dalam DTD, maka dapat digunakan dimana saja pada seluruh dokumen XML <?xml version=”1.0”encoding=”iso-8859-1”> <!DOCTYPE organisasi [ <!ENTITY judul "Manajemen data dan informasi dengan XML/XSLT"> ]> <resensi> <buku judul=”&judul;”> <ulasan>Buku yang berjudul &judul; ini ditulis oleh Moh Junaedi..</ulasan> </buku> </resensi>
XSLT XSLT adalah eXtensible StyleSheet Language Transformation, merupakan bagian dari XSL yang dikembangkan sebelumnya. XSL adalah StyleSheet yang khusus dikembangkan sebagai komplemen XML, untuk merubah informasi pada XML ke dalam bentuk lain agar bisa ditampilkan di layar, dicetak di kertas atau didengarkan di telinga. Dibagi menjadi 2 bagian proses: Transformasi Struktural yang meliputi pengumpulan, pengelompokkan dan pengurutan data maupun penyusunan ulang, penambahan dan penghapusan tag dan atribut (disebut dengan XSLT) Proses merubah format menjadi pixel di layar, nohtah tinta di kertas atau nada di speaker (disebut XSLFO) Hasil keluaran XSLT bisa berupa HTML, Text file atau XML dengan format baru.
XSLT Processor XSLT Processor atau Parser adalah software bantu yang tugasnya menerapkan perintah-perintah dalam XSLT pada dokumen sumber XML, dan menghasilkan dokumen keluaran baik berupa HTML, text file araupun XML. XSLT Processor yang dapat digunakan bila menggunakan Internet Explorer versi 5.5 ke bawah adalah MSXML atau MSXML2
Contoh Sederhana Untuk memahami bagaimana XML dan XSLT bekerja, perhatikan contoh berikut ini: <?xml version=”1.0”encoding=”iso-8859-1”?> <berita>Saya sedang belajar XML</berita> Simpanlah documen di atas dengan nama belajar.xml
XSLT yang diperlukan adalah sebagai berikut <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match ='/'> <html> <head> <title>XML Saya yang Pertama</title> </head> <body> <p><xsl:value-of select="berita"/></p> </body> </html> </xsl:template> </xsl:stylesheet> Simpanlah dokumen XSLT ini dengan nama belajar.xsl
Hasil Bila menggunakan MSXML3 sebagai parser, maka harus ditambahkan satu baris heading standard sehingga dokumen XML akan menjadi seperti berikut: <?xml version=”1.0” encoding=”iso-8859-1”?> <?xml- stylesheet type=”text/xsl” href=”belajar.xsl” <berita>Saya sedang belajar XML</berita> Maka akan tampil di browser adalah sebagai berikut :
XML Schema
Definisi XML Schema adalah alternatif berbasis XML untuk DTD. Sebuah skema XML menjelaskan struktur dari dokumen XML. XML Schema bahasa juga disebut sebagai XML Schema Definition (XSD).
Tujuan dari XML Schema Tujuan dari XML Schema adalah untuk mendefinisikan blok dari dokumen XML, seperti sebuah DTD. XML Schema: mendefinisikan elemen-elemen yang dapat muncul dalam dokumen mendefinisikan atribut yang dapat muncul dalam dokumen mendefinisikan elemen elemen anak mendefinisikan urutan elemen anak mendefinisikan jumlah elemen anak mendefinisikan apakah suatu elemen kosong atau dapat berisi teks mendefinisikan tipe data untuk elemen dan atribut mendefinisikan nilai default dan tetap untuk elemen dan atribut
Tipe Data Salah satu kekuatan terbesar XML Schemas adalah dukungan untuk tipe data. Dengan dukungan untuk tipe data: Lebih mudah untuk menjelaskan konten dokumen yang diijinkan Lebih mudah untuk memvalidasi kebenaran data Lebih mudah untuk bekerja dengan data dari database Lebih mudah untuk mendefinisikan aspek data (pembatasan data) Lebih mudah untuk mendefinisikan pola data (format data) Lebih mudah untuk mengkonversi data antara tipe data yang berbeda
Cara Penggunaan XML: <?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> DTD: <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
SCHEMA: <. xml version="1. 0" SCHEMA: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.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:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Dokumen XML memiliki referensi ke sebuah DTD: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd/note.dtd"> Dokumen XML memiliki referensi ke XML Schema: <?xml version="1.0"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd">
Elemen Sederhana Elemen sederhana adalah elemen XML yang dapat berisi teks saja. Hal ini tidak dapat berisi elemen-elemen lain atau atribut. Namun, pembatasan "hanya teks" cukup menyesatkan. Teks dapat dari berbagai jenis. Hal ini dapat menjadi salah satu jenis termasuk dalam definisi XML Schema (boolean, string, tanggal, dll), atau bisa jenis custom yang Anda dapat tentukan sendiri.
Tipe data Build-in xs: string xs: decimal xs: integer xs: boolean XML Schema memiliki banyak build-in tipe data. Jenis yang paling umum adalah: xs: string xs: decimal xs: integer xs: boolean xs: date xs: time Nilai default dan tetap untuk Elemen <xs:element name="color" type="xs:string" default="red"/> <xs:element name="color" type="xs:string" fixed="red"/>
Atribut Elemen sederhana tidak dapat memiliki atribut. Jika suatu elemen memiliki atribut, maka dianggap suatu tipe kompleks. Tetapi atribut itu sendiri selalu dinyatakan sebagai tipe sederhana. Sintaks untuk mendefinisikan atribut adalah: <xs:attribute name="xxx" type="yyy"/>
Atribut Berikut ini adalah elemen XML dengan atribut <lastname lang="EN">Smith</lastname> Dan di sini adalah definisi atribut yang sesuai: <xs:attribute name="lang" type="xs:string"/> Atribut adalah opsional secara default. Untuk menetapkan bahwa atribut diperlukan, gunakan "use" atribut: <xs:attribute name="lang" type="xs:string" use="required"/>
XSD Restrictions Pembatasan digunakan untuk menentukan nilai yang dapat diterima untuk elemen XML atau atribut Contoh: <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> <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>
Contoh contoh slide sebelumnya dapat juga ditulis seperti di bawah ini: <xs:element name="car" type="carType"/> <xs:simpleType name="carType"> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType>
Contoh Contoh berikut ini mendefinisikan sebuah elemen yang disebut "inisial" dengan pembatasan. Nilai hanya dapat diterima adalah TIGA dari huruf besar 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 di bawah ini mendefinisikan sebuah elemen yang disebut "huruf" dengan pembatasan. Nilai hanya dapat diterima adalah SATU dari huruf kecil 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 Contoh berikut juga mendefinisikan elemen yang disebut "inisial" dengan pembatasan. Nilai hanya dapat diterima adalah TIGA dari huruf huruf besar atau huruf kecil dari a ke z: <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> Contoh berikut ini mendefinisikan sebuah elemen yang disebut "pilihan" dengan pembatasan. Nilai hanya dapat diterima adalah SATU dari huruf- huruf berikut: x, y, z : <xs:pattern value="[xyz]"/>
Contoh Contoh berikut mendefinisikan elemen yang disebut "ProdID" dengan pembatasan. Nilai hanya dapat diterima adalah LIMA digit secara berurutan, dan masing-masing digit harus berada dalam rentang dari 0 sampai 9: <xs:restriction base="xs:integer"> <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> </xs:restriction> Contoh di bawah ini mendefinisikan sebuah elemen yang disebut "huruf" dengan pembatasan. Nilai diterima adalah nol atau lebih kejadian dari huruf kecil a sampai z: <xs:pattern value="([a-z])*"/>
Contoh Contoh berikut juga mendefinisikan elemen yang disebut "huruf" dengan pembatasan. Nilai diterima adalah satu atau lebih pasang huruf, masing- masing pasangan terdiri dari huruf kecil diikuti dengan huruf besar. Misalnya, "sTop" akan divalidasi oleh pola ini, tapi tidak "STOP" atau "stop" atau "berhenti": <xs:pattern value="([a-z][A-Z])+"/>
Contoh contoh atau: <xs:pattern value="male|female"/> Contoh berikut ini mendefinisikan sebuah elemen yang disebut "password" dengan pembatasan. Harus ada tepat delapan karakter dalam satu baris dan karakter mereka harus huruf kecil atau huruf besar dari a sampai z, atau nomor dari 0 sampai 9: <xs:pattern value="[a-zA-Z0-9]{8}"/>
Contoh Contoh tidak menghapus karakter whitespace <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> </xs:restriction> Contoh mengganti (tab, enter, etc)menjadi karakter whitespace: <xs:whiteSpace value="replace"/>
Contoh Contoh trim: <xs:restriction base="xs:string"> <xs:whiteSpace value="collapse"/> </xs:restriction> Contoh Panjang Karakter: <xs:length value="8"/>
Contoh Contoh Batasan panjang: <xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction>
Restrictions untuk Tipe Data
Elemen Kompleks Elemen kompleks mengandung elemen-elemen lain dan / atau atribut. Ada empat macam elemen yang kompleks: Elemen-elemen kosong Elemen-elemen yang mengandung elemen lainnya elemen yang hanya berisi teks Elemen-elemen yang mengandung kedua elemen lain dan teks
Cara mendefinisikan elemen kompleks XML: <employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee> SCHEMA CARA 1 dengan cara direct (langsung): <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="firstname" ype="xs:string"/> <xs:element name="lastname" ype="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:sequence> tag. menandakan bahwa element firstname dan lastname harus berurutan dan berada di dalam elemen employee.
SCHEMA CARA 2 dengan cara membuat sebagai atribut: <xs:element name="employee" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
dengan menggunakan cara ini kita juga bisa menambahkannya ke banyak elemen <xs:element name="employee" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:element name="member" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
Anda juga dapat mendasarkan sebuah elemen yang kompleks pada elemen kompleks yang lain dan menambahkan beberapa elemen, seperti ini: <xs:element name="employee" type="fullpersoninfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
Indicators Ada 7 Indikator: Order indicators: Occurrence indicators: All Choice Sequence Occurrence indicators: maxOccurs minOccurs Group indicators: Group name attributeGroup name
Indikator <all> Indikator <all> menetapkan bahwa elemen anak dapat muncul dalam urutan apapun, dan bahwa setiap elemen anak harus terjadi hanya sekali: <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>
Indikator <choice> Indikator <choice> menetapkan bahwa salah satu elemen anak atau lainnya ada: <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>
Indikator <sequence> Indikator <sequence> menetapkan bahwa elemen anak 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>
Indikator <maxOccurs> Indikator <maxOccurs> menentukan angka maksimum berapa kali suatu elemen dapat terjadi: <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"/> </xs:sequence> </xs:complexType> </xs:element>
Indikator <minOccurs> Indikator <minOccurs> menentukan jumlah minimum kali suatu elemen dapat terjadi: <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>
XML file yang bernama "Myfamily.xml": <?xml version="1.0" encoding="ISO-8859-1"?> <persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="family.xsd"> <person> <full_name>Hege Refsnes</full_name> <child_name>Cecilie</child_name> </person> <person> <full_name>Tove Refsnes</full_name> <child_name>Hege</child_name> <child_name>Stale</child_name> <child_name>Jim</child_name> <child_name>Borge</child_name> </person> <person> <full_name>Stale Refsnes</full_name> </person> </persons> File XML di atas berisi elemen root bernama “person". Di dalam elemen root kita telah mendefinisikan tiga elemen “person". Setiap elemen “person" harus mengandung elemen "full_name" dan dapat berisi hingga lima elemen "child_name".
Berikut adalah skema file "family.xsd": <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="persons"> <xs:complexType> <xs:sequence> <xs:element name="person" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" minOccurs="0" maxOccurs="5"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Elemen Any "children.xsd": <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="children"> <xs:complexType> <xs:sequence> <xs:element name="childname" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
File XML di bawah ini (disebut "Myfamily File XML di bawah ini (disebut "Myfamily.xml"), menggunakan komponen dari dua skema yang berbeda, "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="http://www.microsoft.com family.xsd http://www.w3schools.com children.xsd"> <person> <firstname>Hege</firstname> <lastname>Refsnes</lastname> <children> <childname>Cecilie</childname> </children> </person> <person> <firstname>Stale</firstname> <lastname>Refsnes</lastname> </person> </persons>
Elemen Any untuk Atribut <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>
Lihat skema ini, yang disebut "attribute. xsd": <. xml version="1 Lihat skema ini, yang disebut "attribute.xsd": <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:attribute name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="male|female"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:schema>
File XML di bawah ini (disebut "Myfamily File XML di bawah ini (disebut "Myfamily.xml"), menggunakan komponen dari dua skema yang berbeda, "family.xsd" dan "attribute.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="http://www.microsoft.com family.xsd http://www.w3schools.com attribute.xsd"> <person gender="female"> <firstname>Hege</firstname> <lastname>Refsnes</lastname> </person> <person gender="male"> <firstname>Stale</firstname> <lastname>Refsnes</lastname> </person> </persons>