praktikum xml
TRANSCRIPT
Politeknik Telkom Praktikum Pemrograman XML
Praktikum
Pemrograman EXtensible Markup Languange
XML
POLITEKNIK TELKOM
BANDUNG 2009
Politeknik Telkom Praktikum Pemrograman XML
Penyusun dan Editor Hendra Kusmayadi
Eko Darwiyanto
Dilarang menerbitkan kembali, menyebarluaskan atau menyimpan baik
sebagian maupun seluruh isi buku dalam bentuk dan dengan cara apapun
tanpa izin tertulis dari Politeknik Telkom.
Hak cipta dilindungi undang-undang @ Politeknik Telkom 2009
No part of this document may be copied, reproduced, printed, distributed, modified,
removed and amended in any form by any means without prior written
authorization of Telkom Polytechnic.
Politeknik Telkom Praktikum Pemrograman XML
iii PAGE 10
Kata Pengantar
Assalamu’alaikum Wr. Wb
Segala puji bagi Allah SWT karena dengan karunia-Nya courseware ini
dapat diselesaikan.
Atas nama Politeknik Telkom, kami sangat menghargai dan ingin
menyampaikan terima kasih kepada penulis, penerjemah dan
penyunting yang telah memberikan tenaga, pikiran, dan waktu sehingga courseware ini dapat tersusun.
Tak ada gading yang tak retak, di dunia ini tidak ada yang sempurna,
oleh karena itu kami harapkan para pengguna buku ini dapat
memberikan masukan perbaikan demi pengembangan selanjutnya.
Semoga courseware ini dapat memberikan manfaat dan membantu
seluruh Sivitas Akademika Politeknik Telkom dalam memahami dan
mengikuti materi perkuliahan di Politeknik Telkom. Amin.
Wassalamu’alaikum Wr. Wb.
Bandung, Mei 2009
Christanto Triwibisono Wakil Direktur I
Bidang Akademik & Pengembangan
Politeknik Telkom Praktikum Pemrograman XML
iv PAGE 10
Daftar Isi
Kata Pengantar................................................................................iii Daftar Isi .......................................................................................... iv 1 Pengenalan XML ................................................................... 1 Hubungan XML Dengan HTML .............................................................................. 2 Cara Kerja XML ......................................................................................................... 5 2 XML Fundamentals ............................................................... 8 Dokumen XML dan File XML ................................................................................. 9 Elemen, Tag, dan Data karakter .............................................................................. 9 Atribut ........................................................................................................................ 12 Entity References ..................................................................................................... 13 CDATA Sections ...................................................................................................... 14 Komentar ................................................................................................................... 15 Deklarasi XML .......................................................................................................... 17 Checking Documents for Well-Formedness ..................................................... 17 3 Document Type Definitions (DTD) .....................................23 Validation ................................................................................................................... 24 Deklarasi Elemen ...................................................................................................... 25 Deklarasi Atribut ...................................................................................................... 34 General Entity Declarations................................................................................... 35 External Parsed General Entities .......................................................................... 36 External Unparsed Entities and Notations ......................................................... 36 Parameter Entity ....................................................................................................... 37 Conditional Inclusion ............................................................................................... 37 Contoh Two DTD ................................................................................................... 38 Standar Penempatan DTD ..................................................................................... 39 4 Namespaces ..........................................................................41 Kebutuhan Namespace ........................................................................................... 42 Sintaks Namespace ................................................................................................... 42 Namespaces dan DTD ............................................................................................ 44 5 XML pada Web.....................................................................46 XHTML....................................................................................................................... 47 Direct Display pada browser................................................................................. 49 Authoring Compound Documents with Modular XHTML ............................ 50 Prospects for Improved Web-Search Methods ................................................ 50 6 XSL Transformations (XSLT) .............................................52 Contoh Dokumen XML.......................................................................................... 53 xsl:stylesheet ............................................................................................................. 53 Contoh Stylesheet Processors .............................................................................. 54
Politeknik Telkom Praktikum Pemrograman XML
v PAGE 10
Templates and Template Rules ............................................................................. 54 Elemen with xsl:value-of ......................................................................................... 56 Element xsl:apply-templates ................................................................................... 56 Built-in Pada Template Rule ................................................................................... 59 Mode ......................................................................................................................... 60 Template untuk nilai Attribute .............................................................................. 60 XSLT dan Namespace ............................................................................................. 63 Elemen XSLT ............................................................................................................. 64 7 XPath ....................................................................................66 Struktur Dokumen XML ........................................................................................ 67 Location Paths ........................................................................................................... 67 Menggabungkan Location Part ............................................................................... 75 Predikat ...................................................................................................................... 75 Unabbreviated Location Paths .............................................................................. 76 General XPath Expressions ................................................................................... 76 Fungsi XPath .............................................................................................................. 78 8 XLinks ...................................................................................80 Simple Links ............................................................................................................... 81 Link Behavior ............................................................................................................ 82 Link Semantics .......................................................................................................... 85 Extended Links .......................................................................................................... 86 DTD untuk XLink .................................................................................................... 86 9 XPointer................................................................................89 XPointers pada URL ................................................................................................ 90 Child Sequences ....................................................................................................... 93 Namespace ................................................................................................................ 94 Points ......................................................................................................................... 94 Ranges ......................................................................................................................... 95 10 XML Schemas .......................................................................97 Overview ................................................................................................................... 98 Skema Dasar .............................................................................................................. 98 Bekerja dengan Namespace ................................................................................ 103 Elemen Kosong ...................................................................................................... 103 Tipe kompleks ........................................................................................................ 104 Mixed Content....................................................................................................... 105 Controlling Type Derivation .............................................................................. 105 11 PRAKTIKUM DOM ............................................................108 11.1 Menampilkan data XML ........................................................................... 109 11.2 Insert Data .................................................................................................. 111 11.3 Pencarian Data ........................................................................................... 114
Politeknik Telkom Praktikum Pemrograman XML
vi PAGE 10
11.4 Update Data ............................................................................................... 117 11.5 Delete Data ................................................................................................ 121 12 PRAKTIKUM DOM (2).......................................................126 12.1 Validasi dokumen XML dengan DTD ................................................... 127 12.2 Validasi dokumen XML dengan XSD .................................................... 132 12.3 Menampilkan XML dengan XSL ............................................................. 137 13 PRAKTIKUM SAX ..............................................................145 13.1 Menampilkan data XML ........................................................................... 146 13.2 Tampilkan Data XML tanpa tag ............................................................. 151 13.3 Perhitungan terhadap data XML ............................................................ 154 14 PRAKTIKUM WSDL ..........................................................158 14.1 Membuat WSDL dengan wscompile Java ............................................ 159 15 PRAKTIKUM WEB SERVICE(1) .......................................169 15.1 Persiapan ..................................................................................................... 170 15.2 Kode Web Service dengan Java ............................................................. 172 15.3 Install Web Service di Web Server....................................................... 173 a. Cara Instan. ........................................................................................................ 173 - ganti file .java menjadi file .jws (java web service)..................................... 173 - copy file.jws file ke direktori webapp ............................................................ 173 - Jadi!! ...................................................................................................................... 173 Axis menangani kompilasi, pembuatan WSDL dsb. ....................................... 173 b. Cara Custom ..................................................................................................... 173 15.4 Memanggil Web Service .......................................................................... 173 Tahap 2: Buat stubs............................................................................................... 174 Gunakan WSDL2Java untuk membuat client stubs/bindings ....................... 174 java org.apache.axis.wsdl.WSDL2Java Calculator.wsdl membuat: ............. 174 - Calculator.java (interface) ................................................................................. 174 - CalculatorService.java (service interface) ..................................................... 174 - CalculatorServiceLocator.java ......................................................................... 174 (service factory, implements CalculatorService.java) .................................... 174 - CalculatorServiceSoapBindingStub.java ......................................................... 174 (stub for invoking service using SOAP, implements Calculator.java) ........ 174 12 PRAKTIKUM WEB-SERVICE (2) ......................................178 Web Service di ASP.NET ............................................................179 12.1.1 Contoh ..................................................................................................... 179 12.1.2 Penjelasan.................................................................................................... 180 12.2 ASP.NET mengotomatisasikan proses ................................................. 181 Daftar Pustaka
Politeknik Telkom Praktikum Pemrograman XML
Pengenalan XML 1 PAGE 10
1 Pengenalan XML
Overview
EXtensible Markup Language (XML) merupakan sebuah bahasa markup yang digunakan untuk menandai suatu dokumen data. Markup language
merupakan suatu bahasa pemprograman untuk menandai suatu dokumen. Penandaan dilakukan menggunakan dua buah string tertentu yang mengapit data yang ditandai. String tersebut disebut dengan tag. Tujuan penandaan adalah agar dokumen tersebut lebih mudah dibaca, dipahami serta menarik.
Hal ini dapat kita ibaratkan dengan buku pelajaran yang berisi berbagai macam
tulisan dalam bentuk teks. Saat kita membacanya tentulah hal tersebut
membosankan dan kurang menarik. Pada saat kita kuliah, dosen akan
menerangkan hal-hal yang penting yang ada pada buku tersebut. Sehingga kita
terinisiatif untuk menandai tulisan tersebut pada bagian yang kita anggap
penting dengan menggunakan stabilo. Dengan demikian, apabila ujuan telah
dekat maka yang kita lakukan adalah membaca bagian yang kita telah tandai
tersebut. Penandaan inilah kita sebut dengan markup.
Tujuan
1. Mahasiswa dapat memahami struktur dokumen HTML
2. Mahasiswa dapat memahami penggunaan data dengan XML
Politeknik Telkom Praktikum Pemrograman XML
2 Pengenalan XML PAGE 10
Hubungan XML Dengan HTML
HTML merupakan bahasa markup yang menjadi standar penulisan yang dapat
menjelaskan arti tiap bagian yang ditandai dengan tag. Tag-tag yang digunakan
telah didefinisikan, sehingga kita harus menggunakannya sesuai dengan yang
didefinisikan. HTML digunakan sebagai standar pertukarang data melalui
internet. Misalnya kita memiliki sebuah data yang akan kita berikan kepada
orang lain melalui internet, agar orang lain dapat mengerti dengan jelas
maksud dari data kita, maka data tersebut haruslah ditulis menggunakan
HTML dengan format-format tertentu agar web browser dapat membukanya
dan menampilkannya dengan baik. Tampilan data yang akan ditampilkan oleh
web browser sesuai dengan informasi dari masing-masing bagian yang
ditandai. Misalnya pada bagian-bagian tertentu kita tampilkan tulisan dengan
tabel, dapat pula tulisannya ditampilkan dengan cetak tebal, dalam baris yang
berbeda dan lain sebagainya sesuai dengan keinginan kita.
Sebagai contoh, kita akan memberikan data mahasiswa sebagai berikut :
nim : 30100005
nama : Susanto
nim : 30200010
nama : Susilo
nim : 30201011
nama : Susilawati
Jika data tersebut kita tulis hanya seperti itu saja, maka data tersebut akan
tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
Pengenalan XML 3 PAGE 10
Tentunya jika kita membacanya sangatlah bingung. Tetapi apabila data
tersebut ditulis dengan format penulisan HTML, yaitu :
<html>
<head>
<title>Contoh pertama</title>
</head>
<body>
<table border='1'>
<tr><th>Nim</th><th>Nama</th></tr>
<tr><td>30100005</td><td>Susanto</td></tr>
<tr><td>30200010</td><td>Susilo</td></tr>
<tr><td>30201011</td><td>Susilawati</td></tr>
</table>
</body>
</html>
simpan file tersebut dengan nama contih1.html. Dengan demikian, maka
tampilan yang akan kita lihat akan lebih jelas dan mudah difahami. Tampilannya
adalah sebagai berikut :
Politeknik Telkom Praktikum Pemrograman XML
4 Pengenalan XML PAGE 10
Lalu apa hubungan antara HTML dan XML...?. HTML dan XML adalah sama-
sama dikembangkan dari SGML (Standard Generalized Markup Language).
Namun, perbedaan antara keduanya adalah jika HTML tag-tag yang digunakan
sangat terbatas dan tag-tag tersebut digunakan untuk mengatur penampilan
data, sedangkan XML tag-tag yang digunakan kita dapat definisikan sendiri dan
tag-tag tersebut hanya digunakan untuk penanda bagian dokumen yang
mengandung informasi-informasi dan arti tertentu.
Jika kita menuliskan tekks diatas dan menyimpannya kedalam format XML
(simpan dengan nama contoh1.html), maka browser akan menampilkan sebagai
berikut (dengan menggunakan browser Mozilla Firefox) :
Politeknik Telkom Praktikum Pemrograman XML
Pengenalan XML 5 PAGE 10
Namun, jika dibuka menggunakan browser Internet Explorer 6 tampilannya
adalah sebagai berikut :
dengan demikian, dapatlah kita lihat perbedaan antara HTML dan XML. Yaitu
HTML menyatukan data dan interface, sedangkan XML hanya berkonsentrasi
pada data saja tanpa mementingkan interface.
Cara Kerja XML
Seperti yang dijelaskan di atas, tentang perbedaan antara HTML dan XML.
Yaitu HTML yang memerintahkan web browser bagaimana menampilkan
informasi yang ada, sedangkan XML hanya menandai informasi secara
terstruktur sehingga memudahkan aplikasi lain untuk menggunakan dokumen
tersebut. Seperti halnya HTML, XML juga menggunakan tag-tag. Jika tag-tag
pada HTML bersifat baku, tag-tag XML dapat dibuat sendiri, sesuai dengan
kebutuhan. Untuk memudahkan aplikasi membaca tag-tag apa saja yang
memuat informasi serta struktur hirarkinya.
Politeknik Telkom Praktikum Pemrograman XML
6 Pengenalan XML PAGE 10
Buatlah sebuah contoh dokumen XML seperti pada contoh dibawah ini dan
simpan kedalam file contoh2.xml :
<?xml version="1.0"?>
<product barcode="2394287410">
<manufacturer>Verbatim</manufacturer>
<name>DataLife MF 2HD</name>
<quantity>10</quantity>
<size>3.5"</size>
<color>black</color>
<description>floppy disks</description>
</product>
jika dokumen tersebut kita buka menggunakan web browser, maka tampak
seperti gambar dibawah ni :
Dokumen diatas menjelaskan sebuah data produk yang ada pada suatu
supermarket. Produk tersebut memiliki kode barcode= 2394287410,
manufacturer=Verbatim, name=DataLife MF 2HD, quantity=10,
size=3.5", color=black, description=floppy disks.
Politeknik Telkom Praktikum Pemrograman XML
Pengenalan XML 7 PAGE 10
Rangkuman
1. EXtensible Markup Language (XML), merupakan sebuah standar W3C-endorsed untuk Markup language
2. Markup language merupakan suatu bahasa pemprograman untuk
menandai suatu dokumen yang disebut dengan tag agar dokumen tersebut lebih mudah dibaca, dipahami serta menarik
3. XML memungkinkan penggunaan data secara cross-platform, long-term data format.
4. XML merupakan keturunan dari SGML yaitu Standard Generalized Markup Language. SGML diciptakan oleh Charles F. Goldfarb, Ed Mosher, dan Ray Lorie di IBM pada tahun 1970an dan dikembangkan
oleh banyak orang sehingga akhirnya dijadikan sebagai standart ISO 8879 pada tahun 1986.
5. XML memungkinkan kita untuk mengumpulkan informasi dan menggunakannya kembali dengan berbagai cara.
Latihan
1. Buatlah sebuah dokumen HTML yang dapat menampilkan data pegawai
suatu perusahaan yang teridiri dari NIP, Nama dan golongan seperti
terlihat pada gambar dibawah ini :
keterangan : tag <b> : untuk menebalkan tulisan
tag <i> : untuk tulisan miring
tag <u> : untuk tulisan garis bawah
Politeknik Telkom Praktikum Pemrograman XML
8 XML Fundamentals PAGE 10
2 XML Fundamentals
Overview
Pada bab berikut kita akan belajar bagaimana cara menuliskan dokumen
XML. Kita akan melihat bagaimana penulisan dokumen yang disusun dengan
konten markup dengan text tag seperti halnya pada dokumen HTML. Namun
seperti yang telah dijelaskan sebelumnya, dokumen HTML memiliki tag yang
terbatas yang dapat menjelaskan format halaman web. Sedangkan dengan
menggunakan XML, kita dapat menentukan tag sesuai dengan keinginan kita
dimana tag tersebut akan menjelaskan konten lebih banyak. Meskipun
penulisan tag dalam XML lebih bebas daripada HTML, XML tetap saja
memiliki aturan-aturan dalam penulisannya. Semua dokumen XML harus well-
formed. Well-formed merupakan aturan penulisan yang sesuai, Dalam hal ini,
penulisan masing-masing tag harus berada dalam posisi nested yang sama.
Misalnya penulisan setiap tag awal harus memiliki tag akhir yang sesuai, nilai
atribut harus didalam tanda petik.
Tujuan
1. Mahasiswa dapat membuat dokumen XML dan file XML yang well-
formed
2. Mahasiswa dapat membedakan antara tag, elemen, atribut, Cdata, emtity
serta penggunaannya
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 9 PAGE 10
Dokumen XML dan File XML
Dokumen XML mengandung data text bukan data binary. Sehingga dokumen
tersebut dapat dibuka atau diubah menggunakan aplikasi text editor seperti
motepad, wordpad, notepad++, dreamweaver atau kita dapat langsung
mengunakan aplikasi XML editor. Contoh penulisan sederhana dari dokumen
adalah :
<person>
Alan Turing
</person>
File dokumen XML dapat disimpan degang extensi *.xml, atau apapun asalkan
file tersebut digunakan sebagai file XML atau isinya adalah file XML. Contoh
penulisan sederhana telah kita bahas pada bab 1.
Elemen, Tag, dan Data karakter
Dokumen XML tersusun atas elemen-elemen yang membentuk hirarki tree /
pohon dimana isi dari elemen dapat berisi elemen lain atau sebuah karakter
data. Spasi termasuk juga bagian dari elemen konten, meskipun pada
kebanyakan aplikasi mengabaikan hail ini.
Sintaks Tag
tag terdiri dari dua baian yaitu tag pembuka dan tag penutup. tag pembuka
diawali dengan “<” dan diakhiri dengan “>”. Sedangkan tag penutup diawali
dengan “</” dan diakhiri dengan “>”. Sedangkan diantara keduanya
merupakan nama elemen dan penulisan nama elemen pada tag pembuka dan
penutup harus sama baik dari segi case sekalipun. Nama elemen kita dapat
tuliskan sesuai dengan keinginan kita, yang penting nama tersebut dapat
mendeskripsikan isi dari elemen. Misalnya suatu elemen menjelaskan
seseorang, maka tag-nya dapat kita tulis dengan <person></person>
atau <orang></orang>, untuk menjelaskan sebuah alamat dapat
menggunakan tag <address></address> atau
<alamat></alamat>.
Elemen Kosong
untuk elemen kosong adalah sebuah elemenyang tidak memiliki isi atau
konten, XML juga menyediakan tag khusus, dimana penulisannya dimulai
dengan tag “<” dan diakhiri dengan “/>”. misalnya pada HTML penulisan yang
Politeknik Telkom Praktikum Pemrograman XML
10 XML Fundamentals PAGE 10
dilakukan adalah <br />, <hr />, <input /> bukan dengan <br>,
<hr>, <input>. Namun penulisan tersebut sama artinya dengan
<br></br>, <hr></hr>, <input></input>.
Elemen root
Dokumen XML haruslah memiliki sebuah elemen root dan tidak boleh ada
elemen lain yang sejajar dengannya. Elemen root merupakan suatu elemen
yang terletak paling luar dan tidak memiliki parrent dan elemen ini merupakan
elemen pertama dalam suatu dokumen.
Mixed Conten
Maksud Mixed Conten adalah dimana pada dalam elemen mengandung elemen
dan data text. Misalnya contoh dibawah ini :
<biography>
<name>
<first_name>Alan</first_name>
<last_name>Turing</last_name>
</name>
was one of the first people to truly
deserve the name
…..........
</biography>
sekarang mari kita mencoba membuat sebuah dokumen XML yang mencakup
apa yang telah dibahas sebelumnya. Tulislah kode dibawah ini dan simpan
kedalam sebuah file contoh2_2.xml.
<orang>
<mahasiswa>Joni Saputra</mahasiswa>
<mahasiswa>
<nim>30200011</nim>
<nama>Andriani Sapitri</nama>
</mahasiswa>
<mahasiswa></mahasiswa>
<mahasiswa>
<nim>30200123</nim>
<nama>
<nama_depan>Budi</nama_depan>
<nama_belakang>Susanto</nama_belakang>
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 11 PAGE 10
</nama>
</mahasiswa>
<mahasiswa />
<mahasiswa>
<nim>30101043</nim>
<nama>Andana Sari</nama>
<kamut>
Jadilah seorang yang baik dan
<sifat>jujur</sifat> serta bewibawa
</kamut>
</mahasiswa>
<mahasiswa>
<nim>30101043</nim>
<nama>Andana Sari</nama>
<teman>Andriani Sapitri</teman>
</mahasiswa>
</orang>
pada contoh diatas jika kita menjalankannya dengan browser, maka tampilan
seperti yang kita lihat dibawah ini :
Politeknik Telkom Praktikum Pemrograman XML
12 XML Fundamentals PAGE 10
Atribut
Atribut adalah suatu sifat atau ciri dari suatu elemen. Atribut merupakan
pasangan name-value yang menempel pada elemen tag pembuka. Penggunaan
atritribut tidaklah mutlak. Kita dapat menggunakannya jika kita
menginginkannya, namun jika tidak, maka penulisan atribut tidaklah dianggap
perlu. Penulisan nama atribut dipisahkan dengan spasi dan nilainya diapit
dengan petik satu atau petik dua. Sebagai contoh person memiliki atribut
born dan memiliki nilai 1912-06-23, maka penulisannya :
<person born="1912-06-23" died="1954-06-07">
Alan Turing
</person>
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 13 PAGE 10
Atau penulisannya dapat juga dengan pengapit petik satu (').
<person died = '1954-06-07' born = '1912-06-23' >
Alan Turing
</person>
Sebagai contoh, buatlah dokumen yang menyatakan data seperti dibawah ini
dan disimpan pada file dengan nama contoh2_2.xml:
<orang>
<nama depan="Ani" belakang="Anindiya"/>
<teman nama="Citra Sari"/>
<teman nama="Permata Indah"/>
<teman nama="Intan Purnama"/>
<teman nama="Mawar Indah"/>
</orang>
Jika dokumen tersebut kita jalankan, maka akan tampak seperti berikut :
Entity References
Dalam penulisan karakter data kita tidak boleh menggunakan tanda “<” atau
“>”. Namun jika karakter sebut adalah penting untuk kita tulis, ada cara untuk kita dapat menuliskannya yaitu dengan cara menuliskan entitasnya. Jika kita
ingin menuliskan string “<” maka sebagai penulisannya adalah <
Politeknik Telkom Praktikum Pemrograman XML
14 XML Fundamentals PAGE 10
sedangkan “>” dapat kita tuliskan dengan >. Sebagai contoh, misalnya
kita ingin menuliskan data tutorial XML :
<tutorial>
<judul>Menuliskan Elemen Sedrhana</judul>
<penulis>Hendra Kusmayadi</penulis>
<isi>
Berikut adalah contoh penulisan elemen sederhana
<mahasiswa>Joni Suraya</mahasiswa>
</isi>
</tutorial>
Jika dokumen tersebut dijalankan, maka tampilan tersebut akan terlihat
seperti gambar dibawah ini :
CDATA Sections
Pada bahasan sebelumnya kita telah membahas apa yang namannya entity
references dimana jika kita akan menuliskan string “<” maka yang kita tuliskan
adalah entitasnya yaitu “<”. Namun, dengan menggunakan CDATA kita dapat menuliskan string atau karakter tersebut tanpa harus menggunakan
entitas. Cara penulisannya adalah dengan diawali string “<![CDATA[” dan
diakhiri dengan “]]>”.
Sebagai contoh, buatlah kode berikut yang menerapkan CDATA dan simpan
file tersebut dengan nama contoh2_4.xml.
<tutorial>
<judul>Menuliskan Elemen Sedrhana</judul>
<penulis>Hendra Kusmayadi</ penulis >
<isi>
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 15 PAGE 10
Berikut adalah contoh penulisan elemen sederhana
<![CDATA[
<mahasiswa>Joni Suraya</mahasiswa>
]]>
</isi>
</tutorial>
Jika kita menjalankan kode diatas maka akan terlihat tampilannya seperti
berikut :
Namun ada string tententu yang tidak boleh digunakan pada CDATA, yaitu
“]]>”, karena nantinya string tersebut akan dianggap sebagai sebuah penutup
komentar.
Komentar
Komentar merupakan kode atau string yang ditulis tetapi kode tersebut tidak
akan dieksekusi. Pada kebanyakan bahasa pemprograman, komentar biasanya
ditulis untuk menjelaskan kode yang ditulis agar untuk kemudian hari jika kita ingin melihat kembali kode kita, kita akan dimudahkan dengan melihat
komentar yang kita tulis. Penulisan komentar pada XML sama seperti pada
HTML yaitu dengan diawali dengan “<!--” dan diakhiri dengan “-->”.
Politeknik Telkom Praktikum Pemrograman XML
16 XML Fundamentals PAGE 10
Sebagai contoh, buatlah kode berikut yang mengandung komentar dan simpan
file tersebut dengan nama contoh2_5.xml.
<tutorial>
<!-- judul tutorial -->
<judul>Menuliskan Elemen Sedrhana</judul>
<!-- penulis isi tutorial -->
<penulis>Hendra Kusmayadi</penulis>
<isi><!-- isi tutorial -->
Berikut adalah contoh penulisan elemen sederhana
<![CDATA[
<mahasiswa>Joni Suraya</mahasiswa>
]]>
</isi>
</tutorial>
Jika kita menjalankan kode diatas maka akan terlihat tampilannya seperti
berikut :
Namun ada string tententu yang tidak boleh digunakan pada komentar, yaitu
“--”, karena nantinya string tersebut akan dianggap sebagai sebuah penutup komentar.
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 17 PAGE 10
Deklarasi XML
Sebuah dokumen XML boleh dideklarasikan boleh juga tidak. Pendeklarasian
XML mengandung name dan version, standalone, dan encoding atribut.
Sebagai contoh buatlah dokumen XML dengan kode dibawah ini dan
simpanlah dengan nama contoh2_6.xml :
<?xml version="1.0" encoding="ASCII"
standalone="yes"?>
<mahasiswa>
Johan Sabima
</mahasiswa>
pendeklarasian tidak perlu ditulis pada dokumen XML. Namun, jika pada
dokumen ada pendeklarasian maka deklarasi harus berada paling atas, tidak
boleh didahului sintaks apapun seperti komentar, spasi, dll.
Checking Documents for Well-Formedness
Setiap dokumen XML harus well-formed. Ini berarti harus sesuai dengan
aturan yang ada misalnya :
1. Setiap awal tag harus diakhiri dengan tag yang sama.
<mahasiswa>Johan Sabima</Mahasiswa>
Jika dijalankan maka akan tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
18 XML Fundamentals PAGE 10
2. Elemen boleh bersarang, tetapi tidak boleh saling tumpang tindih
<mahasiswa>
<nama>Johan Sabima</mahasiswa>
</nama>
Jika dijalankan maka akan tampak seperti berikut :
3. Harus memiliki tepat satu elemen root.
<mahasiswa>Johan Sabima</mahasiswa>
<siswa>Adit Pramana</siswa>
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 19 PAGE 10
Jika dijalankan maka akan tampak seperti berikut :
4. Nilai atribut harus diapit oleh tanda petik.
<mahasiswa nim=30100123>Johan Sabima</mahasiswa>
Jika dijalankan maka akan tampak seperti berikut :
5. Satu elemen tidak boleh memiliki dua atribut yang sama
<mahasiswa nim='30100123' nim='30100132'>
Johan Sabima
</mahasiswa>
Politeknik Telkom Praktikum Pemrograman XML
20 XML Fundamentals PAGE 10
Jika dijalankan maka akan tampak seperti berikut :
6. Tidak ada unescaped “<” atau “&” atau tanda-tanda lainnya
<mahasiswa>Johan < Sabima</mahasiswa>
Jika dijalankan maka akan tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
XML Fundamentals 21 PAGE 10
Rangkuman
1. Dokumen XML dapat disimpan dengan extensi XML ataupun yang
lainnya asal didalam file tersebut merupakan dokumen XML
2. Penulisan XML name harus mengandung karakter yang sering diunakan
seperti a-z, A-Z, 0-9, -, _.
3. CData digunakan untuk membolehkan kita untuk menuliskan karakter
yang merupakan karakter entity.
4. Komentar merupakan kode yang tidak akan dieksekusi oleh parser
Politeknik Telkom Praktikum Pemrograman XML
22 XML Fundamentals PAGE 10
Latihan
1. Buatlah dokumen mahasiswa yang terdiri dari nama, kelas, hobi dan
nim merupakan atribut dari mahasiswa tersebut. Sehingga tampilannya seperti berikut :
gambar soal
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 23 PAGE 10
3 Document Type Definitions (DTD)
Overview
Meskipun XML sangatlah fleksibel, namun tidak semua program dapat
membaca dokumennya secara baik. Banyak program yang dapat bekerja
dengan beberapa aplikasi XML tetapi terkadang tidak untuk yang lain. Aplikasi
XML harus memastikan bahwa dokumen yang diberikan adalah benar-banar
mematuhi aturan. Misalnya didalam XHTML, pada elemen li merupakan child
dari elemen ol. Dalam hal ini, apakan li atau ul tersebut merupakan bagian
dari tag XML ataukah elemen isi. Solusi untuk permasalahan seperti itu adalah
dengan menggunakan DTD. DTD berfungsi untuk mendefinisikan tipe
dokumen XML. DTD ditulis untuk menjelaskan elemen dan entitas yang
mungkin muncul di dalam dokumen dan elemen isi serta atributnya. Sehingga
kita tahu bahwa seperti apa struktur dokumen dan dapat membedakan yang
mana tag dan yang mana elemen.
Tujuan
1. Mahasiswa mehamami apa yang dimaksud dengan DTD
2. Mahaiswa dapat menggunakan DTD untuk elemen dan atribut.
3. Mahasiswa dapat membuat dokumen XML berdasarkan DTD yang
sudah ada.
Politeknik Telkom Praktikum Pemrograman XML
24 Document Type Definitions PAGE 10
Validation
Dokumen yang valid termasuk jenis dokumen mendeklarasikan DTD. DTD
digunakan untuk mendeklarasikan semua elemen, atribut, dan entitas yang
akan digunakan didalam dokumen. Semua dokumen yang akan ditulis harus
dideklarasikan didalam DTD.
Sebagai contoh, buatlah dokumen XML beririkut yang menyertakan deklarasi
DTD. Simpan file tersebut dengan nama contoh3_1.xml.
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi)>
<!ELEMENT nama (nama_depan, nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
]>
<orang>
<nama>
<nama_depan>Hendra</nama_depan>
<nama_belakang>Kusmayadi</nama_belakang>
</nama>
<profesi>Dosen</profesi>
</orang>
Pada contoh diatas, jika kita menjalankan dokumen diatas, maka tampilan
tidak akan berbeda dengan tidak menggunakan DTD. Tampilan yang ada dapat
kita lihat seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 25 PAGE 10
Mengapa bisa demikian...? Seperti yang telah kita bahas sebelumnya, bahwa
DTD tidak mempengaruhi ke well-formed-an suatu dokumen. Sehingga
dokumen diatas dianggap dokumen yang well-formed. Namun, meski demikian,
dokumen selain memiliki sifat well-formed, juga memiliki valid atau tidak.
Dengan DTD ini kita akan mengetahui bahwa sebuah dokumen valid atau
tidak. Untuk menyatakan suatu dokumen falid atau tidaknya, kita memerlukan
alat bantu atau tools XML validation yang dapat didownload di
http://msdn.microsoft.com/xml atau http://xmlsoftware.com atau disitus
lainnya. Dalam hal ini penulis menggunakan software IEXMLTLS yang dapat
digunakan pada browser Microsoft Internet Explorer. Atau sekarang kita
sepakati saja bahwa kita menggunakan IEXMLTLS untuk validasi dokumen
XML.
Instal file tesebt dan arahkan lokasi intalnya pada drive C. selanjutnya buka
folder C:\IEXMLTLS dan klik kanan pada file msxmlval.inf kemudian pilih instal.
Lakukan hal yang sama pada file msxmlvw.inf. Jika kita ingin memvalidasi
dokumen, kita hanya dengan mengklik kanan pada space kosong pada IE dan
pilih Validated XML (IEXMLTLS hanya bisa digunakan pada Microsoft Internet
Explorer).
Deklarasi Elemen
Jika dokumen tersebut diatas dijalankan, dan kita memvalidasinya, maka
tampak seperti gambar dibawah ini :
Politeknik Telkom Praktikum Pemrograman XML
26 Document Type Definitions PAGE 10
Sekarang kita akan melihat dokumen yang tidak valid dengan mengubah
dokumen menjadi :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi)>
<!ELEMENT nama (nama_depan, nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
]>
<orang>
<nama>
<nama_depan>Hendra Kusmayadi</nama_depan>
</nama>
<profesi>Dosen</profesi>
</orang>
Jika kita menvalidasi dokumen tersebut, maka akan tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 27 PAGE 10
Pada contoh diatas, validasi menjadi error karena pada DTDnya elemen nama
harus berisi elemen nama_depan dan nama_belakang. Agar dokumen
tersebut valid, maka pada DTDnya kita dapat dengan mengganti tanda koma (,) menjadi “|” sehingga kodenya menjadi :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi)>
<!ELEMENT nama (nama_depan | nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
]>
<orang>
<nama>
<nama_depan>Hendra Kusmayadi</nama_depan>
</nama>
<profesi>Dosen</profesi>
</orang>
Politeknik Telkom Praktikum Pemrograman XML
28 Document Type Definitions PAGE 10
Jika dijalankan dokumen akan tampak seperti berikut :
Jika kita mengubah isi dokumen tersebut menjadi :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi)>
<!ELEMENT nama (nama_depan | nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
]>
<orang>
<nama>
<nama_depan>Hendra Kusmayadi</nama_depan>
</nama>
<profesi>Dosen</profesi>
<profesi>Pedagang</profesi>
</orang>
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 29 PAGE 10
Maka jika kita validasi akan error, tampak seperti berikut :
Pada dokumen diatas yang membuat validasinya gagal adalah karena elemen
profesi ditulis dua kali, sedangkan pada deklarasinya hanya sekali. Agar sebuah
elemen dapat kita tulis berulang, maka kita dapat menambahkan karakter *, +
atau ?.
Jika dokumen diatas diubah menjadi :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi*)>
<!ELEMENT nama (nama_depan | nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
]>
<orang>
Politeknik Telkom Praktikum Pemrograman XML
30 Document Type Definitions PAGE 10
<nama>
<nama_depan>Hendra Kusmayadi</nama_depan>
</nama>
<profesi>Dosen</profesi>
<profesi>Pedagang</profesi>
</orang>
Maka jika kita jalankan hasilnya adalah :
Kita juga dapat membuat file DTD pada file yang terpisah dengan dokumen
XML aslinya. Caranya denga penulisan DTDnya menjadi :
<!DOCTYPE nama_dokumen SYSTEM "lokasi_file_DTD">
Sekarang kita ubah lagi file contoh3_1.xml diatas menjadi :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”no” ?>
<!DOCTYPE orang SYSTEM “orang.dtd”>
<orang>
<nama>
<nama_depan>Hendra Kusmayadi</nama_depan>
</nama>
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 31 PAGE 10
<profesi>Dosen</profesi>
<profesi>Pedagang</profesi>
</orang>
Dan membuat dokumen baru dengan nama orang.dtd yang isinya sebagai
berikut :
<!ELEMENT orang (nama, profesi*)>
<!ELEMENT nama (nama_depan | nama_belakang)>
<!ELEMENT nama_depan (#PCDATA)>
<!ELEMENT nama_belakang (#PCDATA)>
<!ELEMENT profesi (#PCDATA)>
Jika kita jalankan dan kita validasi file contoh3_1.xml akan tampak seperti
berikut :
Jika kita lihat pada dokumen diatas, ada beberapa bagian darideklarasi elemen
adalah :
6. #PCDATA
Konten yang terkandung didalam elemen yang dimaksud adalah text.
Meskipun data yang ada dielemen tersebut berupa angka, tetap dianggap
sebagai text. Contohnya :
Politeknik Telkom Praktikum Pemrograman XML
32 Document Type Definitions PAGE 10
<!ELEMENT phone_number (#PCDATA)>
7. Elemen anak
Penspesifikasi konten sederhana adalah salah satu elemen yang harus
memiliki satu anak dari type yang sesuai. Pada kasus ini, nama anak
ditulis didalam kurung. Contohnya :
<!ELEMENT fax (phone_number)>
Maksudnya adalah elemen phone_number merupakan anak dari
elemen fax.
8. Sequence
Kita dapat menuliskan elemen anak lebih dari satu pada deklarasinya.
Dengan penulisan ini dimaksudkan untuk menuliskan elemen anak lebih
dari satu elemen. Misalnya :
<!ELEMENT name (first_name, last_name)>
9. Jumlah anak
Penulisan jumlah anak daru suatu elemen dapat kita tuliskan dengan cara
menambahkan tanda berikut pada akhir nama elemen.
Karakter Arti
+ Muncul saatu kali atau lebih. Minimal muncul satu kali
* Muncul 0 kali atau lebih
? Boleh tidak muncul, tapi jika muncul maksimal satu kali
| Fungsi atau
Contoh penggunaannya adalah sebagai berikut :
<!ELEMENT people (phone_number*)>
artinya elemen people boleh memiliki satu atau lebih elemen
phone_number atau bisa juga kosong.
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 33 PAGE 10
10. Pilihan
Terkadang pada kasus tertentu ada suatu elemen yang memiliki anak
tetapi berbeda-beda. Cara pendeklarasiannya dapat dilakukan dengan :
<!ELEMENT methodResponse (params | fault)>
penulisannya tidak hanya dibatasi dua elemen saja, tetapi kita dapat
menuliskan lebih dari itu.
Selain hal diatas, kita juga dapat mendeklarasikan elemen yang sesuai dengan :
11. Mixed Content
Dimana kita memungkinkan untuk menulsikan text dan elemen dalam
suatu elemen. Contoh :
<definition>The <term>Turing Machine</term> is an
abstract finite state automaton with infinite
memory that can be proven equivalent to any any
other finite state automaton with arbitrarily
large memory. Thus what is true for a Turing
machine is true for all equivalent machines no
matter how implemented.
</definition>
dimana deklarasi elemen adalah :
<!ELEMENT definition (#PCDATA | term)*>
12. Elemen Kosong
Elemen kosong adalah sebuah tag yang tidak memiliki elemen nilai.
Penulisannya dapat berupa :
<image source="bus.jpg" width="152" height="345"
alt="Alan Turing standing in front of bus"/>
dengan deklarasi elemennya :
<!ELEMENT image EMPTY>
Politeknik Telkom Praktikum Pemrograman XML
34 Document Type Definitions PAGE 10
13. ANY
Kita dapat mengijinkan apapun dapat berada pada suatu elemen.
Penulisan deklarasinya adalah :
<!ELEMENT page ANY>
Deklarasi Atribut
Sama seprti elemen, dokumen dikatakan valid jika dapat menyatakan semua
atribut elemen jika elemennya memiliki atribut. Sintaks penulisannya adalah
dengan ATTLIST.
Sebagai contoh, mari kita buat sebuah file baru dengan nama contoh3_2.xml.
Dan isinya adalah sebagai berikut :
<?xml version=”1.0” encoding=”UTF-8”
standalone=”yes” ?>
<!DOCTYPE orang [
<!ELEMENT orang (nama, profesi*)>
<!ELEMENT nama (#PCDATA)>
<!ATTLIST nama profesi CDATA #REQUIRED
hobi CDATA “Olahraga”
umur CDATA #IMPLIED
jenis_kelamain CDATA #FIXED “Laki-laki”
>
]>
<orang>
<nama profesi=”Dosen”>Hendra Kusmayadi</nama>
</orang>
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 35 PAGE 10
Jika kita jalankan dokumen diatas akan tampak seperti gambar berikut :
General Entity Declarations
Kita juga dapat mendeklarasikan entidas sesuai dengan yang kita inginkan.
Sebagai contoh, buatlah file dengan nama contoh3_3.xml dengan isi sebagai
berikut :
<!DOCTYPE orang [
<!ELEMENT orang (nama, email)>
<!ELEMENT nama (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ENTITY mail "[email protected]">
]>
<orang>
<nama>Hendra Kusmayadi</nama>
<email>&mail;</email>
</orang>
Jika kita jalankan maka tampilannya akan seperti gambar dibawah :
Politeknik Telkom Praktikum Pemrograman XML
36 Document Type Definitions PAGE 10
External Parsed General Entities
Selain dengan cara diatas, kita juga dapat menggunakan halaman suatu web
atau yang lainnya untuk penulsain entitas. Sebagai contoh, buatlah dile dengan
nama contoh3_4.xml dengan isinya sebagai berikut :
<!DOCTYPE orang [
<!ELEMENT orang (nama, komentar)>
<!ELEMENT nama (#PCDATA)>
<!ELEMENT komentar (#PCDATA)>
<!ENTITY cmd SYSTEM "komentar.txt">
]>
<orang>
<nama>Hendra Kusmayadi</nama>
<komentar>&cmd;</komentar>
</orang>
sebelum kita menjalankan dokumen diatas, terlebihdahulu kita membuat
sebuah file dengan nama komentar.txt dan simpan pada folder yang sama.
Selanjutnya isi file tersebut tulisan terserah saja. Dan jika dokumen diatas
dijalankan, maka hasilnya menjadi :
External Unparsed Entities and Notations
Selain itu, kita juga dapat menempatkan file bukan text dengan cara :
<!ENTITY nama_entitas SYSTEM
"Lokasi_file" NDATA tipe_file>
Dan selanjutnya silahkan docoba sendiri.
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 37 PAGE 10
Parameter Entity
Parameter entiti digunakan sebagi shortcut untuk menuliskan entiti didalan
DTD. Penulisan parameter entiti menggunakan persen (%) dan titik koma (;).
format penulisan parameter entiti adalah sebagai berikut :
<!ENTITY % nama_parameter "teks yang ingin kita
representasikan didalam entiti">
Contoh penulisannya adalah dengan :
<!ENTITY % pub "Editions Gallimard" >
<!ENTITY rights "All rights reserved" >
<!ENTITY book "La Peste: Albert Camus, © 1947
%pub;. &rights;">
Adapun maksud dari deklarasi diatas adalah string “%pub” akan diisi oleh
“Éditions Gallimard”, sehingga jika kita menuliskan &book
pada dokumen XML, maka hasilnya adalah :
La Peste: Albert Camus, © 1947 Editions Gallimard.
Conditional Inclusion
XML memberikan IGNORE derektif untuk tujuan "commenting out" sebuah
selection deklarasi. Misalnya parser akan mengabaikan deklarasi dari elemen
production_note :
<![IGNORE[
<!ELEMENT production_note (#PCDATA)>
]]>
Tujuan penulisan diatas adalah untuk menunjukan bahwa deklarasi yang
diberikan benar-benar digunakan didalam DTD. Contoh :
<![INCLUDE[
<!ELEMENT production_note (#PCDATA)>
]]>
Silahkan docoba dengan penerapan pada dokumen XML.
Politeknik Telkom Praktikum Pemrograman XML
38 Document Type Definitions PAGE 10
Contoh Two DTD
Disisilain kita dapat membuat atau menggabungkan dua dokumen XML yang
berbeda. Caranya adalah seperti contoh penulisan DTD berikut :
<!ATTLIST biography xmlns:xlink CDATA #FIXED
"http://www.w3.org/1999/xlink">
<!ELEMENT person (first_name, last_name)>
<!ATTLIST person born CDATA #IMPLIED
died CDATA #IMPLIED>
<!ELEMENT date (month, day, year)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ATTLIST emphasize xlink:type (simple) #IMPLIED
xlink:href CDATA #IMPLIED>
<!ELEMENT profession (#PCDATA)>
<!ELEMENT footnote (#PCDATA)>
<!ATTLIST footnote source CDATA #REQUIRED>
<!ELEMENT first_name (#PCDATA)>
<!ELEMENT last_name (#PCDATA)>
<!ELEMENT image EMPTY>
<!ATTLIST image source CDATA #REQUIRED
width NMTOKEN #REQUIRED
height NMTOKEN #REQUIRED
ALT CDATA #IMPLIED >
<!ENTITY % top_level "( #PCDATA | image | paragraph
| definition | person | profession | emphasize |
last_name | first_name | footnote | date )*">
<!ELEMENT paragraph %top_level; >
<!ELEMENT definition %top_level; >
<!ELEMENT emphasize %top_level; >
<!ELEMENT biography %top_level; >
Politeknik Telkom Praktikum Pemrograman XML
Document Type Definitions 39 PAGE 10
Standar Penempatan DTD
DTD dan validity merupakan hal yang sangat penting ketika kita hendak
mengganti data dengan yang lainnya. Hal ini untuk memastikan kita apakah
data yang kita kirim diterima dengan baik.
Politeknik Telkom Praktikum Pemrograman XML
40 Document Type Definitions PAGE 10
Rangkuman
1. Aplikasi XML harus memastikan bahwa dokumen yang diberikan adalah
benar-banar mematuhi aturan
2. DTD digunakan untuk mendeklarasikan semua elemen dan atribut yang
akan digunakan pada dokumen XML
3. DTD dibuat untuk memeriksa kevalid-ad sebuah dokumen XML, apakan
dokumen XML yang dibuat sudah mengacu pada DTD yang ada.
Politeknik Telkom Praktikum Pemrograman XML
Namespaces 41 PAGE 10
4 Namespaces
Overview
Namespaces merupakan penambahan suatu string pada suatu elemen.
Namespaces diimplementasikan dengan menempelkan awalan untuk setiap
elemen dan atribut. Penulisannya dengan menambahkan string tertentu pada
elemen/atribut yang kemudian dibatasi oleh titik dua ( : ) antara namespace
nama elemen/atribut. Setiap awalan adalah dipetakan ke URI oleh atribut
xmlns:prefix. URI default juga dapat diberikan untuk elemen yang tidak memiliki prefix oleh atribut xmlns. Elemen dan atribut yang melekat pada URI
yang sama merupakan berada pada namespace yang sama.
Tujuan namespaces adalah untuk membedakan antara nama elemen dan nama
atribut yang sama namun memiliki arti yang berbeda dan untuk berbagai nama
yang sama serta untuk semua grup terkait dengan elemen dan atribut dari
satu aplikasi share XML sehingga perangkat lunak dapat dengan mudah
mengenali mereka.
Tujuan
1. Mahasiswa dapat memahami maksud dan tujuan dari pembuatan
namespace
2. Mahasiswa dapat membedakan kapan harus menggunakan namespace
dan kapan tidak
3. Mahasiswa Menggunakan namespace pada kasus yang sesuai
Politeknik Telkom Praktikum Pemrograman XML
42 Namespaces PAGE 10
Kebutuhan Namespace
Seperti telah kita ketahui bersama bahwa sebuah dokumen XML memiliki
nama elemen dan atribut yang digunakan oleh aplikasi untuk memproses
dokumen XML tersebut. Namun, seperti kita ketahui bersama bahwa
penamaan tersebut dapat kita definisikan sendiri. Namun dengan demikian
ada kemungkinan suatu nama elemen yang kita gunakan memiliki nama yang
sama dengan elemen lain padahal maksudnya berbeda. Jika kita menggunakan
dokumen untuk diri kita sendiri, itu tidak jadi masalah, karena kita dapat
memberikan nama elemen tersebut berbeda. Namun jika dokumen kita
digunakan oleh bayak orang atau kita yang menggunakan dokumen orang lain,
maka ada kemungkinan hal tersebut terjadi. Dan aplikasi bisa saja salah dalam
menampilkan dokumen sehingga hasil keluaran berbeda dengan yang kita
harapkan. Jadi solusi untuk menghindari hal itu adalah dengan menambahkan
namespace. Penggunaan Namespace dengan memberikan awalan tertentu
sebagai pembeda dengan elemen lainnya dan dipisahkan tanda titik dua
dengan nama elemen.
Sintaks Namespace
Untuk kasus penggunaan elemen adalah misalnya jika kita ingin menuliskan
sebuah dokumen untuk menyimpan nama bambu, dimana bambu yang
pertama merupakan data untuk menyatakan bahwa sebuah bambu akan
digunakan untuk membuat pagar rumah dimana penulisan elemen tersebut
adalah sebagai berikut :
<bambu>
<jenis>Jawa</jenis>
<panjang>2</panjang>
</bambu>
sedangkan ada dokumen yang keduamenyatakan bahwa bambu itu adalah
sebuah merk produk dengan penulisan dokumen :
<bambu>
<jumlah>246</jumlah>
<hargasatuan>200</hargasatuan>
</bambu>
Politeknik Telkom Praktikum Pemrograman XML
Namespaces 43 PAGE 10
Jika kita menggabungkan elemen tersebut dengan penulisan seperti berikut :
<bambu>
<jenis>Jawa</jenis>
<panjang>2</panjang>
</bambu>
<bambu>
<jumlah>246</jumlah>
<hargasatuan>200</hargasatuan>
</bambu>
maka dalam pemprosesannya akan ambigu antara elemen bambu, maka
solisinya adalah dengan menggunakan namespace, sehingga penulisan dokumen
tersebut adalah :
<bahan>
<n_pertama:bambu xmlns:n_pertama='Namespace1'>
<n_pertama:jenis>Jawa</n_pertama:jenis>
<n_pertama:panjang>3m</n_pertama:panjang>
</n_pertama:bambu>
<n_kedua:bambu xmlns:n_kedua='Namespace2'>
<n_kedua:jumlah>100</n_kedua:jumlah>
<n_kedua:hargasatuan>300</n_kedua:hargasatuan>
</n_kedua:bambu>
</bahan>
simpan file tersebut dengan nama contoh4_1.xml dan jalankan. Jika dokumen
tersebut dijalankan maka hasilnya adalah sebagai berikut :
Politeknik Telkom Praktikum Pemrograman XML
44 Namespaces PAGE 10
Namespaces dan DTD
Namespace perludideklarasikan pada Document Type Definition (DTD) agar
dokumen yang kita buat menjadi falid. Pendeklarasiannya dengan menuliskan :
<prefiks:nama_elemen xmlns:prefiks=”Namespace”>
prefiks adalah awalan yang digunakan, nama_elemen merupakan nama
elemen yang akan diberi namespace karena memiliki kesamaan nama dengan
elemen lain namun berbeda maksud.
Sebagai contoh, buatlah file XML dengan nama filenya adalah contoh4_2.xml
yang isinya adalah sebagai berikut :
<!DICTYPE barang [
<!ELEMENT barang (bambu+)>
<n_pertama:bambu
xmlns:n_pertama=”http:/www.sesuatu.com/gardu”>
<n_kedua:bambu
xmlns:n_kedua=”http:/www.sesuatu.com/merk”>
]>
Politeknik Telkom Praktikum Pemrograman XML
Namespaces 45 PAGE 10
Rangkuman
1. Namespaces dibuat dengan tujuan untuk membedakan nama elemen
yang sama namun memiliki atri yang berbeda.
2. Namespaces diimplementasikan dengan menempelkan awalan untuk
setiap elemen dan atribut.
Politeknik Telkom Praktikum Pemrograman XML
46 XML pada Web PAGE 10
5 XML pada Web
Overview
XML berawal sebagai upaca untuk membawa semua kemampuan dan struktur SGML ke web dengan bentuk yang sederhana. Seperti apa yang dibayangkan para ahli, ternyata XML telah jauh melebihi apa yang dibayangkan. Sebenarnya banyak aplikasi selain XML yang digunakan di web, namun XML adalah bahasa yang masih sangat menarik untuk gunakan didalam halaman web. Karena dokumen XML harus well-formed dan parser akan menolaknya jika dokumen salah, halaman XML mungkin kurang kompatibel untuk cross-browser. Oleh karena dokumen XML
sangat terstuktur, sehingga memudahkan untuk robots parsing. Karena tag XML dan nama atribut dapat mencerminkan sifat konten, sehingga search-engine spiders dapat dengan mudah menentukan makna dari konten.
Tujuan
1. Mahasiswa Dapat mengerti XHTML
2. Mahasiswa dapt membedakan antara XHTML dengan HTML
3. Mahasiswa dapat menuliskan XHTML dengan aturan-aturan yang telah
ditetapkan
4. Mahasiswa memahamin cara kerja XHTML dalam menampilkan
dokumen
Politeknik Telkom Praktikum Pemrograman XML
XML pada Web 47 PAGE 10
XHTML
XHTML merupakan definisikan XML-compatible versi HTML, atau sebaliknya.
XHTML dapat mengubah HTML sebagai aplikasi XML. XHTML merupakan
standard dalam menyusun kode-kode HTML yang baik dan terstruktur.
Sebagian besar pengubahan dokumen HTML menjadi dokumen XHTML
adalah dengan membuat dokumen well-formed. Misalnya perubahan yang
akan dilakukan :
14. Tambahkan missing end-tag seperti </p> dan </li> jika pada dokumen tidak ada end-tag-nya.
15. Tulis kembali dokumen yang yag-nya saling timpang tindih, misalnya
<b><i>apa</b></i> menjadi <b><i>apa</i></b>
16. Letakkan tanda petik pada nilai atribut jika kita sering menggunakan nilai
atribut tanpa tanda petik. Misalnya <p align=center> menjadi <p
align="center">. 17. Tambahkan nilai pada atribut yang memiliki nilai boolean dengan
namanya sendiri. Misalnya <input type="checkbox" checked>
menjadi <input type="checkbox" checked="checked">.
18. Ganti karakter & atau < dalam data atau atribut dengan nilai-nilai
& and <. Misalnya ubah A&P menjadi A&P 19. Jadikan dokuen sebagai single root element html.
20. Ubah empty elemen. Misalnya <hr> menjadi <hr/> atau <hr></hr>
21. Tambahkan hyphens kedalam komentar. Misalnya <! this is a
comment> menjadi <!-- this is a comment -->
22. Encode kedalam UTF-8 atau UTF-16.
XHTML dibagi menjadi tiga bagian, yaitu :
23. Strict
Merupakan puncaknya standard, ini digunakan apabila kita benar-benar
menginginkan kode yang benar-benar terstruktur. Beberapa tag sudah
dihilangkan disini seperti <iframe>. Kita harus mengkombinasikan
antara XHTML dan CSS. Penulisannya adalah sebagai berikut :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
strict.dtd">
Politeknik Telkom Praktikum Pemrograman XML
48 XML pada Web PAGE 10
24. Transitional
Digunakan apabila kita tidak ingin ada file CSS
yang terlibat. Penulisannya adalah sebagai berikut :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd" >
25. Frameset
hampir sama dengan Transitional namun Frameset mengijinkan elemen
frame-related sebagai framset dan iframe. Contoh penulisannya adalah
sebagai berikut :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
frameset.dtd">
bagian diatas, dituliskan pada awal dokumen sebagai deklarasi dari dokumen
XHTML. Contoh penulisan dokumen XHTML adalah sebagai berikut :
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<title>Judul Halaman Web</title>
</head>
<body>
<p>Isi halaman Web</p>
</body>
</html>
jika dijalankan akan tampil seperti pada gambar dibawah ini :
Politeknik Telkom Praktikum Pemrograman XML
XML pada Web 49 PAGE 10
Direct Display pada browser
Dalam menampilkan sebuah dokumen pada browser, kita dapat mengambil
pengaturan tampilannya dari file lain. Hal ini disebut dengan direct display.
Contoh yang sering digunakan adalah CSS (Casecading Style Sheet). Sekarang
mari kita coba membuat dokumen css dan simpan dengan nama “css.css”,
dimana kodenya adalah sebagai berikut :
orang {
color:#FF0000;
font-family:Tahoma;
font-weight:bold;
text-decoration:underline;
}
kemudian buatlah dokumen XML yang disimpan dengan nama
“contoh5_1.xml” sebagai data yang akan ditampilkan seperti berikut :
<?xml version="1.0"?>
<?xml-stylesheet href="css.css" type="text/css"?>
<orang>
Susilawati
</orang>
Politeknik Telkom Praktikum Pemrograman XML
50 XML pada Web PAGE 10
Selanjutnya jalankan dokumen XML, maka dapat kita lihat tampilannya sebagai
berikut :
Authoring Compound Documents with Modular XHTML
Kita dapat menggabungkan dokumen XML yang telah kita buat kedalam aplikasi lainnya. Misalnya menggabungkan XHTML kedalam aplikasi, atau yang
lainnya dan dapat pula aplikasi yang kita buat kita gabungkan dengan dokumen
XHTML. Kita dapat menggunakan modul-modul yang telah ada sebelmnya.
Prospects for Improved Web-Search Methods
Resource Description Framework (RDF) dapat diartikan sebagai XML
encoding untuk model data sederhana yang partikular. Misalnya kita
menuliskan sebuah dokumen yang menyatakan bahwa W. Scott Means dan
Elliotte Rusty Harold adalah penulis buku XML in a Nutshell.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-
rdf-syntax-ns#">
<rdf:Description about="urn:isbn:0596002920">
<author>Elliotte Rusty Harold</author>
<author>W. Scott Means</author>
</rdf:Description>
</rdf:RDF>
Pada contoh diatas, nilai propertis author hanya teks saja.
Pada HTML, META tag robot memberitahukan kepada search engin dan
robot yang lainnya apakan mereka dapat mengindeks halamannya.
Penulisannya dapat dilihat pada kode berikut :
<?robots index="yes" follow="no"?>
Politeknik Telkom Praktikum Pemrograman XML
XML pada Web 51 PAGE 10
Rangkuman
1. XML merupakan bahasa yang masih sangat menarik untuk gunakan didalam halaman web
2. Penggunaan XML pada web berbentuk XHTML 3. Dokumen XHTML mendefinisikan kompetibeliti dar XML
4. Dokumen XHTML harus well-formed agar bisa ditampilkan pada
halaman browser
Politeknik Telkom Praktikum Pemrograman XML
52 XSL Transformation (XSLT) PAGE 10
6 XSL Transformations (XSLT)
Overview
XSLT merupakan bahasa pemrograman berdasar XML yang digunakan untuk
transformasi dokumen XML menjadi dokumen XML atau format lainnya.
Transformasi tidak mengubah dokumen asli, melainkan menghasilkan
dokumen baru berdasarkan isi dokumen asli. XSLT sering digunakan untuk
mengkonversi data dari satu XML schema ke schema lain, ke format XHTML,
atau format XML yang dapat diubah menjadi dokumen PDF. Dokumen XSLT
yaitu, sebuah XSLT stylesheet berisi template-rule. Setiap template memiliki
aturan dan pola tersendiri. Sebuah XLS processor akan membaca dokumen
XML dan template (dokumen XSLT). Berdasarkan instruksi yang ditemukan
program pada XSLT, maka program akan menghasilkan dokumen XML yang
baru.
Tujuan
1. Mahasiswa dapat memahami XSLT
2. Mahasiswa dapat menspesifikasikan XSLT pada dokumen XML
3. Mahasiswa dapat membuat XSLT pada dokumen XML
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 53 PAGE 10
Contoh Dokumen XML
<?xml version="1.0" ?>
<orang>
<mahasiswa>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>
Dokumen diatas disimpan kedalam file dengan nama orang.xml, dimana
dokumen diatas akan kita gunakan untuk penerapan XSLT selanjutnya. XSLT
dapat bekerja dengan dokumen yang valid maupun tidak valid asalkan well-
formed. Dokumen ini juga tidak menggunakan namespace meskipun bisa juga
dengan menggunakan namespace. XSLT hanya dapat berjalan dengan baik jika
menggunakan namespace. Tidak seperti DTD, XSLT lebih memperhatikan
namespace URIs dari pada prefiks.
xsl:stylesheet
XSLT stylesheet merupakan dokumen XML, dan umumnya harus
meggunakan deklarasi XML atau paling tidak stylesheets. Root elemen
dokumen ini adalah stylesheet atau transform. Selain itu kita juga dapat
menggunakan stylesheet atau transform. Contoh minimal dokumen XSLT :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
untuk memanggil dokumen XSL kedalam dokumen XML yang kita inginkan,
kita dapat mengginakan seperti script sebagai berikut :
Politeknik Telkom Praktikum Pemrograman XML
54 XSL Transformation (XSLT) PAGE 10
<?xml-stylesheet type="text/xsl"
href="xsl.xsl" ?>
<orang>
.......
</orang>
Contoh Stylesheet Processors
XML dokumen yang ditampilkan ke web browser memiliki xml-stylesheet
processing instruction. Contoh penggunaannya adalah sebagai berikut :
<?xml version="1.0"?>
<?xml-stylesheet type="application/xml"
href="orang.xsl"?>
<orang>
...
</orang>
pada contoh diatas, dokumen tersebut menggunakan pemprosesan intruksi
pada aplikasi XML orang.xsl.
Templates and Template Rules
Untuk mengontrol hasil outputan, kita dapat menambahkan template rule
kedalam XSLT stylesheet. Setiap template direpresentasikan dengan elemen
xsl:template. Elemen ini harus memiliki kesesuaian atribut dengan XPath pattern dan mengandung template yang di instansiasi dan output jika polanya
cocok. Namun ada sedikit terminologi trik; elemen xsl:template merupakan
template rule yang mengandung template. Elemen xsl:template bukan bukan template untuk dirinya sendiri.
Sebagai contoh, kita buat sebuah dokumen XSL dan simpan dengan nama file
xsl.xsl untuk menampilkan dokumen diatas sehingga menjadi sesuai dengan
yang diinginkan. Sintaks yang dituliskan adalah sebagai berukut :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform”
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 55 PAGE 10
<xsl:template match="orang">
sebuah tulisan
</xsl:template>
</xsl:stylesheet>
kemudian tambahkan sintaks untuk memanggil dokumen XSL tersebut pada
dokumen XML asal sehingga dokumen XML diatas menjadi :
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
<orang>
<mahasiswa>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>
Jika dokumen XML diatas dijalankan maka tampak seperti gambar berikut :
Jika kita lihat, bahwa dokumen XSL diatas memiliki elemen template yang
akan mencocokan dengan elemen orang akan dococokan dengan template
sehingga semua isi dari elemen orang akan digantikan dengan template.
Politeknik Telkom Praktikum Pemrograman XML
56 XSL Transformation (XSLT) PAGE 10
Elemen with xsl:value-of
Elemen xsl:value-of digunakan untuk mengambil nilai dari elemen. Contoh
penggunaannya adalah sebagai berikut :
buatlah dokumen XML dengan kode sederhana sebagai berikut :
<?xml version='1.0' ?>
<orang>
<mahasiswa>Susilawati</mahasiswa>
</orang>
sekarang buatlah sebuah dokumen XSL dengan kode sebagai berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="orang">
<xsl:value-of select="mahasiswa"/>
</xsl:template>
</xsl:stylesheet>
Jika kita jalankan, maka hasil yang tampil adalah nilai dari elemen mahasiswa
yaitu “Susilawati” seperti tampak pada gambar berikut :
Element xsl:apply-templates
Selanjutnya kita kan mencoba menggunakan elemen apply -templates. apply -
templates berfungsing untuk menempakan isi dari elemennya ke elemen
dokumen XML yang sesuai. Sebagai conto, buat file XSL baru edit dokumen
yang lama sehingga menjadi :
<?xml version="1.0" encoding="UTF-8"?>
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 57 PAGE 10
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>
<xsl:template match="/orang">
<html>
<head>
<title>Testing XSL pada XML</title>
</head>
<body>
<h3>Data Mahasiswa</h3>
<table border="1">
<tr><th>NIM</th><th>Nama</th></tr>
<xsl:apply-templates select="mahasiswa">
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="mahasiswa">
<tr>
<td>
<xsl:value-of select="nim"/>
</td>
<td>
<xsl:value-of select="nama"/>
</td></tr>
</xsl:template>
</xsl:stylesheet>
jika kita perhatikan pada dokumen XSL diatas, ada sebuah elemen template
yang isinya adalah dokumen HTML yang akan ditempatkan pada elemen root
orang pada dokumen XML, yaitu : <xsl:template match="/orang">
... </xsl:template>. Selanjutnya didalan template tersebut tedapat
sebuah elemen apply- templates <xsl:apply-templates
select="mahasiswa"> ... </xsl:apply-templates> yang
akan dicocokan dengan setiap elemen mahasiswa pada dokumen XML. Pada
bagian bawah, terdapat elemen <xsl:template
Politeknik Telkom Praktikum Pemrograman XML
58 XSL Transformation (XSLT) PAGE 10
match="mahasiswa"> ... </xsl:template> yang akan
dipasangkan dengan elemen mahasiswa pada elemen dokumen XSL yang
diperoleh dari pencocokan oleh elemen template-apply sebelumnya.
Sedangkan elemen value-of pada <xsl:value-of
select="nim"/> yang ada pada template tersebut berfungsi untuk
mengambil nilai dari elemen yang dimaksud, misanya select="nim",
maka nilai yang diambil adalah nilai dari elemen nama.
Jika pada bagian elemen apply-templates kita tambahkan sebuah sintak untuk
mensorting data, maka data yang akan ditampilkan terlebih dahulu disorting.
Ubah sintaksnya menjadi :
.........
<xsl:apply-templates select="mahasiswa">
<xsl:sort select="nim" />
</xsl:apply-templates>
.........
maka tada yang tampil telah tersorting menurut nim, dimana tampilannya
dapat kita lihat sebagai berikut :
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 59 PAGE 10
Built-in Pada Template Rule
Yang paling mendasar dari built-in template rule adalah menyalin nilai text dan
atribut node kedalam dokumen output. Seperti pada contoh berikut :
<xsl:template match="text( )|@*">
<xsl:value-of select="."/>
</xsl:template>
node text ( ) merupakan pencocokan untuk semua elemen. Sedangkan
@* merupakan pencocokan untuk semua atribut. Jika template diatas
dituliskan dan, maka dokumen XMLnya jika dijalankan akan seperti pada
gambar berikut :
Jika XSL yang digunakan seperti berikut :
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
hal ini akan menjamin elemen child juga akan diproses. Meskipun hasilnya
terlihat sama seperti pada gambar diatas.
Namun jika kita menggunakan XSL :
<xsl:template
match="processing-instruction()|comment( )"/>
rule ini akan mencocokan pada semua command dan pemprosesan instruksi.
Politeknik Telkom Praktikum Pemrograman XML
60 XSL Transformation (XSLT) PAGE 10
Mode
Terkadang suatu dokumen kita ingin ingin mengubahnya menjadi beberapa
dokumen. Untuk itu kita dapat menggunakan mode. Cara kerjanya adalah,
sebuah template menempati elemen yang cocok, namun pada template
tersebut kita dapat menempatkan template lagi. Penggunaannya dapat
menggunakan elemen xsl:apply-template, dimana kita menggunakan atribut
select untuk mencocokan dengan template. Contohnya dapat dilihat pada
kode dibawah ini :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>
<xsl:template match="/orang">
<xsl:apply-templates select="mahasiswa" />
</xsl:template>
<xsl:template match="mahasiswa">
Sesuatu teks
</xsl:template>
</xsl:stylesheet>
Jika kita jalankan, maka akan tampak seperti gambar berikut :
Template untuk nilai Attribute
Sebelumnya kita telah mengetahui apa yang dimaksud dengan atribut dan
kapan kita harus menggunakannya. Dalam XSL kita juga dapat memilih atribut
dan mengambil nilainya. Pada dasarnya, untuk pencocokan pada nilai atribut
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 61 PAGE 10
sama halnya dengan elemen, tetapi kita tambahkan string “@” pada awal
nama atribut tersebut. Misalnya pada contoh sebelumnya, ubahlah atau buat
file baru yang isinya sebagai berikut :
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
<orang>
<mahasiswa angkatan='2007' kelas=”XWS-01”>
<nim>1112</nim>
<nama>Sisanti</nama>
</mahasiswa>
<mahasiswa angkatan='2008' kelas=”XWS-02”>
<nim>1111</nim>
<nama>susilo</nama>
</mahasiswa>
</orang>
Selanjutnya kita akan menggunakan dokumen XSL untuk mengatur
panampilannya. Buat dokumen XSL baru dengan nama xsl2.xsl. Yang isinya
adalah sebagai berikut :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html"/>
<xsl:template match="/orang">
<html>
<head>
<title>Testing XSL pada XML</title>
</head>
<body>
<h3>Data Mahasiswa</h3>
<table border="1">
<tr>
<th>NIM</th>
<th>Nama</th>
<th>Kelas</th>
</tr>
Politeknik Telkom Praktikum Pemrograman XML
62 XSL Transformation (XSLT) PAGE 10
<xsl:apply-templates select="mahasiswa">
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="mahasiswa">
<tr>
<td>
<xsl:value-of select="nim"/>
</td>
<td>
<xsl:value-of select="nama"/>
</td>
<td>
<xsl:value-of select="@angkatan"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="@kelas"/>
</td></tr>
</xsl:template>
</xsl:stylesheet>
Jika dokumen XML diatas dijalankan, maka tampilannya akan seperti gambar
berikut :
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 63 PAGE 10
XSLT dan Namespace
Selanjutnya kita akan mecoba membuat XSL pada dokumen yang namespace
XML. Sekarang kita buat sebuah dokumen XML yang mengandung
namespace. Silahkan ketikan kode berikut ini dan simpan dengan extensi XML
:
<?xml version='1.0' ?>
<bahan>
<a:bambu xmlns:a="Namespace1">
<a:asal>Jawa</a:asal>
<a:jenis>Besar</a:jenis>
</a:bambu>
<b:bambu xmlns:b="Namespace2">
<b:jenis>belah 4</b:jenis>
<b:panjang>3</b:panjang>
</b:bambu>
</bahan>
selanjutnya mari kita buat dokumen XSLnya sebagai berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b="Namespace2">
<xsl:template match="bahan">
<xsl:value-of select="b:bambu"/>
</xsl:template>
</xsl:stylesheet>
jika kita jalankan, maka akan tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
64 XSL Transformation (XSLT) PAGE 10
Elemen XSLT
Fitur-ritur yang belum dan tidak akan kita bahas adalah :
26. Named templates
27. Numbering and sorting output elements
28. Conditional processing
29. Iteration
30. Extension elements and functions
31. Importing other stylesheets
silahkan anda cari referensi dan enggunaan untuk fitur ini.
Politeknik Telkom Praktikum Pemrograman XML
XSL Transformation (XSLT) 65 PAGE 10
Rangkuman
1. XSLT merupakan aplikasi XML untuk menspesifikasikan aturan antara
dokumen XML yang satu ditranformasikan menjadi dokumen XML
lainnya
2. XSLT mirip dengan bahasa pemprograman
3. Tujuan pembuatan XSLT adalah untuk memilih-milah elemen dokumen
yang akan dotampilkan sesuai dengan keinginan
Politeknik Telkom Praktikum Pemrograman XML
66 XPath PAGE 10
7 XPath
Overview
XPath (Extensible Path Language) bukanlah bahasa XML, namun, XPath
merupakan bahasa untuk mengalamati bagian-bagian didalam dokumen XML. Dengan menggunakan XPath, kita dapat secara langsung menunjuk alamat sebuah elemen yang akan diproses oleh aplikasi. XPath digunakan bersamaan dengan XSLT dimana query atau sintaks XPath ini ditulis didalam bagian XLST untuk menampilkan data yang sesuai.
Expresi XPath dapat direpresentasikan menggunakan angka, sting ataupun boolean. Hal ini memungkinkan XSLT stylesheets untuk melakkan fungsi aritmatik sederhana untuk keperluan penomoran, angka cross-referencing, tabel dan equation. Dengan string manipulation pada XPath memungkinkan XSLT dapat memproses bilai elemen yang ada, misalnya menambahkan atau mengalikan dengan sesuati pada dua digit terahit tahun, dsb
Tujuan
1. Mahasiswa dapt memahami arti XPath
2. Mahasiswa dapat mengetahui semua bagian-bagian XPath
3. Mahasiswa dapat membuat XPath pada XSLT
Politeknik Telkom Praktikum Pemrograman XML
XPath 67 PAGE 10
Struktur Dokumen XML
Struktur dokumen XML berbentuk tree yang terdiri dari node-node, dimana
masing-masing node dapat berisi beberapa node lainnya. Terdapat satu
elemen root dimana elemen tadi berisi semua elemen lainnya. Struktur ini
mirip dengan struktur penyimpanan data pada hardisk komputer, dimana
node-node tersebut diibaratkan dengan folder dimana masing-masing folder
dapat berisi folder lain. Dalam hal ini, XPath merupakan bahasa untuk memilih
node-node tersebut untuk mengarahkan pencarian data pada data yang dituju.
Dari perspektif XPath, ada tujuh jenis node :
32. The root node
33. Element nodes
34. Text nodes
35. Attribute nodes
36. Comment nodes
37. Processing-instruction nodes
38. Namespace nodes
Satuhal yang perlu diperhatikan dalam halini adalah struktur atau konstruksi
yang tidak termasuk adalah : CDATA section, entity references, dan deklarasi
tipe dokumen. XPath akan beroperasi pada dokumen XML setelah semua
item telah digabungkan ke dalam dokumen.
Location Paths
Location path akan mengidentifikasi satu set node dalam dokumen, node ini
dapat berisi satu node atau lebih mungkin saja kosong. Elemen node ini dapat
berisi : node atribut , node nama, node text, node komentar, node instruksi
pemrosesan, node root, atau kompbinasinya.
Elemen root merupakan elemen paling luar dari setiap dokumen. Elemen ini
dapat dikatakan juga sebagai induk dari semua dokumen yang ada. Setiap
dokumen XML pasti memiliki satu elemen root. Untuk mengrahkan kita
kepada elemen root, kita dapat mengaksesnya dengan menggunakan perintah
: slash ( / ) yang menunjukan posisi absolut. Sebagai contoh, kita dapat
menggunakan dokumen XML sebagai berikut, dab buatlah dokumen tersebut
dan simpan menjadi contoh7_1.xml :
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl" ?>
Politeknik Telkom Praktikum Pemrograman XML
68 XPath PAGE 10
<orang>
<!--Data Mahasiswa Pertama-->
<mahasiswa angkatan='2007' kelas=”XWS-01”>
<nim>1112</nim>
<nama hobi='Membaca'>Sisanti</nama>
<teman>
<nim>1113</nim>
<nama>Juliana</nama>
</teman>
</mahasiswa>
<!--Data Mahasiswa Kedua-->
<mahasiswa angkatan='2008' kelas=”XWS-02”>
<nim>1111</nim>
<nama>susilo</nama>
<teman>
<nim>1114</nim>
<nama hobi='Olahraga'>Julianto</nama>
</teman>
</mahasiswa>
</orang>
Sebagai contoh XSLT template rule menggunakan pola XPath slash untuk mencocokan entri input dokumen tree dengan dan menuliskannya didalam
dokumen html.
<xsl:template match="/">
<html><xsl:apply-templates/></html>
</xsl:template>
jika kita jalankan dokumen XML diatas, maka tampilannnya akan seperti pada
gambar :
Politeknik Telkom Praktikum Pemrograman XML
XPath 69 PAGE 10
Artinya adalah kita menempatkan template tersebut pada elemen root.
Lokasi path selanjutnya adalah nama elemen single. Path ini akan memilih
semua elemen anak dari konteks node denga spesifikasi nama yang sama.
Misalnya jika kita ingin mengunjungi elemen nama, maka kita dapat
memanggilnya dengan /orang/mahasiswa/nama. Pada bab sebelumnya
sebenarnya kita telah membuat dokumen XSL dengan menerapkan XPath.
Namun itu hanya sekilas. Sekarang kita akan mempelajarinya secara lebih
mendalam. Buatlah sebuah file XSL dengan kode
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<xsl:value-of select="/orang/mahasiswa/nama"/>
</xsl:template>
</xsl:stylesheet>
Jika kita jalankan dokumen XML diatas, maka tampilannya akan tampak
seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
70 XPath PAGE 10
Dari kode diatas, maksudnya adalah template di-match-kan dengan elemen
orang pada dokumen XML dan isi dari template tersebut adalah hasil select
dari elemen nama dimana posisinya adalah /orang/mahasiswa/nama pada bagian pertama.
Kita juga dapat menggunakan pemilihan lokasi dengan menggunakan double
slash (//) dimana ini berfungsi untuk memilih seluruh elemen yang dimaksud
tampa memperhatikan kedalamannya. Misalnya kita ingin memilih semua
elemen nama didalam dokumen, maka tuliskan XPath-nya menjadi //nama.
Misalnya dengan XSL seperti berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<xsl:apply-templates select="//nama"/>
</xsl:template>
</xsl:stylesheet>
Jika dijalankan akan tampil seperti pada gambar berikut :
Politeknik Telkom Praktikum Pemrograman XML
XPath 71 PAGE 10
Selain itu, kita juga bisa menggunakan karakter bintang ( * ) untuk menuju ke
lokasi elemen apapun. Kita juga bisa mengkombinasikan * dengan XPath yang
lain. Misalnya dengan menggunakan /*/*/nama. Artinya, kita memilih elemen
nama yang berada pada kedalaman 2 hirarki dari elemen root. Contoh
penggunaannya adala sebagai berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<xsl:apply-templates select="/*/*/nama"/>
</xsl:template>
</xsl:stylesheet>
dengan menggunakan karakter “@”, kita juga bisa memilih atribut-atribut
yang ada pada sebuah elemen. Misalnya kita ingin memilih semua elemen
nama yang memiliki atribut hobi, maka penulisanny adalah : //nama[@hobi]
sehingga sintaks XSLnya adalah sebagai berikut :
<xsl:template match="/orang">
<xsl:apply-templates select="//nama[@hobi]"/>
</xsl:template>
selain itu, kita juga dapat memilih elemen yang yang nilai atributnya tertentu
dengan menggunakan //nama[@hobi='Olahraga']. Jika dituliskan, maka
kodenya seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
72 XPath PAGE 10
<xsl:template match="/orang">
<xsl:apply-templates
select="//nama[@hobi='Olahraga']"/>
</xsl:template>
Kita juga dapat menggunakan string garis vertikal ( | ) untuk memilih lebih dari
satu eleme. Misalnya kita ingin memilih elemen /orang/mahasiswa/nama dan
nim dimanapun posisinya, maka dapat kiga tuliskan dengan
/orang/mahasiswa/nama | //nim sehingga kode XSLnya adalah sebagai berikut :
<xsl:template match="/orang">
<xsl:apply-templates
select="/orang/mahasiswa/nama | //nim"/>
</xsl:template>
Jika menjalankan sintaks diatas, maka hasilnya adalah sebagai berikut :
Kita juga dapat menggunakan tanda double period ( .. ) untuk keluar dari
elemen asal menuju elemen induk. Misalnya pada sintaks berikut :
<xsl:template match="/orang/mahasiswa">
<xsl:apply-templates
select="../mahasiswa/teman/nama"/>
</xsl:template>
Politeknik Telkom Praktikum Pemrograman XML
XPath 73 PAGE 10
Maksud sintaks diatas adalah kita akan menampilkan nama yang ada pada
lokasi “/orang/mahasiswa/teman/nama”, namun template yang akan
ditempati adalah elemen “/orang/mahasiswa” sehingga posisi kita saat itu berada didalam elemen mahasiswa. Saat kita memilih nilainya, kita keluar
terlebih dahulu dari elemen mahasiswa dengan string “..”, namun kita masuk
kembali kedalamannya hingga ke elemen nim. Jika kita jalankan dokumen XML
tersebut, maka tampilannya dapat kita lihat seperti pada gambar berikut :
kita juga dapat menggunakan comment(), text(). comment() Digunakan untuk menempatkan template pada komentar. Perhatikan script
dibawah :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="comment()">
Sesuatu Teks
</xsl:template>
</xsl:stylesheet>
Politeknik Telkom Praktikum Pemrograman XML
74 XPath PAGE 10
Jika kita tampilkan, maka terlihat seperti pada gambar berikut dibawah ini :
Sedangkan text() digunakan memilih teks atau isi dari elemen. Contoh
penggunaan nya adalah sebagai berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates
select="/orang/mahasiswa/nama/text()"/>
</xsl:template>
</xsl:stylesheet>
Politeknik Telkom Praktikum Pemrograman XML
XPath 75 PAGE 10
Jika dijalankan, maka hasil tampilannnya dapat kita lihat seperti berikut :
Menggabungkan Location Part
Penggabungan path berguna untuk memilih elemen yang berada didalam
elemen lain atau atribut yang berada pada elemen lain atau lebih jauh berada
didalam elemen lain. Misalnya kita telah mengenal xpath //nama, /nama,
@kelas dan sebagainya. Dalam penggabungannya bisa saja kita gunakan seperti
berikut :
//mahasiswa/nama
untuk memilih semua elemen nama yang berada didalam elemen mahasiswa
dimana elemen mahasiswanya berada didalam elemen apapun.
//mahasiswa/@angkatan
untuk memilih atribut angkatan yang berada didalam semua elemen
mahasiswa.
Untuk prakteknya kita bahas pada sebelumnya.
Predikat
Kita dapat memilih elemen yang sesuai dengan yang kita inginkan. Kita dapat
menggunakan ekspresi <, >, <=, >= dan !=. Misalnya kita ingin memilih
Politeknik Telkom Praktikum Pemrograman XML
76 XPath PAGE 10
elemen mahasiswa yang angkatannya lebih dari 2007, maka penulisanhya
seperti berikut :
...
<xsl:apply-templates
select="/mahasiswa[@angkatan>=2007]"/>
...
Unabbreviated Location Paths
Unablbreviated location path merupakan penulisan lain untuk path.
Misalnya untuk penulisan xpath :
people/person/@id
maka penulisannya menjadi :
child::people/child::person/attribute::id
General XPath Expressions
Layaknya bahasa pemprograman, Pada XPath kita juga dapat memberikan
expresi aritmatik, XPath juga dapat mengambalikan nilai number, boolean,
dan string.
XPath menyediakan lima operator aritmatika dasar yaitu :
+ Addition
- Subtraction
* Multiplication
div Division
mod Taking the
remainder
Contoh : <xsl:value-of select="6*7"/>, dalam template XSLT akan
menghasilkan nilai 42. contohnya mari kita buat file XSL yang akan
Politeknik Telkom Praktikum Pemrograman XML
XPath 77 PAGE 10
menambahkan angkatan menjadi tahun lulus, asumsi bahwa mahasiswa akan
lulus tepat tiga tahun. Sintaksnya adalah sebagai berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<xsl:apply-templates select="mahasiswa" />
</xsl:template>
<xsl:template match="mahasiswa">
<xsl:value-of
select="/orang/mahasiswa/@angkatan + 3" />
</xsl:template>
</xsl:stylesheet>
kita juga dapat membuat XPath dengan ekpresi boolean. Perhatikan Contoh
berikut :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/orang">
<html><table border='1'>
<xsl:apply-templates select='mahasiswa'/>
</table></html>
</xsl:template>
<xsl:template match="mahasiswa">
<xsl:if test="nim='1111' or nim='1112'">
<tr><td><xsl:value-of
select="nama"/></td></tr>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Jika dokumen tersebut dijalankan, maka tampilannya akan tampak seperti
berikut :
Politeknik Telkom Praktikum Pemrograman XML
78 XPath PAGE 10
Fungsi XPath
Terdapat beberapa fungsi XPath yang bisa digunakan dalam mengelola
dokumen. Misalnya kita ingin memilih elemen ke-n pada dokumen, maka kita
dapat menggunakan sintaks //nama_elemen[n] (n = elemen ke n). Contohnya kita memilih elemen pertama mahasiswa maka skriptnya adalah :
/orang/mahasiswa[1]. atau kita juga dapat menggunakan fungsi
position(), yaitu dengan sintaks //nama_elemen[position()=n]
sehingga penulisannya sintaksnya menjadi :
/orang/mahasiswa[position()=1]. Contoh lain, kita juga bisa memilih elemen yang mengandung tepat dua elemen lain, maka sintaksnya
adalah //*[count(*)=2].
Politeknik Telkom Praktikum Pemrograman XML
XPath 79 PAGE 10
Rangkuman
1. XPath merupakan bahasa untuk mengalamati bagian-bagian didalam dokumen XML
2. struktur XPath mirip dengan hirarki direktori pada hardisk 3. Untuk mengarahkan kita pada data tertentu, kita dapat memanggilnya
dengan menggunakan pemanggilan mirip dengan direktori folter pada
hardisk.
4. XPath dijalankan dengan menggunakan XSLT.
Politeknik Telkom Praktikum Pemrograman XML
80 XLinks PAGE 10
8 XLinks
Overview
XML Linking Language (XLink) merupakan atribut yang berbasi sistaks untuk
melampirkan link dokumen XML. Dengan menggunakan XLink dapat
memungkinkan user untuk menambahkan hyperlinking kesuatu dokumen.
XLink sama halnya dengan link pada HTML dengan elemen A. Bedanya, pada
HTML hanya bisa mengarah pada satu dokumen, sedangkkan untuk XLink kita
bisa mengarahkan kelebih dari satu dokumen.
Tujuan
1. Mahasiswa dapat mengerti yang dimaksud dengan XLink
2. Mahasiswa dapat membedakan XLink pada XML dan tag A pada HTML
3. Mahasiswa dapat memahami struktur serta atrubut yang ada pada XLink
4. Mahasiswa dapat menggunakan XLink pada Dokumen XML.
Politeknik Telkom Praktikum Pemrograman XML
XLinks 81 PAGE 10
Simple Links
Simple link didefinisikan dengan koneksi atau hubungan secara one-way antara
dua resource. Hubungan ini akan langsung ditampilkan pada halaman browser.
Contoh nya adalah buat dokumen XML dengan nama contoh8_1.xml dimana
kodenya adalah sebagai berikut :
<mahasiswa>
<nama>Andi Santoso</nama>
<nim>12442</nim>
<hoby>Olah Raga</hoby>
<kelas>XWS-02</kelas>
</mahasiswa>
Selanjutnya buat sebuah dokumen XML lagi dengan nama contoh8_2.xml
dimana kodenya adalah sebagai berikut :
<mahasiswa xmlns:xlink=
"http://www.w3.org/1999/xlink"
xlink:type = "simple" xlink:href =
"contoh8_1.xml">
<nama>Andi Santoso</nama>
<nim>12442</nim>
</mahasiswa>
Selanjutnya, jalankan dokumen yang kedua, maka tampilannya akan seperti
berikut :
Politeknik Telkom Praktikum Pemrograman XML
82 XLinks PAGE 10
Selanjutnya, pada dokumen contoh kedua, klik pada salah satu elemen, maka
setelah kita klik-kan, maka halaman browser akan mengarah ke dokumen
pertama seperti terlihat pada gambar berikut :
Link Behavior
Kita juga dapat mengarahkan XLink kesebuah gambar, misalnya :
<image xmlns:xlink=
"http://www.w3.org/1999/xlink"
width="152" height="345" xlink:type="simple"
xlink:href="Water lilies.jpg" />
Jika kita menjalankan dokumen diatas, maka tampilannya seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
XLinks 83 PAGE 10
Kita juga dapat mengisikan atribut seperti berikut xlink:show
dengan kemungkinan nilai atribut :
39. new
Membuka wondow baru dan menampilkan kontent link URI (source
target) pada window tersebut.
40. replace
Menampilkan resource target pada window awal dan menggantikan
dokumen awal
41. embed
menampilkan resource target didalam dokumen awal pada lokasi link
42. other
43. none
Politeknik Telkom Praktikum Pemrograman XML
84 XLinks PAGE 10
Contohnya :
<mahasiswa xmlns:xlink=
"http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:show='new'
xlink:href="contoh8_1.xml">
<nama>Andi Santoso</nama>
<nim>12442</nim>
</mahasiswa>
Dapat kita lihat saat diklik, dokumen target akan ditampilkan pada
window/tab baru :
Kita juga dapat mengisikan atribut seperti berikut xlink:actuate dengan
kemungkinan nilai atribut :
Politeknik Telkom Praktikum Pemrograman XML
XLinks 85 PAGE 10
44. onLoad
Link harus diikuti pada saat aplikasi baru dijalankan.
45. OnRequest
Link yang harus diikuti bila pengguna meminta rekues.
46. Other
Ketika mengikuti link ditentukan oleh markup lain dalam dokumen yang
tidak ditentukan oleh XLink.
47. None
Tidak ada rincian mengenai kapan atau apakah akan mengikuti link ini.
Contohnya :
<mahasiswa xmlns:xlink=
"http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:actuate='onLoad'
xlink:href="contoh8_1.xml">
<nama>Andi Santoso</nama>
<nim>12442</nim>
</mahasiswa>
Dapat kita lihat saat kita jalankan dokumen tersebut, maka halaman akan
langsung mengarah pada dokumen yang kita inginkan.
Link Semantics
Merupakan sebuah link yang menghubungkan antara dua buah resource
dimana resourcenya dapat berupa dokumen XML atau bukan. Contoh
penggunaannya adalah sebagai berikut :
<novel xlink:type="simple"
xlink:href="ftp://archive.org/pub/etext/etext93/wizo
z10.txt"
xlink:title= "The complete text of the novel from
Project Gutenberg"
xlink:role="http://promo.net/pg/" >
<title>The Wonderful Wizard of Oz</title>
<author>L. Frank Baum</author>
<year>1900</year>
</novel>
Politeknik Telkom Praktikum Pemrograman XML
86 XLinks PAGE 10
Extended Links
Extended Link ditulsikan dengan :
<novel xlink:type="extended">
<title>The Wonderful Wizard of Oz</title>
<author>L. Frank Baum</author>
<year>1900</year>
</novel>
Extended Link dapat mendeskripsikan kumpulan resource dan kumpulan path
antara resource berbeda dengan simple link yang hanya mendeskripsikan arah
hubungan antara dokumen dengan remote resource.
Local resource
Kita dapat mendeskripsikan link yang akan menuju remote resource pada
elemen lokal. Contohnya adalah sebagai berikut :
<nama xlink:type="resource">Santoso</nama>
DTD untuk XLink
Semua link yang ada didalam dokumen dapat kita deklarasikan didalam DTD
sama seperti atribut yang lain. Kita juga dapat menggunakan #FIXED untuk
mendeklarasikannya. Contoh berikut adalah :
<!ELEMENT mahasiswa (nim, nama, kelas)>
<!ATTLIST mahasiswa
xmlns:xlink CDATA #FIXED
'http://www.w3.org/1999/xlink'
xlink:type #FIXED 'simple'
xlink:href CDATA #REQUIRED>
<!ELEMENT nim (#PCDATA)>
<!ELEMENT nama (#PCDATA)>
<!ELEMENT kelas (#PCDATA)>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 87 PAGE 10
contoh penggunaan deklarasi tersebut pada dokumen adalah sebagai berikut :
<mahasiswa xlink:href = "urn:isbn:0688069444">
<nim>11132</nim>
<nama>Johan Jonata</nama>
<kelas>XWS-01</kelas>
</novel>
Politeknik Telkom Praktikum Pemrograman XML
88 XLinks PAGE 10
Rangkuman
1. XLink merupakan atribut yang berbasi sistaks untuk melampirkan link
dokumen XML yang memungkinkan user untuk menambahkan
hyperlinking kesuatu dokumen.
2. XLink dapat berarti tag a pada HTML yang dapat menampilkan resource
tujuan pada halaman browser
Politeknik Telkom Praktikum Pemrograman XML
XLinks 89 PAGE 10
9 XPointer
Overview
XPointer digunakan untuk mengidentifikasi lokasi didalam dokumen XML.
Sebuah Xpointer ditambahkan untuk mengakhiri URI sebagai identifikasi bagian-bagian untuk mengidikasikan keterangan-keterangan masing-masin
bagian pada sebuah dokumen XML. Sintaks XPointer ditulis pada bagian sintaks XPath yang digunakan pada XSLT. Untuk tipe data XPath yang utama seperti Boolean, node-set, number, dan string, XPointer menambahkan point dan batas karena fungsi tersebut membutuhkannya untuk bekerja pada tipe tersebut.
Tujuan
1. Mahasiswa dapat memahami XPointer
2. Mahasiswa dapat menjelaskan struktur yang ada dalam XPointer
3. Mahasiswa dapat membuat XPointer dalam dokumen XML
Politeknik Telkom Praktikum Pemrograman XML
90 XLinks PAGE 10
XPointers pada URL
Penulisan XPointer diasanya seletlah alamat URL yang dipisahkan dengan
tanda shap (#). URL merupakan identifikasi sebuah dokumen biasanya
penulisannya dengan : http://java.sun.com:80/products/jndi/index.html. Pada skema tersebut, http menunjukan aplikasi protokol protokol yang digunakan sebagai penyampaian dokumen. sedangkan java.sun.com:80 menunjukan alamat asal atau darimana dokumen tersebut diambil dimana angka 80 menandakan bahwa data yang diambil dilewatkan melalui port 80, port ini biasanya dapat diakses secara bebas oleh siapapun, namun terkadang penyedia juga dapat melewatkan melalui port lain dan akan
memberikan autektifikasi username dan password untuk mengaksesnya. Pada bagian /products/jndi/index.html menunjukan lokasi file tersebut disimpan pada server. File yang akan dikirim adalah index.html yag tersimpan pada folder /products/jndi pada direktori server.
Selain penulisan seperti diatas, kita juga dapat menandai bagian-bagian
tertentu pada dokumen, dimana dokumen tersebut sebelumnya sudah terbagi sesuai dengan kriteria tertentu. Untuk mengaksesnya kita dapat menggunakan tanda sharp ( # ). misalnya kita ingin mengarahkan pada dokumen seperti contoh diatas, tetapi kita ingin langsung mengarahkan halaman tersebut bukan pada awal dokumen, namun pada bagian-bagian tertentu. Misalnya kita langsung ingin mengarah pada bagian download.
URL yang dituliskan untuk melakukan hal tersebut adalah : http://java.sun.com:80/products/jndi/index.html#download. Ketika browser menampilkan halaman dokumen tersebut, browser akan mencari nama penanda bagian dengan nama download pada dokumen tersebut yang ditulis dengan sintaks :
<a name="download"></a>
Contoh untuk pointer adal sebagai berikut : buatlah dokumen HTML dengan kode sebagai berikut :
<html>
<head>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 91 PAGE 10
</head>
<body>
<a name='top'><h2>Judul Dokumennya</h2></a>
<hr/>
isi dokumen baris 1<br/>
isi dokumen baris 2<br/>
isi dokumen baris 3<br/>
isi dokumen baris 4<br/>
isi dokumen baris 5<br/>
...
isi dokumen baris 17<br/>
isi dokumen baris 18<br/>
isi dokumen baris 19<br/>
isi dokumen baris 20<br/>
<a href='#top'>kembali keatas</a>
</body>
</html>
jika kita menjalankan dokumen diatas, maka tampak seperti berikut :
Politeknik Telkom Praktikum Pemrograman XML
92 XLinks PAGE 10
jika kita mengklik link “kembali keatas”, maka halaman browser akan segera menscrol langsung ke bagian atas pada pointer yang diberi nama “top”.
Pada XML, kita dapat menambahkan setelah tanda shrap sintaks berikut sesuai dengan kebutuhan.
xpointer(/)
xpointer(//first_name)
xpointer(id('sec-intro'))
xpointer(/people/person/name/first_name/text( ))
xpointer(//middle_initial[position(
)=1]/../first_name)
xpointer(//profession[.="physicist"])
xpointer(/child::people/child::person[@index<4000
])
xpointer(/child::people/child::person/attribute::
id)
Penulisan pada XPointer kita menggunakan XPath untuk menuju kesatu lokasi tertentu. Namun, dalam penerapannya ini agak sulit dilakukan. Sehingga dalam bab ini kita hanya sekedar memahaminya saja.
Politeknik Telkom Praktikum Pemrograman XML
XLinks 93 PAGE 10
Penulisan XPointer pada link sama halnya dengan pada URL, intnya setelah sebuah URL, kita tambahkan XPointer. Hanya saja, link merupakan penulisan dari URL yang terdapat bisa pada dokumen itu sendiri atau dokumen lain. Contoh penulisannya :
http://www.cafeconleche.org/people.xml#xpointer(/
/name[position( )=1])
namun, jika XPointer menggunakan karakter yang tidak dibolehkan penulisan URI didalam XML, misalnya tanda “<”, atau non-ASCII seperti
é maka harus dijadikan heksadesimal sebagaimana telah ditentukan sebelum URI XPointer terpasang. Dengan kata lain, setiap karakter tersebut dapat ditulis dengan tanda persen ( % ) yang diikuti nilai heksadesimal masing-masing karakter UTF-8 daru unicode. Misalnya tanda “<” dapat ditulis dengan %3C, tanda petik dua ( “ ) akan ditulis dengan %22, é dapat dutuliskan dengan %C3%A9 dan sebagainya.
XPointers dapat memberikan sejumlah ekstensi yang cocok untuk XPath.
Misalnya bare name. Bare name pada XPointer sama dengan nama kerangka pada HTML, yaitu bare name XPointer mengidentifikasi elemen dengan
namanya sendiri. Untuk membuat link ke salah satu elemen dengan sebuah
bare name, tambahkan bagian pemisah # untuk URL yang diikuti oleh ID dari
elemen yang akan dihubungkan. Misalnya link URL
http://www.w3.org/TR/1999/REC-xpath-19991116.xml#NT-AbsoluteLocationPath
ke-elemen XPath pada atribut tipe ID dengan nilai NT-AbsoluteLocationPath.
Child Sequences
XPointer dapat memilih elemen dengan posisi relatif untuk elemen yang
sejajar. Contohnya xpointer(/child::*[position() =
1]/child::*[ position( ) = 2]/child::*[position( ) =
3]) yang digunakan untuk memilih tiga elemen child pada elemen child kedua
dari elemen root. XPointer memungkinkan kita untuk mengyingkat siktaks
diatas dengan menyatakan jumlah elemen child yang dipisahkan oleh slash ( / )
dan hal ini disebut dengan child sequence. Misalnya kita dapat menuliskannya
menjadi 1/2/3. Namun child sequence tidak boleh berada pada kurung
xpointer( ).
Politeknik Telkom Praktikum Pemrograman XML
94 XLinks PAGE 10
Namespace
Pada XPointer kita juga dapat menggunakan namespace. Jika kita
memanggilnya maka dapat kita tuliskan dengan sintaks sesuai dengan lokasi
pada namespacenya. Contohnya pada dokumen XML yang telah kita bahas
(bambu) sebelumnya. Kita dapat menuliskannya dengan :
xmlns(b:=”Namespace2”) xpointer(//b:jenis)
Points
Terkadang kita ingin megarah pada yang sesuatu yang tidak ada nodenya,
misalnya ingin ke paragran ke tiga dari teks atau selainnya. XPointer
menambahkan points dan ranges pada sintaks XPath untuk membuat hal
tersebut mungkin. Point merupakan posisi sebelum, setelah atau diantara tag,
komentar, pemprosesan instruksi, atau karakter pada #PCDATA. Contoh
penggunaan pada dokumen XML berikut :
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" value="novel.css"?>
<!--You may recognize this from the last chapter-->
<novel copyright="public domain">
<title>The Wonderful Wizard of Oz</title>
<author>L. Frank Baum</author>
<year>1900</year>
</novel>
Ada delapan poin elemen novel diatas yaitu nomor 0-7, satu dekan setelah
dan satu dekat sebelum setiap tag.
XPointer menambahkan dua fungsi untuk hal tersebut yang memudahkan
kita untuk memilih poin pertama dan terakhir dalam node yaitu start-point( ) and end-point( ). misalnya kita ingin mengidentifikasi point pertama elemen title, yaitu point antara node title dan teks nodenya. xpointer(start-point(//title))
selain itu XPointer berikut mengindikasi sebelum tag </author> :
xpointer(end-point(//author))
Politeknik Telkom Praktikum Pemrograman XML
XLinks 95 PAGE 10
Ranges
Range merupakan jangkauan parsing karakter data antara dua poin. Fungsi
yang ada pada XPointer untuk range adalah :
48. Fungsi range( )
fungsi range( ) mengembalikan batasan antara start-point sebelum batasan lokasi sampai end-point setelah batasan lokasi.
49. Fungsi range-inside( ) Untuk setiap elemen node akan sama sebagai batasan yang
dikembalikan oleh range( ).
50. Fungsi range-to( ) Mengambil sebuah lokasi yang harus mengembalikan tepat satu lokasi. Start-points dari konteks node merupakan start-points yang akan dikembalikan
51. Fungsi string-range( ) mengambil argumen sebagai sebuah ekspresi XPath dan
mengidentifikasi lokasi dan substring dan mencocokkan terhadap nilai string XPath pada setiap lokasi
52. Relative XPointers Dapat digunakan pada dirinya sendiri tanpa harus menggunakan URL eksplisit.
53. Fungsi Here( ) Hanya digunakan pada dokumen itu sendiri dan merujuk pada node
yang mengandung XPointer.
54. Fungsi Origin( ) digunakan ketika dokumen link out-of-line dan mengarah pada node asal.
Politeknik Telkom Praktikum Pemrograman XML
96 XLinks PAGE 10
Rangkuman
1. XPointer digunakan untuk mengidentifikasi lokasi didalam dokumen
XML
2. XPointer dapat digunakan pada URL dan link
3. XPointer dibuat untuk menandai gaiang-bagian yang ada didalam
dokumen XML dan semua sintaksnya dapat langsung mengarahkan
penampilah pada lokasi yang diinginkan.
4. Selain pada bagian penanda, XPointer juga dapat menandai sesuatu
didalam elemen berdasarkan tag, komentar dan yang lainnya
Politeknik Telkom Praktikum Pemrograman XML
XLinks 97 PAGE 10
10 XML Schemas
Overview
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.
Tujuan
1. Mahasiswa dapat memahami penggunaan schema
2. Mahasiswa dapat menggunakan schema pada dokumen XML
3. Mahasiswa dapat membedakan antara schema dan DTD
Politeknik Telkom Praktikum Pemrograman XML
98 XLinks PAGE 10
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>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 99 PAGE 10
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
:
Politeknik Telkom Praktikum Pemrograman XML
100 XLinks PAGE 10
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:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation xml:lang="en-us">
Simple schema example from O'Reilly's
<a
href="http://www.oreilly.com/catalog/xmlnut">XML
in a Nutshell.</a>
Copyright 2002 O'Reilly & Associates
</xs:documentation>
</xs:annotation>
<xs:element name="fullName" type="xs:string"/>
</xs:schema>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 101 PAGE 10
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">
Politeknik Telkom Praktikum Pemrograman XML
102 XLinks PAGE 10
<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 :
Politeknik Telkom Praktikum Pemrograman XML
XLinks 103 PAGE 10
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>
Politeknik Telkom Praktikum Pemrograman XML
104 XLinks PAGE 10
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>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 105 PAGE 10
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"/>
Politeknik Telkom Praktikum Pemrograman XML
106 XLinks PAGE 10
</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>
Politeknik Telkom Praktikum Pemrograman XML
XLinks 107 PAGE 10
Rangkuman
1. Pada dasarnya kegunaan skema adalah untuk melengkapi kekurangan-
kekurangan yang ada pada DTD.
2. Skema dapat menjelaskan complex restrictions pada elemen dan atribut
bahkan Beberapa skema dapat dikombinasikan menjadi dokumen yang
menggunakan beberapa kosakata XML
3. Sebuah dokumen XML yang dideskripsikan oleh skema disebut dengan
instance document.
Politeknik Telkom Praktikum Pemrograman XML
108 Praktikum DOM PAGE 10
11 PRAKTIKUM DOM
Overview
Bab ini menunjukkan bagaimana mengakses dokumen XML dengan DOM.
Tujuan
Menggunakan DOM untuk :
1. menampilkan data dokumen XML
2. mengisi dokumen XML
3. mencari data dari XML
4. mengganti data XML
5. menghapus data XML
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 109 PAGE 10
11.1 Menampilkan data XML
Diketahui file product.xml berikut
<PRODUCTDETAILS>
<PRODUCT>
<PRODID> P001 </PRODID>
<PRODNAME> Beras </PRODNAME>
<PRICE> 5000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P002 </PRODID>
<PRODNAME> Jagung </PRODNAME>
<PRICE> 4000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P003 </PRODID>
<PRODNAME> Kedelai </PRODNAME>
<PRICE> 4500 </PRICE>
</PRODUCT>
</PRODUCTDETAILS>
Ditampilkan dengan Mozilla, product.xml akan nampak sebagai berikut:
Bagaimana menampilkannya menggunakan JavaScript?
Politeknik Telkom Praktikum Pemrograman XML
110 Praktikum DOM PAGE 10
Kode berikut dapat digunakan untuk menampilkan isi file product.xml.
Ketik dan simpan dengan nama TampilProduk.html.
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function Navigate()
{
var xmldoc=new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.async=false;
xmldoc.load("product.xml");
if (xmldoc.readyState == 4 && xmldoc.parseError.errorCode==0)
{
alert(xmldoc.xml);
}
else
{
alert("Load XML belum berhasil. Periksa tag-tagnya.");
}
}
</SCRIPT>
</HEAD>
<BODY onload="javascript:Navigate()">
</BODY>
</HTML>
Perintah paling penting pada program di atas adalah alert(xmldoc.xml). Alert
adalah perintah JavaScript untuk memberi pesan, xmldoc.xml berarti
mengambil property xml dari dokumen DOM. Variabel xmldoc digunakan
untuk menyimpan msxml parser.
Yakinkan file product.xml ada dalam folder yang sama dengan file TampilProduct.html. Yakinkan juga file msxml4.dll dan msxml4r.dll
ada di system32-nya Windows dan telah terdaftar di registry. (Jika belum
yakin, berikan perintah dari command prompt : c:\regsvr32
%windir%\system32\msxml4.dll). Karena DOM parser ini milik Microsoft, dan
Mozilla belum dilengkapi dengan fitur ini, maka browser Web yang dapat
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 111 PAGE 10
digunakan adalah Internet Explorer. Program di atas jika dipanggil dengan
Internet Explorer akan menghasilkan :
11.2 Insert Data
Bagaimana jika data berikut akan ditambahkan pada file product.xml?
<PRODUCT>
<PRODID> P004 </PRODID>
<PRODNAME> Kacang tanah </PRODNAME>
<PRICE> 3500 </PRICE>
</PRODUCT>
Kode berikut dapat dicoba. Ketikkan dan simpan dengan nama
TambahProduk.html.
<HTML>
<HEAD>
<TITLE> Tambah Product </TITLE>
<SCRIPT language="JavaScript">
Politeknik Telkom Praktikum Pemrograman XML
112 Praktikum DOM PAGE 10
function insertXMLData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
if(error!=""){
document.write("Error, alasan : "+error.reason);
return false;
}
else
{
var newelPRODUCT;
var newelPRODID;
var newelPRICE;
var x =
xmldoc.getElementsByTagName("PRODUCTDETAILS")[0];
newelPRODUCT=xmldoc.createElement("PRODUCT");
x.appendChild(newelPRODUCT);
objelementsPRODUCT=xmldoc.getElementsByTagName("
PRODUCT");
last=objelementsPRODUCT.length;
y=objelementsPRODUCT[last-1];
newelPRODID=xmldoc.createElement("PRODID");
y.appendChild(newelPRODID);
y.lastChild.text = 'P004';
newelPRODNAME=xmldoc.createElement("PRODNAME")
; y.appendChild(newelPRODNAME);
y.lastChild.text = 'Kacang tanah';
newelPRICE=xmldoc.createElement("PRICE");
y.appendChild(newelPRICE);
y.lastChild.text = '3500';
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 113 PAGE 10
alert(xmldoc.xml);
//MENYIMPAN KE FILE
var OutputXML = xmldoc.xml;
var mfObject, NewSampleFile;
mfObject = new
ActiveXObject("Scripting.FileSystemObject");
NewSampleFile =
mfObject.CreateTextFile("C:/Documents and Settings/Toshiba/My
Documents/1. POLTEK-TELKOMdanNTC/BUKUXML/2. BUKU-
PRAKT-XML-EDO-Chptr7-12/Data Files For
Faculty/Bab7/product.xml", true);
NewSampleFile.write(OutputXML);
NewSampleFile.close();
}
}
</SCRIPT>
</HEAD>
<BODY onload="javascript:insertXMLData()">
</BODY>
</HTML>
</SCRIPT>
</HEAD>
<BODY onload="javascript:insertXMLData()">
</BODY>
</HTML>
Kode di atas jika dijalankan akan menampilkan product.xml setelah
ditambahkan data product baru. Objek ActiveXObject akan mengkonfirmasi
apakah object akan dibuat. Ketikkan OK. File baru akan dibuat, dan jika
ditampilkan dengan Mozilla, hasilnya adalah sebagai berikut:
Politeknik Telkom Praktikum Pemrograman XML
114 Praktikum DOM PAGE 10
Cara insert data tidak hanya seperti program di atas. Mungkin dibuat program
lain untuk maksud tersebut.
11.3 Pencarian Data
Jika ingin ditampilkan produk dengan kode masukan, misalnya “P003”, bagaimana mendapatkan rincian datanya?
Kode berikut, CariProduk.html dapat digunakan untuk maksud tersebut.
<HTML>
<HEAD>
<TITLE> Cari Product </TITLE>
<SCRIPT language="JavaScript">
function CariData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 115 PAGE 10
if(error!=""){
document.write("Error, alasan : "+error.reason);
return false;
}
else
{
var prodid = form1.prid.value;
var
objPRODID=xmldoc.getElementsByTagName("PRODID");
var
objPRODNAME=xmldoc.getElementsByTagName("PRODNAME");
var objPRICE=xmldoc.getElementsByTagName("PRICE");
for(ctr=0; ctr<objPRODID.length;ctr++){
if (objPRODID[ctr].text==prodid)
{
form1.prname.value =
objPRODNAME[ctr].text;
form1.price.value = objPRICE[ctr].text;
break;
}
}
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form1">
Kode Produk : <input type=text name="prid">
<input type=button value="Cari!" onClick="javascript:CariData()">
<br>
Nama Produk : <input type=text name="prname"><br>
Harga : <input type=text name="price">
</FORM>
</BODY>
</HTML>
Politeknik Telkom Praktikum Pemrograman XML
116 Praktikum DOM PAGE 10
Jika dijalankan, akan muncul form kosong, dan silahkan diisi text untuk Kode
Produk.
Jika button Cari! di-klik, maka akan didapatkan hasil berikut:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 117 PAGE 10
11.4 Update Data
Jika harga suatu produk berubah, misalnya untuk “P004”, harganya berubah
dari 3500 menjadi 4000, bagaimana melakukannya?
Kode berikut, GantiHarga.html dapat digunakan untuk maksud tersebut.
<HTML>
<HEAD>
<TITLE> Ganti Harga </TITLE>
<SCRIPT language="JavaScript">
function CariData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
if(error!=""){
document.write("Error, alasan : "+error.reason);
return false;
} else
{
var prodid = form1.prid.value;
var
objPRODID=xmldoc.getElementsByTagName("PRODID");
var
objPRODNAME=xmldoc.getElementsByTagName("PRODNAME");
var objPRICE=xmldoc.getElementsByTagName("PRICE");
for(ctr=0; ctr<objPRODID.length;ctr++)
{
if (objPRODID[ctr].text==prodid)
{
form1.prname.value =
objPRODNAME[ctr].text;
form1.price.value = objPRICE[ctr].text;
break;
Politeknik Telkom Praktikum Pemrograman XML
118 Praktikum DOM PAGE 10
}
}
}
}
function SimpanData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
if(error!=""){
document.write("Error, alasan : "+error.reason);
return false;
}
else
{
var prodid = form1.prid.value;
var
objPRODID=xmldoc.getElementsByTagName("PRODID");
var
objPRODNAME=xmldoc.getElementsByTagName("PRODNAME");
var objPRICE=xmldoc.getElementsByTagName("PRICE");
for(ctr=0; ctr<objPRODID.length;ctr++){
if (objPRODID[ctr].text==prodid)
{
objPRODNAME[ctr].text=
form1.prname.value;
objPRICE[ctr].text=form1.price.value;
break;
}
}
alert(xmldoc.xml);
//MENYIMPAN KE FILE
var OutputXML = xmldoc.xml;
var mfObject, NewSampleFile;
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 119 PAGE 10
mfObject = new
ActiveXObject("Scripting.FileSystemObject");
NewSampleFile = mfObject.CreateTextFile("C:/Documents
and Settings/Toshiba/My Documents/1. POLTEK-
TELKOMdanNTC/BUKUXML/2. BUKU-PRAKT-XML-EDO-Chptr7-12/Data
Files For Faculty/Bab7/product.xml", true);
NewSampleFile.write(OutputXML);
NewSampleFile.close();
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form1">
Kode Produk : <input type=text name="prid">
<input type=button value="Cari!" onClick="javascript:CariData()">
<br>
Nama Produk : <input type=text name="prname"><br>
Harga : <input type=text name="price"><br>
<input type=button value="Simpan" onClick="javascript:SimpanData()">
</FORM>
</BODY>
</HTML>
Data yang akan diubah akan dicari dulu, hasilnya sebagai berikut:
Politeknik Telkom Praktikum Pemrograman XML
120 Praktikum DOM PAGE 10
Setelah diganti harganya, dan button simpan di-clik, data akan diubah dan
disimpan ke file produk.xml. Ditampilkan hasil akhirnya dengan Mozilla
sebagai berikut:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 121 PAGE 10
11.5 Delete Data
Jika data produk P003 akan dihapus, bagaimana melakukannya?
Kode berikut HapusProduk.html dapat digunakan untuk maksud ini.
<HTML>
<HEAD>
<TITLE> Hapus Produk </TITLE>
<SCRIPT language="JavaScript">
function CariData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
if(error!=""){ document.write("Error, alasan : "+error.reason);
return false;
}
else
{
var prodid = form1.prid.value;
var
objPRODID=xmldoc.getElementsByTagName("PRODID");
var
objPRODNAME=xmldoc.getElementsByTagName("PRODNAME");
var objPRICE=xmldoc.getElementsByTagName("PRICE");
for(ctr=0; ctr<objPRODID.length;ctr++)
{
if (objPRODID[ctr].text==prodid)
{
Politeknik Telkom Praktikum Pemrograman XML
122 Praktikum DOM PAGE 10
form1.prname.value =
objPRODNAME[ctr].text;
form1.price.value = objPRICE[ctr].text;
break;
}
}
}
}
function HapusData()
{
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.load("product.xml");
var error=xmldoc.parseError;
if(error!=""){
document.write("Error, alasan : "+error.reason);
return false;
}
else
{
var prodid = form1.prid.value;
var
objRoot=xmldoc.getElementsByTagName("PRODUCTDETAILS")[0];
var
objPRODUCT=xmldoc.getElementsByTagName("PRODUCT");
var
objPRODID=xmldoc.getElementsByTagName("PRODID");
for(ctr=0; ctr<objPRODID.length;ctr++){
if (objPRODID[ctr].text==prodid)
{
objRoot.removeChild(objRoot.childNodes.item(ctr)); break;
}
}
alert(xmldoc.xml);
//MENYIMPAN KE FILE
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 123 PAGE 10
var OutputXML = xmldoc.xml;
var mfObject, NewSampleFile;
mfObject = new
ActiveXObject("Scripting.FileSystemObject");
NewSampleFile = mfObject.CreateTextFile("C:/Documents
and Settings/Toshiba/My Documents/1. POLTEK-
TELKOMdanNTC/BUKUXML/2. BUKU-PRAKT-XML-EDO-Chptr7-12/Data
Files For Faculty/Bab7/product.xml", true);
NewSampleFile.write(OutputXML);
NewSampleFile.close();
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form1">
Kode Produk : <input type=text name="prid">
<input type=button value="Cari" onClick="javascript:CariData()">
<br>
Nama Produk : <input type=text name="prname"><br>
Harga : <input type=text name="price"><br>
<input type=button value="Hapus" onClick="javascript:HapusData()">
</FORM>
</BODY>
</HTML>
Jika dijalankan, dan diberi masukan P003 pada Kode Produk dan ditekan
tombol Cari, akan didapatkan hasil berikut.
Politeknik Telkom Praktikum Pemrograman XML
124 Praktikum DOM PAGE 10
Dan jika tombol Hapus ditekan, dokumen XML akan disimpan, dan jika
ditampilkan dengan Mozilla, akan didapatkan hasil berikut:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 125 PAGE 10
Rangkuman
1. DOM dapat digunakan untuk mengakses dokumen XML.
2. Fungsi alert pada JavaScript dan property “xml” dari objek Dokumen
dapat digunakan untuk menampilkan isi dokumen XML.
3. Method createElement(x), appendChild(x), dan property “text” dari elemen bermanfaat untuk menyisipkan data baru.
4. Method getElementsByTagName(tag) bermanfaat untuk mencari data
yang dikehendaki. Untuk selanjutnya dapat diganti.
5. Method removeChild(node) bermanfaat untuk menghapus.
Latihan
1. Integrasikan modul-modul di atas dalam suatu kesatuan halaman
HTML, sedemikian rupa, dari satu halaman utama, dapat melakukan
semua yang telah disebutkan tersebut.
2. Kembangkan lebih lanjut aplikasi di atas untuk mengelola data
pelanggan dan order produknya sekaligus.
Politeknik Telkom Praktikum Pemrograman XML
126 Praktikum DOM 2 PAGE 10
12 PRAKTIKUM DOM (2)
Overview
Jika di bab sebelumnya dibahas cara memanfaatkan DOM untuk mengakses
dokumen XML, bab ini akan membahas pemakaian DOM untuk menguji
dokumen XML dengan skema DTD dan XSD, serta menampilkan dokumen
XML dengan XSL
Tujuan
Memanfaatkan DOM untuk :
1. menguji data dokumen XML dengan DTD
2. menguji data dokumen XML dengan XSD
3. menampilkan data XML dengan XSL
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 127 PAGE 10
12.1 Validasi dokumen XML dengan DTD
Diketahui file product.xml sebagai berikut
<PRODUCTDETAILS>
<PRODUCT>
<PRODID> P001 </PRODID>
<PRODNAME> Beras </PRODNAME>
<PRICE> 5000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P002 </PRODID>
<PRODNAME> Jagung </PRODNAME>
<PRICE> 4000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID>P004</PRODID>
<PRODNAME>Kacang Tanah</PRODNAME>
<PRICE>4000</PRICE>
</PRODUCT>
</PRODUCTDETAILS>
File DTD-nya, product.dtd sebagai berikut:
<!ELEMENT PRODUCTDETAILS (PRODUCT)+>
<!ELEMENT PRODUCT (PRODID, PRODNAME, PRICE)>
<!ELEMENT PRODID (#PCDATA)>
<!ELEMENT PRODNAME (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
Bagaimana membuktikan product.xml sesuai dengan skema yang dibuat dalam
product.dtd menggunakan DOM?
Objek DOMDocument dan ParseError dibutuhkan untuk
memvalidasi dokumen XML terhadap DTD . Ketikkan kode berikut di
Notepad dan simpan sebagai CekXMLDTD.htm.
<html>
<head> <title>Penguji XML DTD</title>
Politeknik Telkom Praktikum Pemrograman XML
128 Praktikum DOM 2 PAGE 10
<script Language="javascript">
var transformedwindow;
function doValidate()
{
if ((document.frmTransform.TxtXMLFileName.value).length == 0)
{
alert("Maaf, File XML kosong");
return;
}
var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.validateOnParse = true;
//dengan true berarti akan divalidasi dengan DTD atau XSD
xmldoc.load(document.frmTransform.TxtXMLFileName.value);
//load dokumen XML yang diminta masukan.
var error=xmldoc.parseError;
//barangkali ada error.
transformedwindow=window.open('Hasil.html', '_new', 'location=0,
status=1, toolbar=0, menuBar=0, srollBars=0,
directories=0,resizable=0,width=600,height=600');
if(error!="")
{
transformedwindow.document.write('<HTML><TITLE>Chek XML
DTD</Title><BODY><P><b>Error Validating the
document</b></p><br>');
//Buat pesan
transformedwindow.document.write('<b>Error URL: </b><br>' + error.url + '<br>');
//Tulis Error URL.
transformedwindow.document.write('<b>Error Line:
</b><br>' + error.line + '<br>');
//Tulis nomor baris yang salah
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 129 PAGE 10
transformedwindow.document.write('<b>Error Position:
</b><br>' + error.linepos + '<br>');
//Tulis posisi kesalahan
transformedwindow.document.write('<b>Error Reason:
</b><br>' + error.reason + '<br>');
//Tulis alasan kesalahan
transformedwindow.document.write('</BODY></HTML>');
}
else
{
transformedwindow.document.write('<HTML><TITLE>Chek XML
DTD </Title><BODY><b>Tidak ada kesalahan </b><br>');
//Tulis pesan
transformedwindow.document.write('</BODY></HTML>');
}
}
function doReset()
{
/*
document.frmTransform.TxtXMLFileName.value="";
if (!(typeof transformedwindow == "undefined"))
transformedwindow.close();
*/
}
</script> </head>
<body bgcolor="#6699CC" text="#FFFFFF">
<p> </p>
<p align="center"><font face="Verdana, Arial, Helvetica, sans-
serif"><b><u>Penguji XML DTD
Politeknik Telkom Praktikum Pemrograman XML
130 Praktikum DOM 2 PAGE 10
</u></b></font></p>
<p> </p>
<form name="frmTransform" method="post" action="">
<table width="75%" border="0" align="center">
<tr>
<td width="31%">
<div align="center"><b>File XML:</b></div>
</td>
<td width="18%">
<input type="text" name="TxtXMLFileName">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"></font>
</td>
<td width="10%">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<a href="#" onClick="javascript:doValidate()">Cek</a>
<!--buat link Validate memanggil fungsi dovalidate() jika di-clicked-->
</font>
</td>
<td width="41%">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<a href="#" onClick="javascript:doReset()">Reset</a>
</font>
</td>
</tr>
<tr>
<td width="31%"> </td>
<td colspan="3"> </td>
</tr>
<tr>
<td colspan="4">
<div align="left"></div>
<div align="left"></div>
</td> </tr>
</table>
<p> </p>
<p> </p>
<p> </p>
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 131 PAGE 10
<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> </font></p>
</form>
</body>
</html>
Untuk menjalankan program di atas, bukalah CekXMLDTD.htm
dalam browser web. Ketikkan product.xml di teks fieldnya dan klik button
“Cek”. Jika ada error, rinciannya : nomor baris, alasan, dan posisinya
ditampilkan. Jika benar, pesan “Tidak ada kesalahan” akan ditampilkan.
Berikut adalah contoh masukan “product.xml” untuk program di atas.
Politeknik Telkom Praktikum Pemrograman XML
132 Praktikum DOM 2 PAGE 10
Dan hasilnya :
12.2 Validasi dokumen XML dengan XSD
Diketahui file product.xml seperti di atas. Dan file product.xsd sebagai
berikut.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="PRODUCTDETAILS" type="prdata"/>
<xsd:complexType name="prdata" maxOccurs=”unbounded”>
<xsd:sequence>
<xsd:element name="PRODUCT" type="prdt"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="prdt">
<xsd:sequence>
<xsd:element name="PRODID" type="xsd:string"/>
<xsd:element name="PRODNAME" type="xsd:string"/>
<xsd:element name="PRICE" type="xsd:positiveInteger"/>
</xsd:sequence>
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 133 PAGE 10
</xsd:complexType>
</xsd:schema>
Bagaimana membuktikan product.xml sesuai dengan skema yang dibuat dalam
product.xsd menggunakan DOM? Kode berikut CekXMLXSD.html dapat
digunakan untuk memvalidasi XML berdasarkan XSD.
<html>
<head>
<title>Penguji XML XSD</title>
</head>
<body bgcolor="#6699CC" text="#FFFFFF" vLink="Yellow" >
<script Language="javascript">
var transformedwindow;
function doValidate()
{
if((document.frmTransform.TxtXMLFileName.value).length == 0)
{
alert("Maaf, file XML kosong.");
return;
}
if((document.frmTransform.TxtXSDFileName.value).length ==0)
{
alert("Maaf, file XSD kosong");
return;
}
var xmlDoc = new
ActiveXObject("Msxml2.FreeThreadedDomDocument.4.0");
xmlDoc.async = false;
xmlDoc.load(document.frmTransform.TxtXMLFileName.value);
var namespace=xmlDoc.documentElement.namespaceURI;
xmlDoc.validateOnParse=true;
var xsdschemacache = new
ActiveXObject("Msxml2.XMLSchemaCache.4.0");
xsdschemacache.add(namespace,document.frmTransform.TxtXSDFil
eName.value);
xmlDoc.schemas=xsdschemacache;
Politeknik Telkom Praktikum Pemrograman XML
134 Praktikum DOM 2 PAGE 10
xmlDoc.load(document.frmTransform.TxtXMLFileName.value);
var error=xmlDoc.parseError;
transformedwindow=window.open('Hasil.html','_new','location=0,st
atus=1,toolbar=0,menuBar=0,scrollBars=0,directories=0,resizable=0,width=6
00,height=600');
if(error!="")
{
transformedwindow.document.write('<HTML><TITLE>Penguji
Skema</Title><BODY><P><b>Kesalahan saat validasi
dokumen</b></p><br>');
transformedwindow.document.write('<b>Error
URL:</b><br>' + error.url + '<br>');
transformedwindow.document.write('<b>Error
Line:</b><br>' + error.line + '<br>');
transformedwindow.document.write('<b>Error
Position:</b><br>' + error.linepos + '<br>');
transformedwindow.document.write('<b>Error
Reason:</b><br>' + error.reason + '<br>');
transformedwindow.document.write('</BODY></HTML>');
}
else
{
transformedwindow.document.write('<HTML><TITLE>Penguji
Skema</Title><BODY><b>Tidak ada kesalahan </b><br>');
transformedwindow.document.write('</BODY></HTML>');
}
}
function doReset() {
document.frmTransform.TxtXSDFileName.value="";
document.frmTransform.TxtXMLFileName.value="";
if (!(typeof transformedwindow == "undefined"))
transformedwindow.close();
}
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 135 PAGE 10
</script>
<p> </p>
<p align="center"><font face="Verdana, Arial, Helvetica,
sans-serif"><b><u>Penguji XML - XSD </u></b></font></p>
<p> </p>
<form name="frmTransform" method="post" action="">
<table width="75%" border="0" align="center">
<tr>
<td>
<div align="center"><b>File XML:</b></div>
</td>
<td>
<input type="text" name="TxtXMLFileName">
<font face="Verdana, Arial, Helvetica, sans-serif"
size="2"><a href="#"
onclick="javascript:doValidate()">Check</a></font>
</td>
</tr>
<tr>
<td>
<div align="center"><b>File XSD:</b></div>
</td>
<td>
<input type="text" name="TxtXSDFileName">
<font face="Verdana, Arial, Helvetica, sans-serif"
size="2"><a
href="#"
onclick="javascript:doReset()">Reset</a></font>
</td>
</tr>
<tr>
<td colspan="2">
<div align="left"></div> <div align="left"></div>
</td>
</tr>
</table>
<p> </p>
<p> </p>
Politeknik Telkom Praktikum Pemrograman XML
136 Praktikum DOM 2 PAGE 10
<p> </p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
</font></p>
</form>
</body>
</html>
Pastikan product.xml dan product.xsd berada di folder yang sama dengan file
program ini. Berikut adalah contoh masukan product.xml dan product.xsd.
Dan hasilnya adalah pesan form “Tidak ada kesalahan”.
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 137 PAGE 10
12.3 Menampilkan XML dengan XSL
Diketahui file productTable.xsl sebagai berikut:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="pink">
<tr>
<th>Product ID</th>
<th>Product Name</th>
<th>Price</th>
</tr>
<xsl:for-each select="PRODUCTDETAILS/PRODUCT">
<tr>
<td><xsl:value-of select="PRODID"/></td>
<td><xsl:value-of select="PRODNAME"/></td>
<td><xsl:value-of select="PRICE"/></td>
Politeknik Telkom Praktikum Pemrograman XML
138 Praktikum DOM 2 PAGE 10
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Jika product.xml ditampilkan menggunakan productTable.xsl akan
menghasilkan tampilan berikut.
Diketahui juga file productList.xsl sebagai berikut:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html> <body>
<xsl:for-each select="PRODUCTDETAILS/PRODUCT">
<li><xsl:value-of select="PRODID"/></li>
<li><xsl:value-of select="PRODNAME"/></li>
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 139 PAGE 10
<li><xsl:value-of select="PRICE"/></li>
<br></br>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Jika product.xml ditampilkan menggunakan productList.xsl akan menghasilkan
tampilan berikut.
Bagaimana menampilkan product.xml dalam bentuk tabel atau list (dapat
dipilih dari halaman HTML) melalui DOM? Kita buat dokumen HTML berisi
dua frame, frame atas untuk menampilkan hasil, frame bawah untuk
menampilkan pilihan.
File frameAtas.html digunakan untuk mengisi frame atas.
<html>
<head>
<title>Hasil XSL</title>
Politeknik Telkom Praktikum Pemrograman XML
140 Praktikum DOM 2 PAGE 10
</head>
<body bgcolor="#FFFFFF">
</body>
</html>
File frameBawah.html untuk menampilkan pilihan.
<html>
<head>
<title>Pilihan</title>
<script language="javascript">
function displayTable()
{
document.VIEW.optList.checked=false;
document.VIEW.optReset.checked=false;
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new
ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.load("productTable.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new
ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load("product.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.transform();
//alert(xslProc.output);
parent.TOP.document.write(xslProc.output);
}
function displayList()
{ document.VIEW.optTable.checked=false;
document.VIEW.optReset.checked=false;
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject
("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 141 PAGE 10
xslDoc.async = false;
xslDoc.load("productList.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject
("Msxml2.FreeThreadedDOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load("product.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.transform();
parent.TOP.document.write(xslProc.output);
}
function displayReset()
{
parent.TOP.document.location="frameAtas.html";
document.VIEW.optList.checked=false;
document.VIEW.optTable.checked=false;
}
</script>
</head>
<body bgcolor="#FFFFFF">
<form name="VIEW" method="post" action>
<p>
<input type="radio" name="optTable" value="radiobutton"
onClick="javascript:displayTable();">
Tampilan Tabel XML
<input type="radio" name="optList" value="radiobutton"
onClick="javascript:displayList();">
Tampilan List XML
<input type="radio" name="optReset" value="radiobutton"
onClick="javascript:displayReset();">
Reset
</p> </form>
</body>
</html>
Politeknik Telkom Praktikum Pemrograman XML
142 Praktikum DOM 2 PAGE 10
Fungsi displayTable() menampilkan XML dalam bentuk tabel, displayList()
menampilkan XML dalam bentuk List, displayReset() mengosongkan
frameAtas.
File Utama.html berikut digunakan untuk membuat halaman utama.
<html>
<head>
<title>Utama</title>
</head>
<frameset rows="85%,103*" cols="*">
<frame name="TOP" scrolling="AUTO" src="frameAtas.html" noresize
frameborder="NO">
<frame name="BOTTOM" src="frameBawah.html" scrolling="NO" noresize
frameborder="NO">
</frameset>
</html>
Jika dijalankan hasilnya adalah ada pilihan untuk menampilkan dalam bentuk
Tabel atau List di bawah.
Politeknik Telkom Praktikum Pemrograman XML
Praktikum DOM 2 143 PAGE 10
Jika tampilan tabel dipilih, maka akan dihasilkan tampilan berikut.
Jika tampilan list dipilih, maka akan dihasilkan tampilan berikut.
Politeknik Telkom Praktikum Pemrograman XML
144 Praktikum DOM 2 PAGE 10
Rangkuman
1. Property “validateOnParse” jika diset true akan bermanfaat untuk
memvalidasi dokumen XML dengan DTD.
2. Dibutuhkan objek XMLSchemaCache, property “schemas” dokumen
DOM yang diisi nama file xsl, dan “validateOnParse” yang diisi true bermanfaat untuk memvalidasi dokumen XML dengan XSL.
3. Untuk menampilkan dokumen XML menggunakan XSL dibutuhkan :
- dua objek FreeThreadedDOMDocument untuk mengambil
masing-masing file XSL dan XML
- Objek XSLTemplate, property “stylesheet”nya diisi file
XSL, method createProcessor() diaktifkan disimpan di suatu
objek dan property “input” diisi file XML-nya, dan method
transform() diaktifkan.
Latihan
Lengkapi Latihan di bab sebelumnya dengan fasilitas pengujian dokumen XML
dengan DTD dan XSD, serta menampilkan dokumen XML dengan XSL.
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 145 PAGE 10
13 PRAKTIKUM SAX
Overview
Bab ini akan menunjukkan bagaimana mengakses dokumen XML dengan SAX.
Tujuan
Menggunakan SAX untuk menampilkan :
1. isi dokumen XML apa adanya
2. isi dokumen XML tanpa tag
3. dengan melakukan perhitungan
Politeknik Telkom Praktikum Pemrograman XML
146 Praktikum SAX PAGE 10
13.1 Menampilkan data XML
Diketahui file product.xml berikut
<PRODUCTDETAILS>
<PRODUCT>
<PRODID> P001 </PRODID>
<PRODNAME> Beras </PRODNAME>
<PRICE> 5000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P002 </PRODID>
<PRODNAME> Jagung </PRODNAME>
<PRICE> 4000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P003 </PRODID>
<PRODNAME> Kedelai </PRODNAME>
<PRICE> 4500 </PRICE>
</PRODUCT>
</PRODUCTDETAILS>
Ditampilkan dengan Mozilla, product.xml akan nampak sebagai berikut:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 147 PAGE 10
Bagaimana menampilkannya menggunakan Java?
Buat program TampilProduk.java berikut.
import java.io.*;
//package-package yang diperlukan untuk mengakses SAX
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
public class TampilProduk extends DefaultHandler
{
static private Writer writerOut;
StringBuffer stringBuffer;
/* Masukan nama file XML */
public static void main(String fileName[])
{
if (fileName.length != 1)
{
System.err.println("Usage: cmd filename");
System.exit(1);
}
DefaultHandler defaultHandler = new TampilProduk();
SAXParserFactory saxParserFactory =
SAXParserFactory.newInstance();
try
{
/* untuk tampilan */
writerOut = new OutputStreamWriter(System.out,"UTF8");
/* buat objek SAXParser class */
SAXParser Sax_Parser = saxParserFactory.newSAXParser();
/* telusuri file XML */ Sax_Parser.parse( new File(fileName[0]), defaultHandler);
}
catch (Throwable thr)
{
thr.printStackTrace();
}
Politeknik Telkom Praktikum Pemrograman XML
148 Praktikum SAX PAGE 10
System.exit(0);
}
/* Method yang menangani startDocument */
public void startDocument() throws SAXException
{
IOHandler("<?xml version = '1.0' encoding = 'UTF-8'?>");
newLine();
}
/* Method yang menangani endDocument */
public void endDocument() throws SAXException
{
try
{
newLine();
writerOut.flush();
}
catch (IOException e)
{
throw new SAXException("I/O error", e);
}
}
/* Method yang menangani startElement */
public void startElement(String namespaceURI, String sName, String
qName, Attributes attrs) throws SAXException
{
displayText();
String eName = sName;
if ("".equals(eName))
eName = qName;
IOHandler("<" + eName);
if (attrs != null) {
for (int i = 0; i < attrs.getLength(); i++)
{
String aName = attrs.getLocalName(i);
if ("".equals(aName))
aName = attrs.getQName(i);
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 149 PAGE 10
IOHandler(" ");
IOHandler(aName + "=\"" + attrs.getValue(i) + "\"");
}
}
IOHandler(">");
}
/* Method yang menangani endElement */
public void endElement(String namespaceURI, String sName, String
qName) throws SAXException
{
displayText();
String eName = sName;
if ("".equals(eName))
eName = qName;
IOHandler("</" + eName + ">");
}
/* Method yang menangani characters */
public void characters(char buf[], int offset, int len) throws SAXException
{
String s = new String(buf, offset, len);
if (stringBuffer == null)
{
stringBuffer = new StringBuffer(s);
}
else
{
stringBuffer.append(s);
}
}
/* Tampilkan text yang terkumpul di string buffer */
private void displayText() throws SAXException {
if (stringBuffer == null)
return;
String s = ""+stringBuffer;
IOHandler(s);
stringBuffer = null;
Politeknik Telkom Praktikum Pemrograman XML
150 Praktikum SAX PAGE 10
}
/* Tulis isi string buffer ke layar */
private void IOHandler(String s) throws SAXException
{
try
{
writerOut.write(s);
writerOut.flush();
}
catch (IOException IOExcep)
{
throw new SAXException("I/O error", IOExcep);
}
}
/* Buat baris baru */
private void newLine() throws SAXException
{
String lineEnd = System.getProperty("line.separator");
try
{
writerOut.write(lineEnd);
}
catch (IOException e)
{
throw new SAXException("I/O error", e);
}
}
}
Kompilasi program di atas dengan :
C>javac TampilProduk.java
Jalankan program di atas dengan :
C>java TampilProduk product.xml
Hasilnya adalah sebagai berikut:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 151 PAGE 10
13.2 Tampilkan Data XML tanpa tag
Jika ingin ditampilkan produk tanpa tag, bagaimana caranya?
Kode berikut, TampilProduk2.java dapat digunakan untuk maksud
tersebut.
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
public class TampilProduk2 extends DefaultHandler
{
StringBuffer stringBuffer;
Politeknik Telkom Praktikum Pemrograman XML
152 Praktikum SAX PAGE 10
public static void main(String fileName[])
{
if (fileName.length != 1)
{
System.err.println("Usage: cmd filename");
System.exit(1);
}
DefaultHandler defaultHandler = new TampilProduk2();
SAXParserFactory saxParserFactory =
SAXParserFactory.newInstance();
try
{
SAXParser Sax_Parser = saxParserFactory.newSAXParser();
Sax_Parser.parse( new File(fileName[0]), defaultHandler);
}
catch (Throwable thr)
{
thr.printStackTrace();
}
System.exit(0);
}
public void startDocument() throws SAXException
{
}
public void endDocument() throws SAXException
{
System.out.println(stringBuffer.toString());
}
public void startElement(String namespaceURI, String sName, String
qName, Attributes attrs) throws SAXException {
}
public void endElement(String namespaceURI, String sName, String
qName) throws SAXException
{
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 153 PAGE 10
}
public void characters(char buf[], int offset, int len) throws SAXException
{
String s = new String(buf, offset, len);
if (stringBuffer == null)
{
stringBuffer = new StringBuffer(s);
}
else
{
stringBuffer.append(s);
}
}
}
Kompilasi dan jalankan dengan :
C:\java TampilProduk2 product.xml
Hasilnya adalah sebagai berikut.
Politeknik Telkom Praktikum Pemrograman XML
154 Praktikum SAX PAGE 10
13.3 Perhitungan terhadap data XML
Diketahui data item.xml berikut:
<ItemsInfo>
<Item>
<type>Book</type>
<price>100</price>
</Item>
<Item>
<type>CD</type>
<price>600</price>
</Item>
<Item>
<type>Greeting Card</type>
<price>500</price>
</Item>
</ItemsInfo>
Bagaimana menjumlahkan data-data price?
Kode HitungPrice.java berikut dapat digunakan.
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
public class HitungPrice extends DefaultHandler
{
StringBuffer stringBuffer = new StringBuffer();
private int amt=0;
public static void main(String fileName[])
{
if (fileName.length != 1)
{
System.err.println("Usage: cmd filename");
System.exit(1);
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 155 PAGE 10
}
DefaultHandler defaultHandler = new HitungPrice();
SAXParserFactory saxParserFactory =
SAXParserFactory.newInstance();
try
{
SAXParser Sax_Parser = saxParserFactory.newSAXParser();
Sax_Parser.parse( new File(fileName[0]), defaultHandler);
}
catch (Throwable thr)
{
thr.printStackTrace();
}
System.exit(0);
}
public void startDocument() throws SAXException
{
}
public void endDocument() throws SAXException
{
System.out.println("The total amount is:"+amt);
}
public void startElement(String namespaceURI, String sName, String
qName, Attributes attrs) throws SAXException
{
stringBuffer.setLength(0);
}
public void endElement(String namespaceURI, String sName, String
qName) throws SAXException {
if(qName.equals("price") && !qName.equals(""))
amt += Integer.parseInt(stringBuffer.toString().trim());
stringBuffer.setLength(0);
}
Politeknik Telkom Praktikum Pemrograman XML
156 Praktikum SAX PAGE 10
public void characters(char buf[], int offset, int len) throws SAXException
{
stringBuffer.append(buf, offset, len);
}
}
Jika dijalankan akan menghasilkan:
Politeknik Telkom Praktikum Pemrograman XML
Praktikum SAX 157 PAGE 10
Rangkuman
Tidak banyak yang dapat dilakukan dengan SAX, kecuali sekedar menampilkan
data, dan operasi-operasi terkait dengan tag-tag yang ditemukan : startDocument(), endDocument(), startElement(), endElement().
Latihan
Buatlah program SAX untuk menampilkan produk dengan format berikut:
Produk : P001, Beras, 5000
Produk : P002, Jagung, 4000
Produk : P003, Kedelai, 4500
Politeknik Telkom Praktikum Pemrograman XML
158 Praktikum WSDL PAGE 10
14 PRAKTIKUM WSDL
Overview
Bab ini akan menunjukkan bagaimana membuat WSDL, Web Service
Description Language dari Web Service Java.
Tujuan
Membuat WSDL dengan perintah wscompile Java
Politeknik Telkom Praktikum Pemrograman XML
Praktikum WSDL 159 PAGE 10
14.1 Membuat WSDL dengan wscompile Java
Contoh 1. Diinginkan membuat Web Service untuk mengkonversikan suhu
dari Celcius menjadi Fahrenheit. Bagaimana membuat WSDL-nya?
Pertama, dibuat file interface TempConverterIntf.java sebagai berikut:
package temp_converter;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TempConverterIntf extends Remote
{
public double getFahrenheit(double celcius) throws RemoteException;
}
Kedua, dibuat file implementasinya TempConverterImpl.java sebagai
berikut:
package temp_converter;
import java.rmi.RemoteException;
public class TempConverterImpl implements TempConverterIntf
{
public double getFahrenheit(double celcius) throws RemoteException {
double fahrenheit = 0;
fahrenheit = ((1.8) * celcius) + 32.0;
return fahrenheit;
}
}
Kedua file tersebut dikompilasi sebagai berikut:
C>....Folder>javac –d . TempConverter*.java
Ketiga, buat file konfigurasi awal untuk membuat WSDL, config.xml,
sebagai berikut:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<service
name="TempConverterWebService"
Politeknik Telkom Praktikum Pemrograman XML
160 Praktikum WSDL PAGE 10
targetNamespace="urn:Foo"
typeNamespace="urn:Foo"
packageName="temp_converter">
<interface name="temp_converter.TempConverterIntf"/>
</service>
</configuration>
Gunakan perintah berikut di command prompt untuk membuat file wsdl,
sekaligus mapping.xml :
C>..Folder>wscompile –define –mapping ./mapping.xml –d .
–nd . –classpath . config.xml
Berikut adalah file hasil WSDLnya, TempConverterWebService.wsdl :
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="TempConverterWebService"
targetNamespace="urn:Foo" xmlns:tns="urn:Foo"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<types/>
<message name="TempConverterInterface_getFahrenheit">
<part name="double_1" type="xsd:double"/></message>
<message name="TempConverterInterface_getFahrenheitResponse">
<part name="result" type="xsd:double"/></message>
<portType name="TempConverterInterface">
<operation name="getFahrenheit" parameterOrder="double_1">
<input message="tns:TempConverterInterface_getFahrenheit"/>
<output
message="tns:TempConverterInterface_getFahrenheitResponse"/></operatio
n></portType>
<binding name="TempConverterInterfaceBinding"
type="tns:TempConverterInterface"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc"/>
<operation name="getFahrenheit">
<soap:operation soapAction=""/>
<input>
Politeknik Telkom Praktikum Pemrograman XML
Praktikum WSDL 161 PAGE 10
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
use="encoded" namespace="urn:Foo"/></input>
<output>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
use="encoded" namespace="urn:Foo"/></output></operation></binding>
<service name="TempConverterWebService">
<port name="TempConverterInterfacePort"
binding="tns:TempConverterInterfaceBinding">
<soap:address
location="REPLACE_WITH_ACTUAL_URL"/></port></service></definition
s>
Perhatikan tag-tag penting elemen file WSDL yang ditandai bold di atas.
Disamping file WSDL di atas, juga dihasilkan file mapping.xml berikut:
<?xml version="1.0" encoding="UTF-8"?>
<java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd">
<package-mapping>
<package-type>temp_converter</package-type>
<namespaceURI>urn:Foo</namespaceURI>
</package-mapping>
<package-mapping>
<package-type>temp_converter</package-type>
<namespaceURI>urn:Foo</namespaceURI>
</package-mapping>
<service-interface-mapping>
<service-interface>temp_converter.TempConverterWebService</service-
interface>
<wsdl-service-name
xmlns:serviceNS="urn:Foo">serviceNS:TempConverterWebService</wsdl-
service-name> <port-mapping>
<port-name>TempConverterInterfacePort</port-name>
<java-port-name>TempConverterInterfacePort</java-port-name>
</port-mapping>
</service-interface-mapping>
<service-endpoint-interface-mapping>
Politeknik Telkom Praktikum Pemrograman XML
162 Praktikum WSDL PAGE 10
<service-endpoint-
interface>temp_converter.TempConverterInterface</service-endpoint-
interface>
<wsdl-port-type
xmlns:portTypeNS="urn:Foo">portTypeNS:TempConverterInterface</wsdl-
port-type>
<wsdl-binding
xmlns:bindingNS="urn:Foo">bindingNS:TempConverterInterfaceBinding</ws
dl-binding>
<service-endpoint-method-mapping>
<java-method-name>getFahrenheit</java-method-name>
<wsdl-operation>getFahrenheit</wsdl-operation>
<method-param-parts-mapping>
<param-position>0</param-position>
<param-type>double</param-type>
<wsdl-message-mapping>
<wsdl-message
xmlns:wsdlMsgNS="urn:Foo">wsdlMsgNS:TempConverterInterface_getFahre
nheit</wsdl-message>
<wsdl-message-part-name>double_1</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
<wsdl-return-value-mapping>
<method-return-value>double</method-return-value>
<wsdl-message
xmlns:wsdlMsgNS="urn:Foo">wsdlMsgNS:TempConverterInterface_getFahre
nheitResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
</service-endpoint-interface-mapping>
</java-wsdl-mapping>
Contoh 2. Misal akan dibuat web service ramalan bintang. Bagaimana
membuat file WSDL-nya?
Pertama, perlu dibuat file interface-nya, HoroscopeInterface.java, sebagai
berikut.
Politeknik Telkom Praktikum Pemrograman XML
Praktikum WSDL 163 PAGE 10
package horoscope;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HoroscopeInterface extends Remote
{
public String getSunSignTrait(int sunsign) throws RemoteException;
}
Berikutnya file implementasinya, HoroscopeImplementation.java, senagai
berikut:
package horoscope;
import java.rmi.RemoteException;
import java.sql.*;
public class HoroscopeImplementation implements HoroscopeInterface
{
public String getSunSignTrait(int sunsign) throws RemoteException
{
String sunSignTrait[] = new String[12];
/* Aries sun sign trait */
sunSignTrait[0] = "Arians are adventurous, ambitious,
impulsive, enthusiastic, and full of energy.";
/* Taurus sun sign trait */
sunSignTrait[1] = "Taureans are practical, stable,
conservative, and lovers of peace.";
/* Gemini sun sign trait */
sunSignTrait[2] = "Geminis are dual-natured, elusive,
complex, and contradictory.";
/* Cancer sun sign trait */
sunSignTrait[3] = "Cancerians are timid and shy. They are also dull and conservative.";
/* Leo sun sign trait */
sunSignTrait[4] = "Leos are ambitious, courageous, strong-
willed, independent, and self-confident.";
/* Virgo sun sign trait */
Politeknik Telkom Praktikum Pemrograman XML
164 Praktikum WSDL PAGE 10
sunSignTrait[5] = "Virgos are characterized by preciseness,
refinement, love for cleanliness, hygiene, and good order.";
/* Libra sun sign trait */
sunSignTrait[6] = "Librans are elegant, charming, naturally
kind, gentle, and lovers of beauty, harmony and justice.";
/* Scorpio sun sign trait */
sunSignTrait[7] = "Scorpios are the most intense, profound,
and powerful among the zodiacs.";
/* Sagittarius sun sign trait */
sunSignTrait[8] = "Sagittarians are full of energy, versatility,
adventurousness, and eagerness to extend experience.";
/* Capricorn sun sign trait */
sunSignTrait[9] = "Capricorns are confident, strong-willed,
and calm.";
/* Aquarius sun sign trait */
sunSignTrait[10] = "Aquarians basically possess strong and
attractive personalities.";
/* Pisces sun sign trait */
sunSignTrait[11] = "Pisceans are gentle, patient, malleable,
generous, friendly, creative, and sensitive to others' feelings.";
switch(sunsign)
{
case 0:
/* Returns sun sign trait of Aries */
return sunSignTrait[0];
case 1:
/* Returns sun sign trait of Taurus */
return sunSignTrait[1];
case 2:
/* Returns sun sign trait of Gemini */
return sunSignTrait[2];
case 3:
/* Returns sun sign trait of Cancer */ return sunSignTrait[3];
case 4:
/* Returns sun sign trait of Leo */
return sunSignTrait[4];
case 5:
/* Returns sun sign trait of Virgo */
Politeknik Telkom Praktikum Pemrograman XML
Praktikum WSDL 165 PAGE 10
return sunSignTrait[5];
case 6:
/* Returns sun sign trait of Libra */
return sunSignTrait[6];
case 7:
/* Returns sun sign trait of Scorpio */
return sunSignTrait[7];
case 8:
/* Returns sun sign trait of Sagittarius */
return sunSignTrait[8];
case 9:
/* Returns sun sign trait of Capricorn */
return sunSignTrait[9];
case 10:
/* Returns sun sign trait of Aquarius */
return sunSignTrait[10];
case 11:
/* Returns sun sign trait of Pisces */
return sunSignTrait[11];
default:
return null;
}
}
}
File konfigurasi awal untuk membuat WSDL, config.xml, dibuat sebagai
berikut:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<service
name="HoroscopeWebService"
targetNamespace="urn:Foo" typeNamespace="urn:Foo"
packageName="horoscope">
<interface name="horoscope.HoroscopeInterface"/>
</service>
</configuration>
Politeknik Telkom Praktikum Pemrograman XML
166 Praktikum WSDL PAGE 10
Gunakan perintah berikut di command prompt untuk membuat file wsdl,
sekaligus mapping.xml :
C>..Folder>wscompile –define –mapping ./mapping.xml –d .
–nd . –classpath . config.xml
Berikut adalah file hasil WSDLnya, HoroscopeWebService.wsdl :
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="HoroscopeWebService" targetNamespace="urn:Foo"
xmlns:tns="urn:Foo" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<types/>
<message name="HoroscopeInterface_getSunSignTrait">
<part name="int_1" type="xsd:int"/></message>
<message name="HoroscopeInterface_getSunSignTraitResponse">
<part name="result" type="xsd:string"/></message>
<portType name="HoroscopeInterface">
<operation name="getSunSignTrait" parameterOrder="int_1">
<input message="tns:HoroscopeInterface_getSunSignTrait"/>
<output
message="tns:HoroscopeInterface_getSunSignTraitResponse"/></operation>
</portType>
<binding name="HoroscopeInterfaceBinding"
type="tns:HoroscopeInterface">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc"/>
<operation name="getSunSignTrait">
<soap:operation soapAction=""/>
<input>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
use="encoded" namespace="urn:Foo"/></input>
<output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
use="encoded" namespace="urn:Foo"/></output></operation></binding>
<service name="HoroscopeWebService">
<port name="HoroscopeInterfacePort"
binding="tns:HoroscopeInterfaceBinding">
Politeknik Telkom Praktikum Pemrograman XML
Praktikum WSDL 167 PAGE 10
<soap:address
location="REPLACE_WITH_ACTUAL_URL"/></port></service></definition
s>
Selain file WSDL juga dihasilkan file mapping.xml sebagai berikut:
<?xml version="1.0" encoding="UTF-8"?>
<java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd">
<package-mapping>
<package-type>horoscope</package-type>
<namespaceURI>urn:Foo</namespaceURI>
</package-mapping>
<package-mapping>
<package-type>horoscope</package-type>
<namespaceURI>urn:Foo</namespaceURI>
</package-mapping>
<service-interface-mapping>
<service-interface>horoscope.HoroscopeWebService</service-interface>
<wsdl-service-name
xmlns:serviceNS="urn:Foo">serviceNS:HoroscopeWebService</wsdl-
service-name>
<port-mapping>
<port-name>HoroscopeInterfacePort</port-name>
<java-port-name>HoroscopeInterfacePort</java-port-name>
</port-mapping>
</service-interface-mapping>
<service-endpoint-interface-mapping>
<service-endpoint-interface>horoscope.HoroscopeInterface</service-
endpoint-interface>
<wsdl-port-type
xmlns:portTypeNS="urn:Foo">portTypeNS:HoroscopeInterface</wsdl-port-
type> <wsdl-binding
xmlns:bindingNS="urn:Foo">bindingNS:HoroscopeInterfaceBinding</wsdl-
binding>
<service-endpoint-method-mapping>
<java-method-name>getSunSignTrait</java-method-name>
<wsdl-operation>getSunSignTrait</wsdl-operation>
Politeknik Telkom Praktikum Pemrograman XML
168 Praktikum WSDL PAGE 10
<method-param-parts-mapping>
<param-position>0</param-position>
<param-type>int</param-type>
<wsdl-message-mapping>
<wsdl-message
xmlns:wsdlMsgNS="urn:Foo">wsdlMsgNS:HoroscopeInterface_getSunSignTr
ait</wsdl-message>
<wsdl-message-part-name>int_1</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
<wsdl-return-value-mapping>
<method-return-value>java.lang.String</method-return-value>
<wsdl-message
xmlns:wsdlMsgNS="urn:Foo">wsdlMsgNS:HoroscopeInterface_getSunSignTr
aitResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
</service-endpoint-interface-mapping>
</java-wsdl-mapping>
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 1 169 PAGE 10
15 PRAKTIKUM WEB SERVICE(1)
Overview
Bab ini akan membahas implementasi Web Service di Apache AXIS di Apache
Tomcat.
Tujuan
Mengimplementasikan Web Service di Apache AXIS di server Apache
Tomcat
Politeknik Telkom Praktikum Pemrograman XML
170 Praktikum Web Service 1 PAGE 10
15.1 Persiapan
Pemrograman Web Services itu mudah, dengan menggunakan Web
Service Toolkit. XML, SOAP, HTTP seluruhnya disembunyikan dari
programmer.
Web Server menangani komunikasi HTTP. Web Service Toolkit
menangani pemrosesan SOAP/XML :
- secara otomatis membuat WSDL untuk web service (dari class Java),
- mengkonversikan SOAP request menjadi subroutine call (yaitu pemanggilan
method Java),
- mengkonversikan output dari subroutine ke SOAP response.
Gambar 12.1 Web Service Toolkit memudahkan pekerjaan
Web Server (e.g. Apache Tomcat)
Web Service Toolkit (e.g. Apache Axis)
Web Service Code (e.g. Java)
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 1 171 PAGE 10
Apache AXIS adalah SOAP engine open source, merupakan
framework untuk membuat processor SOAP client dan server. Implementasi
server dipasang ke servlet engines (dapat dipasang dalam framework Web
server tradisional). Apache AXIS memebuat WSDL untuk setiap Web service
yang di-deploy.
Untuk menjalankan Axis, perlu di-install:
- Apache Tomcat (version 4.1.x), dari http://jakarta.apache.org/tomcat/
- Java, dari http://java.sun.com/
- Apache Axis, dari http://ws.apache.org/axis/.
Jika install Tomcat sukses, Tomcat dapat dipanggil dari Mozilla dengan
http://localhost:8080/ dan diperoleh tampilan berikut:
Politeknik Telkom Praktikum Pemrograman XML
172 Praktikum Web Service 1 PAGE 10
Jika install axis sukses, maka dapat dipanggil dari Mozilla dengan
http://localhost:8080/axis/ akan diperoleh tampilan berikut:
15.2 Kode Web Service dengan Java
Buat file Calculator.java berikut:
public class Calculator {
public int add(int i1, int i2)
{ return i1 + i2; }
public int subtract(int i1, int i2)
{ return i1 - i2; }
}
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 1 173 PAGE 10
15.3 Install Web Service di Web Server
a. Cara Instan.
- ganti file .java menjadi file .jws (java web service)
- copy file.jws file ke direktori webapp
- Jadi!!
Axis menangani kompilasi, pembuatan WSDL dsb.
b. Cara Custom
- Kompilasi code dan kopi ke web server - Buat Web Service Deployment Descriptor (WSDD), XML yang
menggambarkan service yang di-deploi, yaitu deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Calculator" provider="java:RPC">
<parameter name="className" value="Calculator"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
– panggil client admin AXIS dengan file WSDD file, yaitu:
java org.apache.axis.client.AdminClient deploy.wsdd
15.4 Memanggil Web Service
Tahap 1: Dapatkan WSDL
Umumnya di URL web service + ?wsdl
misalnya http://<host>/axis/services/Calculator?wsdl
Gunakan UDDI untuk menemukan lokasi WSDL
Politeknik Telkom Praktikum Pemrograman XML
174 Praktikum Web Service 1 PAGE 10
Tahap 2: Buat stubs
Gunakan WSDL2Java untuk membuat client stubs/bindings
java org.apache.axis.wsdl.WSDL2Java Calculator.wsdl membuat:
- Calculator.java (interface)
- CalculatorService.java (service interface)
- CalculatorServiceLocator.java
(service factory, implements CalculatorService.java)
- CalculatorServiceSoapBindingStub.java
(stub for invoking service using SOAP, implements Calculator.java)
File CalculatorService.java berisi :
public interface CalculatorService extends Service {
public String getCalculatorAddress();
public Calculator getCalculator() throws ServiceException;
public Calculator getCalculator(URL portAddress) throws
ServiceException;
}
File Calculator.java
public interface Calculator extends Remote {
public int add(int i1, int i2) throws RemoteException;
public int subtract(int i1, int i2) throws RemoteException;
}
Tahap 3: Tulis kode client
import Calculator.*;
public class CalcClient {
public static void main(String[] args) {
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 1 175 PAGE 10
try {
CalculatorService service = new CalculatorServiceLocator();
Calculator calulator = service.getCalculator();
int res = calculator.add(10, 5);
System.out.println("Result=" + res);
} catch(Exception except) {
except.printStackTrace();
}
}
}
Jika kode client adalah Java, maka situasi pengaksesan digambarkan sebagai
berikut:
Web Server (e.g. Apache Tomcat)
Web Service Toolkit (e.g. Apache Axis)
Client (e.g. CalcClient.java)
SOAP Binding
SOAP Request
Web Service Code (e.g. Calculator.java)
Java to SOAP
Java
Java SOAP to Java
Politeknik Telkom Praktikum Pemrograman XML
176 Praktikum Web Service 1 PAGE 10
Pesan SOAP dan data yang dikirimkan adalah:
Dan jawabannya adalah:
Web Server (e.g. Apache Tomcat)
Web Service Toolkit (e.g. Apache Axis)
Client
SOAP Binding
SOAP Response
Web Service Code
SOAP to Java
Java
Java Java to SOAP
Web Server (e.g. Apache Tomcat)
Web Service Toolkit (e.g. Apache Axis)
Client (e.g. CalcClient.java)
SOAP Binding
SOAP Request
Web Service Code (e.g. Calculator.java)
Java to SOAP
Java
Java SOAP to Java
<soap:Envelope
<soap:Body>
<add>
<i1>10</i1>
<i2>5</i2>
</add>
</soap:Body>
</soap:Envelope>
calculator.add(10, 5)
add(10, 5)
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 1 177 PAGE 10
Rangkuman
1. Pemrograman Web Services itu mudah!
2. Web Service Toolkits (yaitu Apache Axis) melindungi programmer dari
XML, SOAP, WSDL dsb.
3. Pembuatan WSDL otomatis 4. Pembuatan client stub otomatis
Latihan
1. Buatkan web service untuk mengkonversikan suhu Fahrenheit ke
Celcius dan sebaliknya di Apache AXIS.
2. Buatkan web service untuk mencari Keliling dan Luas Lingkaran di
Apache AXIS.
Politeknik Telkom Praktikum Pemrograman XML
178 Praktikum Web Service 2 PAGE 10
16 PRAKTIKUM WEB-SERVICE (2)
Overview
Apache AXIS adalah software open source. Tidak ada yang menjamin source
code-nya jalan. Kesulitan biasanya dialami justru pada instalasi APACHE AXIS
di Web Server. Bab ini memberikan alternatif lain implementasi Web Service
di ASP.NET.
Tujuan
Mengenalkan pembuatan Web Service di ASP.NET
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 2 179 PAGE 10
16.1 Web Service di ASP.NET
Beragam aplikasi dapat memiliki komponen Web Service. Web Service dapat
dibuat dalam bahasa apapun.
16.2 Contoh
Pada contoh berikut digunakan ASP.NET untuk membuat Web Service
sederhana yang mengkonversikan suhu Fahrenheit ke Celsius, dan sebaliknya:
<%@ WebService Language="VBScript"
Class="TempConvert" %>
Imports System
Imports System.Web.Services
Public Class TempConvert :Inherits WebService
<WebMethod()> Public Function FahrenheitToCelsius
(ByVal Fahrenheit As String) As String
dim fahr
fahr=trim(replace(Fahrenheit,",","."))
if fahr="" or IsNumeric(fahr)=false then return
"Error"
return ((((fahr) - 32) / 9) * 5)
end function
<WebMethod()> Public Function CelsiusToFahrenheit
(ByVal Celsius As String) As String
dim cel
cel=trim(replace(Celsius,",","."))
if cel="" or IsNumeric(cel)=false then return
"Error"
return ((((cel) * 9) / 5) + 32)
end function
end class
Dokumen ini disimpan sebagai file .asmx. Ini adalah esktensi file ASP.NET
untuk Web Service XML.
Politeknik Telkom Praktikum Pemrograman XML
180 Praktikum Web Service 2 PAGE 10
16.3 Penjelasan
Untuk menjalankan contoh di atas, diperlukan server .NET. Baris pertama
dalam contoh menyatakan bahwa ini adalah Web Service, ditulis dalam
VBScript, dan punya nama class "TempConvert":
<%@ WebService Language="VBScript"
Class="TempConvert" %>
Baris berikutnya meng-import namespace "System.Web.Services" dari .NET
framework:
Imports System
Imports System.Web.Services
Baris berikutnya mendefinisikan class "TempConvert" adalah tipe class
WebService:
Public Class TempConvert :Inherits WebService
Tahap berikutnya adalah pemrograman dasar VB. Aplikasi ini memiliki dua
fungsi. Yang satu mengkonversikan dari Fahrenheit ke Celcius, dan satunya
sebaliknya.
Perbedaan utama dari aplikasi biasa adalah pada fungsi yang didefinisikan
sebagai "WebMethod()". Gunakan "WebMethod()" untuk mengkonversikan
aplikasi menjadi web service:
<WebMethod()> Public Function FahrenheitToCelsius
(ByVal Fahrenheit As String) As String
dim fahr
fahr=trim(replace(Fahrenheit,",","."))
if fahr="" or IsNumeric(fahr)=false then return
"Error"
return ((((fahr) - 32) / 9) * 5)
Politeknik Telkom Praktikum Pemrograman XML
Praktikum Web Service 2 181 PAGE 10
end function
<WebMethod()> Public Function CelsiusToFahrenheit
(ByVal Celsius As String) As String
dim cel
cel=trim(replace(Celsius,",","."))
if cel="" or IsNumeric(cel)=false then return
"Error"
return ((((cel) * 9) / 5) + 32)
end function
Dan terakhir adalah akhir class:
end class
Publikasikan file .asmx pada server dengan dukungan .NET, dan hasilnya sudah
dapat dilihat.
16.4 ASP.NET mengotomatisasikan proses
Dengan ASP.NET, dokumen WSDL and SOAP tidak perlu dibuat manual.
ASP.NET otomatis membuat rquest WSDL dan SOAP.
Politeknik Telkom Praktikum Pemrograman XML
182 Praktikum Web Service 2 PAGE 10
Rangkuman
1. Alternatif selain Java untuk membuat web service adalah ASP.NET
2. ASP.NET membuat otomatis WSDL dan SOAP.
Latihan
1. Lihat dokumen WSDL dan SOAP yang disediakan ASP.NET,
benarkah dalam bentuk XML?
2. Buatkan web service untuk mencari Keliling dan Luas Lingkaran di
ASP.NET.
Politeknik Telkom Praktikum Pemrograman XML
Daftar Pustaka
1. Ian Wang, “Deploying Web Service”, users.cs.cf.ac.uk/
I.N.Wang/teaching/lecture a Deploying Web Services.ppt, Maret
2009
2. NIIT, XML Courseware, “02-Querying XML Documents”, NIIT
Publishing, 2004
3. www.w3schools.com, Web Services Tutorial, Maret 2009
4. www.w3schools.com, WSDL Tutorial, Maret 2009
5. www.w3schools.com, SOAP Tutorial, Maret 2009
6. www.w3schools.com, UDDI Tutorial, Maret 2009
7. http://jakarta.apache.org/tomcat , Apache Tomcat (version 4.1.x)
8. http://java.sun.com , java
9. http:/ws.apache.org/axis/, Apache AXIS