Anda di halaman 1dari 189

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

Kata Pengantar
Assalamualaikum 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. Wassalamualaikum Wr. Wb. Bandung, Mei 2009

Christanto Triwibisono Wakil Direktur I Bidang Akademik & Pengembangan

iii PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
iv PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
v PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

vi PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2.

Mahasiswa dapat memahami struktur dokumen HTML Mahasiswa dapat memahami penggunaan data dengan XML
1 PAGE 10

Pengenalan XML

Politeknik Telkom

Praktikum Pemrograman XML

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 :

Pengenalan XML PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

Pengenalan XML

3 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Lalu apa hubungan antara HTML dan XML...?. HTML dan XML adalah samasama 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) :

Pengenalan XML PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Pengenalan XML

5 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Pengenalan XML PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1.

EXtensible Markup Language (XML), merupakan sebuah standar


W3C-endorsed untuk Markup language

2. 3. 4.

5.

Markup language merupakan suatu bahasa pemprograman untuk menandai suatu dokumen yang disebut dengan tag agar dokumen tersebut lebih mudah dibaca, dipahami serta menarik XML memungkinkan penggunaan data secara cross-platform, longterm data format. 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. 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

Pengenalan XML

7 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 wellformed. 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. 2.

Mahasiswa dapat membuat dokumen XML dan file XML yang wellformed Mahasiswa dapat membedakan antara tag, elemen, atribut, Cdata, emtity serta penggunaannya
XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
XML Fundamentals 9 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
10 XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

XML Fundamentals

11 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

12

XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Atau penulisannya dapat juga dengan pengapit petik satu ('). <person died = '1954-06-07' Alan Turing </person> born = '1912-06-23' >

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 &lt;

XML Fundamentals

13 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

sedangkan > dapat kita tuliskan dengan &gt;. 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 &lt;mahasiswa&gt;Joni Suraya&lt;/mahasiswa&gt; </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 &lt. 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>
14 XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

XML Fundamentals

15 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

16

XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

XML Fundamentals

17 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

18

XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

XML Fundamentals

19 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

20

XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3. 4.

Dokumen XML dapat disimpan dengan extensi XML ataupun yang lainnya asal didalam file tersebut merupakan dokumen XML Penulisan XML name harus mengandung karakter yang sering diunakan seperti a-z, A-Z, 0-9, -, _. CData digunakan untuk membolehkan kita untuk menuliskan karakter yang merupakan karakter entity. Komentar merupakan kode yang tidak akan dieksekusi oleh parser

XML Fundamentals

21 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Latihan

1.

Buatlah dokumen mahasiswa yang terdiri dari nama, kelas, hobi dan nim merupakan atribut dari mahasiswa tersebut. Sehingga tampilannya seperti berikut :

gambar soal

22

XML Fundamentals PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3.

Mahasiswa mehamami apa yang dimaksud dengan DTD Mahaiswa dapat menggunakan DTD untuk elemen dan atribut. Mahasiswa dapat membuat dokumen XML berdasarkan DTD yang sudah ada.
23 PAGE 10

Document Type Definitions

Politeknik Telkom

Praktikum Pemrograman XML

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 :

24

Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

Document Type Definitions

25 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

26

Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
Document Type Definitions 27 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

28

Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
Document Type Definitions 29 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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>
30 Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<profesi>Dosen</profesi> <profesi>Pedagang</profesi> </orang> Dan membuat dokumen baru dengan nama orang.dtd yang isinya sebagai berikut : <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT orang (nama, profesi*)> nama (nama_depan | nama_belakang)> nama_depan (#PCDATA)> nama_belakang (#PCDATA)> 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 :
Document Type Definitions 31 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<!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.
32 Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

Document Type Definitions

33 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

34

Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 "admin@somethingweb.com"> ]> <orang> <nama>Hendra Kusmayadi</nama> <email>&mail;</email> </orang> Jika kita jalankan maka tampilannya akan seperti gambar dibawah :

Document Type Definitions

35 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.
36 Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 representasikan didalam entiti"> Contoh penulisannya adalah dengan : <!ENTITY % pub "Editions Gallimard" > <!ENTITY rights "All rights reserved" > <!ENTITY book "La Peste: Albert Camus, &#xA9; 1947 %pub;. &rights;"> Adapun maksud dari deklarasi diatas adalah string %pub akan diisi oleh &#xc9;ditions Gallimard, sehingga jika kita menuliskan &book pada dokumen XML, maka hasilnya adalah : La Peste: Albert Camus, 1947 Editions Gallimard. yang ingin kita

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.
Document Type Definitions 37 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 <!ELEMENT <!ELEMENT <!ELEMENT date month day year (month, day, year)> (#PCDATA)> (#PCDATA)> (#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 <!ELEMENT <!ELEMENT <!ELEMENT
38

paragraph definition emphasize biography

%top_level; %top_level; %top_level; %top_level;

> > > >


Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Document Type Definitions

39 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3.

Aplikasi XML harus memastikan bahwa dokumen yang diberikan adalah benar-banar mematuhi aturan DTD digunakan untuk mendeklarasikan semua elemen dan atribut yang akan digunakan pada dokumen XML DTD dibuat untuk memeriksa kevalid-ad sebuah dokumen XML, apakan dokumen XML yang dibuat sudah mengacu pada DTD yang ada.

40

Document Type Definitions PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3.

Mahasiswa dapat memahami maksud dan tujuan dari pembuatan namespace Mahasiswa dapat membedakan kapan harus menggunakan namespace dan kapan tidak Mahasiswa Menggunakan namespace pada kasus yang sesuai
41 PAGE 10

Namespaces

Politeknik Telkom

Praktikum Pemrograman XML

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>

42

Namespaces PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

Namespaces

43 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

44

Namespaces PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2.

Namespaces dibuat dengan tujuan untuk membedakan nama elemen yang sama namun memiliki atri yang berbeda. Namespaces diimplementasikan dengan menempelkan awalan untuk setiap elemen dan atribut.

Namespaces

45 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 searchengine spiders dapat dengan mudah menentukan makna dari konten.

Tujuan

1. 2. 3. 4.

Mahasiswa Dapat mengerti XHTML Mahasiswa dapt membedakan antara XHTML dengan HTML Mahasiswa dapat menuliskan XHTML dengan aturan-aturan yang telah ditetapkan Mahasiswa memahamin cara kerja XHTML dalam menampilkan dokumen
XML pada Web PAGE 10

46

Politeknik Telkom

Praktikum Pemrograman XML

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 &amp; and &lt;. Misalnya ubah A&P menjadi A&amp;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 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
XML pada Web

1.0

47 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

24. Transitional Digunakan apabila kita tidak ingin ada file CSS yang terlibat. Penulisannya adalah sebagai berikut : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd" > 1.0

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 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1frameset.dtd"> 1.0

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/xhtml1transitional.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 :

48

XML pada Web PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
XML pada Web 49 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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/22rdf-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"?>
50 XML pada Web PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3. 4.

XML merupakan bahasa yang masih sangat menarik untuk gunakan didalam halaman web Penggunaan XML pada web berbentuk XHTML Dokumen XHTML mendefinisikan kompetibeliti dar XML Dokumen XHTML harus well-formed agar bisa ditampilkan pada
halaman browser

XML pada Web

51 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3.

Mahasiswa dapat memahami XSLT Mahasiswa dapat menspesifikasikan XSLT pada dokumen XML Mahasiswa dapat membuat XSLT pada dokumen XML

52

XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 wellformed. 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 :

XSL Transformation (XSLT)

53 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<?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"/>
54 XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

XSL Transformation (XSLT)

55 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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"?>
56 XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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 applytemplates <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
XSL Transformation (XSLT) 57 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

58

XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.
XSL Transformation (XSLT) 59 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
60 XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
XSL Transformation (XSLT) 61 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

62

XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

XSL Transformation (XSLT)

63 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

64

XSL Transformation (XSLT) PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3.

XSLT merupakan aplikasi XML untuk menspesifikasikan aturan antara dokumen XML yang satu ditranformasikan menjadi dokumen XML lainnya XSLT mirip dengan bahasa pemprograman Tujuan pembuatan XSLT adalah untuk memilih-milah elemen dokumen yang akan dotampilkan sesuai dengan keinginan

XSL Transformation (XSLT)

65 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3.
66

Mahasiswa dapt memahami arti XPath Mahasiswa dapat mengetahui semua bagian-bagian XPath Mahasiswa dapat membuat XPath pada XSLT
XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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" ?>
XPath 67 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

68

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

XPath

69 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

70

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :
XPath 71 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

72

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

XPath

73 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

74

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
XPath 75 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 : + * div mod remainder Addition Subtraction Multiplication Division Taking the

Contoh : <xsl:value-of select="6*7"/>, dalam template XSLT akan menghasilkan nilai 42. contohnya mari kita buat file XSL yang akan

76

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

XPath

77 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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].

78

XPath PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3. 4.

XPath merupakan bahasa untuk mengalamati bagian-bagian didalam dokumen XML struktur XPath mirip dengan hirarki direktori pada hardisk
Untuk mengarahkan kita pada data tertentu, kita dapat memanggilnya dengan menggunakan pemanggilan mirip dengan direktori folter pada hardisk. XPath dijalankan dengan menggunakan XSLT.

XPath

79 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3. 4.
80

Mahasiswa dapat mengerti yang dimaksud dengan XLink Mahasiswa dapat membedakan XLink pada XML dan tag A pada HTML Mahasiswa dapat memahami struktur serta atrubut yang ada pada XLink Mahasiswa dapat menggunakan XLink pada Dokumen XML.
XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

XLinks

81 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :

82

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

XLinks

83 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 :
84 XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
XLinks 85 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

86

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

XLinks

87 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2.

XLink merupakan atribut yang berbasi sistaks untuk melampirkan link dokumen XML yang memungkinkan user untuk menambahkan hyperlinking kesuatu dokumen. XLink dapat berarti tag a pada HTML yang dapat menampilkan resource tujuan pada halaman browser

88

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2. 3.

Mahasiswa dapat memahami XPointer Mahasiswa dapat menjelaskan struktur yang ada dalam XPointer Mahasiswa dapat membuat XPointer dalam dokumen XML
89 PAGE 10

XLinks

Politeknik Telkom

Praktikum Pemrograman XML

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>
90 XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

XLinks

91 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

92

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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( ).
XLinks 93 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 startpoint( ) 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))
94 XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

