Politeknik Telkom
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
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
iii PAGE 10
Politeknik Telkom
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
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
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
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
Politeknik Telkom
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
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) :
Politeknik Telkom
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.
Pengenalan XML
5 PAGE 10
Politeknik Telkom
Buatlah sebuah contoh dokumen XML seperti pada contoh dibawah ini dan simpan kedalam file contoh2.xml : <?xml version="1.0"?> <product barcode="2394287410"> <manufacturer>Verbatim</manufacturer> <name>DataLife MF 2HD</name> <quantity>10</quantity> <size>3.5"</size> <color>black</color> <description>floppy disks</description> </product> jika dokumen tersebut kita buka menggunakan web browser, maka tampak seperti gambar dibawah ni :
Dokumen diatas menjelaskan sebuah data produk yang ada pada suatu supermarket. Produk tersebut memiliki kode barcode= 2394287410, manufacturer=Verbatim, name=DataLife MF 2HD, quantity=10, size=3.5", color=black, description=floppy disks.
Politeknik Telkom
Rangkuman
1.
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
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
Politeknik Telkom
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
</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
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
Politeknik Telkom
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 <
XML Fundamentals
13 PAGE 10
Politeknik Telkom
sedangkan > dapat kita tuliskan dengan >. Sebagai contoh, misalnya kita ingin menuliskan data tutorial XML : <tutorial> <judul>Menuliskan Elemen Sedrhana</judul> <penulis>Hendra Kusmayadi</penulis> <isi> Berikut adalah contoh penulisan elemen sederhana <mahasiswa>Joni Suraya</mahasiswa> </isi> </tutorial> Jika dokumen tersebut dijalankan, maka tampilan tersebut akan terlihat seperti gambar dibawah ini :
CDATA Sections
Pada bahasan sebelumnya kita telah membahas apa yang namannya entity references dimana jika kita akan menuliskan string < maka yang kita tuliskan adalah entitasnya yaitu <. Namun, dengan menggunakan CDATA kita dapat menuliskan string atau karakter tersebut tanpa harus menggunakan entitas. Cara penulisannya adalah dengan diawali string <![CDATA[ dan diakhiri dengan ]]>. Sebagai contoh, buatlah kode berikut yang menerapkan CDATA dan simpan file tersebut dengan nama contoh2_4.xml. <tutorial> <judul>Menuliskan Elemen Sedrhana</judul> <penulis>Hendra Kusmayadi</ penulis > <isi>
14 XML Fundamentals PAGE 10
Politeknik Telkom
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
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
Politeknik Telkom
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.
XML Fundamentals
17 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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
6.
Tidak ada unescaped < atau & atau tanda-tanda lainnya <mahasiswa>Johan < Sabima</mahasiswa> Jika dijalankan maka akan tampak seperti berikut :
20
Politeknik Telkom
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
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
Politeknik Telkom
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
Politeknik Telkom
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
Politeknik Telkom
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 :
25 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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
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
Politeknik Telkom
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
<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
<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
<!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
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>
33 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
Jika kita jalankan dokumen diatas akan tampak seperti gambar berikut :
35 PAGE 10
Politeknik Telkom
Politeknik Telkom
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, © 1947 %pub;. &rights;"> Adapun maksud dari deklarasi diatas adalah string %pub akan diisi oleh Éditions Gallimard, sehingga jika kita menuliskan &book pada dokumen XML, maka hasilnya adalah : La Peste: Albert Camus, 1947 Editions Gallimard. 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
<!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
Politeknik Telkom
39 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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
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
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
44
Namespaces PAGE 10
Politeknik Telkom
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
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
XHTML
XHTML merupakan definisikan XML-compatible versi HTML, atau sebaliknya. XHTML dapat mengubah HTML sebagai aplikasi XML. XHTML merupakan standard dalam menyusun kode-kode HTML yang baik dan terstruktur. Sebagian besar pengubahan dokumen HTML menjadi dokumen XHTML adalah dengan membuat dokumen well-formed. Misalnya perubahan yang akan dilakukan : 14. Tambahkan missing end-tag seperti </p> dan </li> jika pada dokumen tidak ada end-tag-nya. 15. Tulis kembali dokumen yang yag-nya saling timpang tindih, misalnya <b><i>apa</b></i> menjadi <b><i>apa</i></b> 16. Letakkan tanda petik pada nilai atribut jika kita sering menggunakan nilai atribut tanpa tanda petik. Misalnya <p align=center> menjadi <p align="center">. 17. Tambahkan nilai pada atribut yang memiliki nilai boolean dengan namanya sendiri. Misalnya <input type="checkbox" checked> menjadi <input type="checkbox" checked="checked">. 18. Ganti karakter & atau < dalam data atau atribut dengan nilai-nilai & and <. Misalnya ubah A&P menjadi A&P 19. Jadikan dokuen sebagai single root element html. 20. Ubah empty elemen. Misalnya <hr> menjadi <hr/> atau <hr></hr> 21. Tambahkan hyphens kedalam komentar. Misalnya <! this is a comment> menjadi <!-- this is a comment --> 22. Encode kedalam UTF-8 atau UTF-16. XHTML dibagi menjadi tiga bagian, yaitu : 23. Strict Merupakan puncaknya standard, ini digunakan apabila kita benar-benar menginginkan kode yang benar-benar terstruktur. Beberapa tag sudah dihilangkan disini seperti <iframe>. Kita harus mengkombinasikan antara XHTML dan CSS. Penulisannya adalah sebagai berikut : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd">
XML pada Web
1.0
47 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
Politeknik Telkom
Selanjutnya jalankan dokumen XML, maka dapat kita lihat tampilannya sebagai berikut :
Politeknik Telkom
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
51 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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 :
53 PAGE 10
Politeknik Telkom
Politeknik Telkom
<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.
55 PAGE 10
Politeknik Telkom
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
<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
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
Politeknik Telkom
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
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 :
Politeknik Telkom
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
<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
Politeknik Telkom
63 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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
65 PAGE 10
Politeknik Telkom
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
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
<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
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
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
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
<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
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
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
Jika dijalankan, maka hasil tampilannnya dapat kita lihat seperti berikut :
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
elemen mahasiswa yang angkatannya lebih dari 2007, maka penulisanhya seperti berikut : ... <xsl:apply-templates select="/mahasiswa[@angkatan>=2007]"/> ...
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
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
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
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
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
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
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
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
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
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
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>
86
XLinks PAGE 10
Politeknik Telkom
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
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
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
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
</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
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
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
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))
Politeknik Telkom
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
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
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
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
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
XML Scema juaga memiliki atribut xs:annotation yang digunakan untuk menjamin bahwa komentar akan tetap utuh hingga proses parsing selesai. Annotation memiliki konbinasi: 7. Elemen xs:documentation <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:annotation> <xs:documentation xml:lang="en-us"> Simple schema example from O'Reilly's <a href="http://www.oreilly.com/catalog/xmlnut">XML in a Nutshell.</a> Copyright 2002 O'Reilly & Associates </xs:documentation> </xs:annotation> <xs:element name="fullName" type="xs:string"/> </xs:schema>
100
XLinks PAGE 10
Politeknik Telkom
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
<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
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.
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
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
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>
Politeknik Telkom
</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
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
11 PRAKTIKUM DOM
Overview
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
Politeknik Telkom
Politeknik Telkom
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
digunakan adalah Internet Explorer. Program di atas jika dipanggil dengan Internet Explorer akan menghasilkan :
Politeknik Telkom
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
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
Cara insert data tidak hanya seperti program di atas. Mungkin dibuat program lain untuk maksud tersebut.
Politeknik Telkom
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
Jika dijalankan, akan muncul form kosong, dan silahkan diisi text untuk Kode Produk.
116
Politeknik Telkom
Politeknik Telkom
} } } } 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
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
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
Politeknik Telkom
<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
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
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
Dan jika tombol Hapus ditekan, dokumen XML akan disimpan, dan jika ditampilkan dengan Mozilla, akan didapatkan hasil berikut:
124
Politeknik Telkom
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
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
Politeknik Telkom
Politeknik Telkom
<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
transformedwindow.document.write('<b>Error Position: </b><br>' + error.linepos + '<br>'); //Tulis posisi kesalahan transformedwindow.document.write('<b>Error Reason: </b><br>' + error.reason + '<br>'); //Tulis alasan kesalahan transformedwindow.document.write('</BODY></HTML>'); } else { transformedwindow.document.write('<HTML><TITLE>Chek XML DTD </Title><BODY><b>Tidak ada kesalahan </b><br>'); //Tulis pesan transformedwindow.document.write('</BODY></HTML>'); } } function doReset() { /* document.frmTransform.TxtXMLFileName.value=""; if (!(typeof transformedwindow == "undefined")) transformedwindow.close(); */ } </script> </head> <body bgcolor="#6699CC" text="#FFFFFF"> <p> </p> <p align="center"><font face="Verdana, Arial, Helvetica, sansserif"><b><u>Penguji XML DTD
Praktikum DOM 2 129 PAGE 10
Politeknik Telkom
</u></b></font></p> <p> </p> <form name="frmTransform" method="post" action=""> <table width="75%" border="0" align="center"> <tr> <td width="31%"> <div align="center"><b>File XML:</b></div> </td> <td width="18%"> <input type="text" name="TxtXMLFileName"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"></font> </td> <td width="10%"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <a href="#" onClick="javascript:doValidate()">Cek</a> <!--buat link Validate memanggil fungsi dovalidate() jika di-clicked--> </font> </td> <td width="41%"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> <a href="#" onClick="javascript:doReset()">Reset</a> </font> </td> </tr> <tr> <td width="31%"> </td> <td colspan="3"> </td> </tr> <tr> <td colspan="4"> <div align="left"></div> <div align="left"></div> </td> </tr> </table> <p> </p> <p> </p> <p> </p>
130 Praktikum DOM 2 PAGE 10
Politeknik Telkom
<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
Dan hasilnya :
Politeknik Telkom
</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
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
</script> <p> </p> <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><b><u>Penguji XML - XSD </u></b></font></p> <p> </p> <form name="frmTransform" method="post" action=""> <table width="75%" border="0" align="center"> <tr> <td> <div align="center"><b>File XML:</b></div> </td> <td> <input type="text" name="TxtXMLFileName"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="#" onclick="javascript:doValidate()">Check</a></font> </td> </tr> <tr> <td> <div align="center"><b>File XSD:</b></div> </td> <td> <input type="text" name="TxtXSDFileName"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="#" onclick="javascript:doReset()">Reset</a></font> </td> </tr> <tr> <td colspan="2"> <div align="left"></div> <div align="left"></div> </td> </tr> </table> <p> </p> <p> </p>
Praktikum DOM 2 135 PAGE 10
Politeknik Telkom
<p> </p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"> </font></p> </form> </body> </html> Pastikan product.xml dan product.xsd berada di folder yang sama dengan file program ini. Berikut adalah contoh masukan product.xml dan product.xsd.
136
Politeknik Telkom
Politeknik Telkom
</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
<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
</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
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
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
Politeknik Telkom
Praktikum DOM 2
143 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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
146
Politeknik Telkom
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
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
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
} /* 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 SAX
151 PAGE 10
Politeknik Telkom
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
} 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
Politeknik Telkom
} 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
public void characters(char buf[], int offset, int len) throws SAXException { stringBuffer.append(buf, offset, len); } } Jika dijalankan akan menghasilkan:
156
Politeknik Telkom
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
14 PRAKTIKUM WSDL
Overview
Bab ini akan menunjukkan bagaimana membuat WSDL, Web Service Description Language dari Web Service Java.
Tujuan
158
Politeknik Telkom
Politeknik Telkom
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
<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
<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
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
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
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
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
<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
<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
Politeknik Telkom
Overview
Bab ini akan membahas implementasi Web Service di Apache AXIS di Apache Tomcat.
Tujuan
169 PAGE 10
Politeknik Telkom
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)
Politeknik Telkom
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:
171 PAGE 10
Politeknik Telkom
Jika install axis sukses, maka dapat dipanggil dari Mozilla dengan http://localhost:8080/axis/ akan diperoleh tampilan berikut:
172
Politeknik Telkom
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
173 PAGE 10
Politeknik Telkom
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
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
SOAP Binding
Java to SOAP
SOAP to Java
Java
175 PAGE 10
Politeknik Telkom
Client
(e.g. CalcClient.java)
Web Server
(e.g. Apache Tomcat)
Java
SOAP Binding
Java to SOAP
add(10, 5)
SOAP Request
SOAP to Java
Java
Web Server
(e.g. Apache Tomcat)
176
Politeknik Telkom
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.
177 PAGE 10
Politeknik Telkom
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
178
Politeknik Telkom
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.
179 PAGE 10
Politeknik Telkom
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
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.
181 PAGE 10
Politeknik Telkom
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
Politeknik Telkom
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