XLinks

95 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3. 4.

XPointer digunakan untuk mengidentifikasi lokasi didalam dokumen XML XPointer dapat digunakan pada URL dan link XPointer dibuat untuk menandai gaiang-bagian yang ada didalam dokumen XML dan semua sintaksnya dapat langsung mengarahkan penampilah pada lokasi yang diinginkan. Selain pada bagian penanda, XPointer juga dapat menandai sesuatu didalam elemen berdasarkan tag, komentar dan yang lainnya

96

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

10 XML Schemas

Overview

Meskipun Document Type Definitions (DTD) dapat menerapkan aturandasar 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. 2. 3.

Mahasiswa dapat memahami penggunaan schema Mahasiswa dapat menggunakan schema pada dokumen XML Mahasiswa dapat membedakan antara schema dan DTD
97 PAGE 10

XLinks

Politeknik Telkom

Praktikum Pemrograman XML

Overview
Sebuah dokumen XML yang dideskripsikan oleh skema disebut dengan instance document. Jika dokumen memenuhi semua konstrain yang dispesifikasikan oleh skema, maka dianggap sebagai schema-valid. Schemas Versus DTDs DTDs memberikan kemampuan dasar untuk melakukan validasi item berikut dalam dokumen XML: 55. Element nesting 56. Element occurrence constraints 57. Permitted attributes 58. Attribute types and default values Sedangkan skema standar memasukan : 59. Simple and complex data types 60. Type derivation and inheritance 61. Element occurrence constraints 62. Namespace-aware element and attribute declarations Namespace Issues DTDs tidak memberikan dukungan bagi eksplisit menyatakan namespaceaware 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>

98

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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/XMLSchemainstance" 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 :
XLinks 99 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 &amp; Associates </xs:documentation> </xs:annotation> <xs:element name="fullName" type="xs:string"/> </xs:schema>

100

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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">
XLinks 101 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

102

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
XLinks 103 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

104

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Mixed Content
Untuk menggabungkan dokumen XML dengan schema (xsd), kita dapat menggunakan kode sebagai berikut : <letter xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" "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"/>
XLinks 105 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

106

XLinks PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3.

Pada dasarnya kegunaan skema adalah untuk melengkapi kekurangankekurangan yang ada pada DTD. Skema dapat menjelaskan complex restrictions pada elemen dan atribut bahkan Beberapa skema dapat dikombinasikan menjadi dokumen yang menggunakan beberapa kosakata XML Sebuah dokumen XML yang dideskripsikan oleh skema disebut dengan instance document.

XLinks

107 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

108

Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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?


Praktikum DOM 109 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
110 Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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">
Praktikum DOM 111 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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';
112 Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. BUKUPRAKT-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:

Praktikum DOM

113 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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;
114 Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

Praktikum DOM

115 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Jika dijalankan, akan muncul form kosong, dan silahkan diisi text untuk Kode Produk.

Jika button Cari! di-klik, maka akan didapatkan hasil berikut:

116

Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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;
Praktikum DOM 117 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

} } } } 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;
118 Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

mfObject = new ActiveXObject("Scripting.FileSystemObject"); NewSampleFile = mfObject.CreateTextFile("C:/Documents and Settings/Toshiba/My Documents/1. POLTEKTELKOMdanNTC/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:

Praktikum DOM

119 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Setelah diganti harganya, dan button simpan di-clik, data akan diubah dan disimpan ke file produk.xml. Ditampilkan hasil akhirnya dengan Mozilla sebagai berikut:

120

Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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) {

Praktikum DOM

121 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
122 Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

var OutputXML = xmldoc.xml; var mfObject, NewSampleFile; mfObject = new ActiveXObject("Scripting.FileSystemObject"); NewSampleFile = mfObject.CreateTextFile("C:/Documents and Settings/Toshiba/My Documents/1. POLTEKTELKOMdanNTC/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.

Praktikum DOM

123 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Dan jika tombol Hapus ditekan, dokumen XML akan disimpan, dan jika ditampilkan dengan Mozilla, akan didapatkan hasil berikut:

124

Praktikum DOM PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3. 4. 5.

DOM dapat digunakan untuk mengakses dokumen XML. Fungsi alert pada JavaScript dan property xml dari objek Dokumen dapat digunakan untuk menampilkan isi dokumen XML. Method createElement(x), appendChild(x), dan property text dari elemen bermanfaat untuk menyisipkan data baru. Method getElementsByTagName(tag) bermanfaat untuk mencari data yang dikehendaki. Untuk selanjutnya dapat diganti. Method removeChild(node) bermanfaat untuk menghapus.

Latihan

1. 2.

Integrasikan modul-modul di atas dalam suatu kesatuan halaman HTML, sedemikian rupa, dari satu halaman utama, dapat melakukan semua yang telah disebutkan tersebut. Kembangkan lebih lanjut aplikasi di atas untuk mengelola data pelanggan dan order produknya sekaligus.

Praktikum DOM

125 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

126

Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
Praktikum DOM 2 127 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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
128 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>&nbsp;</p> <p align="center"><font face="Verdana, Arial, Helvetica, sansserif"><b><u>Penguji XML DTD
Praktikum DOM 2 129 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

</u></b></font></p> <p>&nbsp;</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>&nbsp;</p> <p>&nbsp; </p> <p>&nbsp; </p>
130 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

Praktikum DOM 2

131 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
132 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

</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;
Praktikum DOM 2 133 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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(); }
134 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

</script> <p>&nbsp;</p> <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><b><u>Penguji XML - XSD </u></b></font></p> <p>&nbsp;</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>&nbsp;</p> <p>&nbsp;</p>
Praktikum DOM 2 135 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<p>&nbsp;</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.

136

Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
Praktikum DOM 2 137 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

</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>
138 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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>
Praktikum DOM 2 139 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

</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;
140 Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>

Praktikum DOM 2

141 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

142

Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Jika tampilan tabel dipilih, maka akan dihasilkan tampilan berikut.

Jika tampilan list dipilih, maka akan dihasilkan tampilan berikut.

Praktikum DOM 2

143 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2. 3.

Property validateOnParse jika diset true akan bermanfaat untuk memvalidasi dokumen XML dengan DTD. Dibutuhkan objek XMLSchemaCache, property schemas dokumen DOM yang diisi nama file xsl, dan validateOnParse yang diisi true bermanfaat untuk memvalidasi dokumen XML dengan XSL. Untuk menampilkan dokumen XML menggunakan XSL dibutuhkan : - dua objek FreeThreadedDOMDocument untuk mengambil masing-masing file XSL dan XML - Objek XSLTemplate, property stylesheetnya 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.

144

Praktikum DOM 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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
Praktikum SAX 145 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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:

146

Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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(); }
Praktikum SAX

147 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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);
148 Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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;
Praktikum SAX 149 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

} /* 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:
150 Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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;

Praktikum SAX

151 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 {
152 Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

} 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.

Praktikum SAX

153 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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);
154 Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

} 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); }
Praktikum SAX 155 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

public void characters(char buf[], int offset, int len) throws SAXException { stringBuffer.append(buf, offset, len); } } Jika dijalankan akan menghasilkan:

156

Praktikum SAX PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

Praktikum SAX

157 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

158

Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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"
Praktikum WSDL 159 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
160 Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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</serviceinterface> <wsdl-service-name xmlns:serviceNS="urn:Foo">serviceNS:TempConverterWebService</wsdlservice-name> <port-mapping> <port-name>TempConverterInterfacePort</port-name> <java-port-name>TempConverterInterfacePort</java-port-name> </port-mapping> </service-interface-mapping> <service-endpoint-interface-mapping>
Praktikum WSDL 161 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<service-endpointinterface>temp_converter.TempConverterInterface</service-endpointinterface> <wsdl-port-type xmlns:portTypeNS="urn:Foo">portTypeNS:TempConverterInterface</wsdlport-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.
162 Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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, strongwilled, independent, and self-confident."; /* Virgo sun sign trait */
Praktikum WSDL 163 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 */
164 Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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>
Praktikum WSDL 165 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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">
166 Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

<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</wsdlservice-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</serviceendpoint-interface> <wsdl-port-type xmlns:portTypeNS="urn:Foo">portTypeNS:HoroscopeInterface</wsdl-porttype> <wsdl-binding xmlns:bindingNS="urn:Foo">bindingNS:HoroscopeInterfaceBinding</wsdlbinding> <service-endpoint-method-mapping> <java-method-name>getSunSignTrait</java-method-name> <wsdl-operation>getSunSignTrait</wsdl-operation>
Praktikum WSDL 167 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

168

Praktikum WSDL PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

Praktikum Web Service 1

169 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Web Server
(e.g. Apache Tomcat)

Web Service Toolkit


(e.g. Apache Axis)

Web Service Code


(e.g. Java)

Gambar 12.1 Web Service Toolkit memudahkan pekerjaan


170 Praktikum Web Service 1 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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:

Praktikum Web Service 1

171 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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; } }

172

Praktikum Web Service 1 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

Praktikum Web Service 1

173 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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 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; } getCalculator(URL portAddress) throws

Tahap 3: Tulis kode client import Calculator.*; public class CalcClient { public static void main(String[] args) {
174 Praktikum Web Service 1 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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:
Client
(e.g. CalcClient.java)

Web Server
(e.g. Apache Tomcat)

Java

Web Service Toolkit


(e.g. Apache Axis)

SOAP Binding
Java to SOAP

Web Service Code


SOAP Request
(e.g. Calculator.java)

SOAP to Java

Java

Praktikum Web Service 1

175 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Pesan SOAP dan data yang dikirimkan adalah:


<soap:Envelope <soap:Body> <add> <i1>10</i1> calculator.add(10, 5) <i2>5</i2> </add> </soap:Body> </soap:Envelope>

Client
(e.g. CalcClient.java)

Web Server
(e.g. Apache Tomcat)

Java

Web Service Toolkit


(e.g. Apache Axis)

SOAP Binding

Java to SOAP
add(10, 5)

Web Service Code


(e.g. Calculator.java)

SOAP Request

SOAP to Java

Java

Dan jawabannya adalah:


Client
Java

Web Server
(e.g. Apache Tomcat)

Web Service Toolkit SOAP Binding


SOAP to Java
(e.g. Apache Axis)

Web Service Code


SOAP Response Java to SOAP Java

176

Praktikum Web Service 1 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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. 2.

Buatkan web service untuk mengkonversikan suhu Fahrenheit ke Celcius dan sebaliknya di Apache AXIS. Buatkan web service untuk mencari Keliling dan Luas Lingkaran di Apache AXIS.

Praktikum Web Service 1

177 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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

178

Praktikum Web Service 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Praktikum Web Service 2

179 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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)
180 Praktikum Web Service 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

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.

Praktikum Web Service 2

181 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Rangkuman

1. 2.

Alternatif selain Java untuk membuat web service adalah ASP.NET ASP.NET membuat otomatis WSDL dan SOAP.

Latihan

1. 2.

Lihat dokumen WSDL dan SOAP yang disediakan ASP.NET, benarkah dalam bentuk XML? Buatkan web service untuk mencari Keliling dan Luas Lingkaran di ASP.NET.

182

Praktikum Web Service 2 PAGE 10

Politeknik Telkom

Praktikum Pemrograman XML

Daftar Pustaka
1. 2. 3. 4. 5. 6. 7. 8. 9. Ian Wang, Deploying Web Service, users.cs.cf.ac.uk/ I.N.Wang/teaching/lecture a Deploying Web Services.ppt, Maret 2009 NIIT, XML Courseware, 02-Querying XML Documents, NIIT Publishing, 2004 www.w3schools.com, Web Services Tutorial, Maret 2009 www.w3schools.com, WSDL Tutorial, Maret 2009 www.w3schools.com, SOAP Tutorial, Maret 2009 www.w3schools.com, UDDI Tutorial, Maret 2009 http://jakarta.apache.org/tomcat , Apache Tomcat (version 4.1.x) http://java.sun.com , java http:/ws.apache.org/axis/, Apache AXIS

Anda mungkin juga menyukai