i PAGE 10
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.
ii PAGE 10
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, Maret 2009
iii PAGE 10
Politeknik Telkom
DAFTAR ISI
KATA PENGANTAR ............................. Error! Bookmark not defined. DAFTAR ISI .................................................................................... iv 1 Pengenalan XML ................................................................... 1 1.1 Keuntungan XML ........................................................................................... 2 1.2 Portable Data .................................................................................................... 3 1.3 Bagaimana XML Bekerja ............................................................................... 3 1.4 Evolusi dari XML ............................................................................................ 5 2 XML Fundamentals ................................................................. 9 2.1 Dokumen XML dan File XML ...................................................................10 2.2 Elemen, Tag, dan Data karakter ...............................................................10 2.3 Atribut ............................................................................................................13 2.4 XML Name .....................................................................................................14 2.5 Entity References ............................................................................................15 2.6 CDATA Sections ..............................................................................................16 2.7 Komentar.......................................................................................................16 2.8 Processing Instruction .....................................................................................17 2.9 Deklarasi XML ..............................................................................................19 2.10 Checking Documents for Well-Formedness .................................................20 3 Document Type Definitions (DTDs) ......................................22 3.1 Validation .........................................................................................................23 3.2 Element Declarations .....................................................................................25 3.3 Deklarasi Atribut..........................................................................................28 3.4 General Entity Declarations ...........................................................................30 3.5 External Parsed General Entities ...................................................................30 3.6 External Unparsed Entities and Notations...................................................31 3.7 Parameter Entities ..........................................................................................32 3.8 Conditional Inclusion.......................................................................................34 3.9 Dua contoh DTD.........................................................................................34 3.10 Menempatkan Standar DTD......................................................................34 4 Namespaces ...........................................................................36 4.1 The Need for Namespaces ...........................................................................37 4.2 Sintaks Namespace........................................................................................37 4.3 How Parsers Handle Namespaces ...............................................................40 4.4 Namespaces dan DTD .................................................................................41 5 XML pada Web.....................................................................44 5.1 XHTML ..........................................................................................................45
iv PAGE 10
Politeknik Telkom
5.2 5.3 5.4 6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 8 8.1 8.2 8.3 8.4 8.5 8.6 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 10 10.1
Direct Display of XML in Browsers ........................................................46 Authoring Compound Documents with Modular XHTML .........................49 Prospects for Improved Web-Search Methods ............................................49 XSL Transformations (XSLT) ..................................................52 An Example Input Document ........................................................................53 xsl:stylesheet dan xsl:transform .....................................................................53 Stylesheet Processors ......................................................................................54 Templates and Template Rules ....................................................................55 Calculating the Value of an Element with xsl:value-of ................................56 Applying Templates with xsl:apply-templates ..............................................56 The Built-in Template Rules ..........................................................................57 Modes ..............................................................................................................58 Attribute Value Templates .............................................................................58 XSLT and Namespaces ...............................................................................59 Other XSLT Elements ....................................................................................59 XPath ....................................................................................61 The Tree Structure of an XML Document ..................................................62 Location Paths .................................................................................................62 Compound Location Paths .............................................................................65 Predicates ........................................................................................................66 Unabbreviated Location Paths .......................................................................67 General XPath Expressions ...........................................................................68 XPath Functions ..............................................................................................69 XLinks ...................................................................................72 Simple Links ....................................................................................................73 Link Behavior ...................................................................................................73 Link Semantics ................................................................................................74 Extended Links ................................................................................................75 Linkbases .........................................................................................................77 DTD untuk XLink ........................................................................................77 XPointer................................................................................79 XPointers pada URL ....................................................................................80 XPointers pada Link ....................................................................................81 Bare Names ....................................................................................................82 Child Sequences ..............................................................................................82 Namespaces ...................................................................................................82 Points ...............................................................................................................83 Ranges .............................................................................................................84 XML Schemas .......................................................................86 Overview .......................................................................................................87
v PAGE 10
Politeknik Telkom
10.2 Skema Dasar .................................................................................................87 10.3 bekerja dengan Namespace .......................................................................89 10.4 Complex Types ...............................................................................................90 10.5 Empty Elements ..............................................................................................91 10.6 Simple Content ...............................................................................................91 10.7 Mixed Content ................................................................................................92 10.8 Allowing Any Content .....................................................................................92 10.9 Controlling Type Derivation ...........................................................................93 11 DOCUMENT OBJECT MODEL..............................................97 11.1 Pengantar ..........................................................................................................98 11.2 Implementasi dalam MSXML Parser ..........................................................98 11.3 DOM Objects ............................................................................................... 100 12 SIMPLE API FOR XML (SAX) ...........................................112 12.1 Pengantar SAX API ...................................................................................... 113 12.2 Perbandingan SAX dan DOM .................................................................... 113 12.3 Implementasi SAX ........................................................................................ 114 12.4 Parser SAX ..................................................................................................... 115 12.5 SAX API ........................................................................................................ 115 12.5.1 Interface ContentHandler....................................................................... 116 12.5.2 Interface ErrorHandler ............................................................................ 116 12.5.3 Interface DTDHandler............................................................................. 116 12.5.4 Interface EntityResolver ......................................................................... 116 12.6 Parsing Dokumen XML ............................................................................... 116 13 Web Service Description Language .......................................126 13.1 Pengantar Web Service ........................................................................... 127 13.2 Arsitektur Web Sevice ............................................................................ 127 13.3 WSDL .......................................................................................................... 129 13.4 The WSDL Document Structure ................................................................ 129 13.5 The Full WSDL Syntax............................................................133 14 SIMPLE OBJECT ACCESS PROTOCOL .............................139 14.1 Pengantar SOAP ........................................................................................ 140 14.2 SOAP Syntax ............................................................................................... 140 http://www.w3.org/2001/12/soap-encoding .................................................... 141 Gambar 10.1 berikut menggambarkan keterkaitan antar elemen. Gambar 10.2 mengambarkan tag-tagnya. ............................................................. 141 Gambar 10.1 SOAP Message .............................................................................. 141 14.3 Contoh SOAP............................................................................................ 142 14.4 Elemen Fault ........................................................................................... 143 Kode berikut menunjukkan contoh pesan SOAP yang berisi error. ......... 144 <Body xmlns=http://www.w3.org/2001/12/soap-envelope>....................... 144
vi PAGE 10
Politeknik Telkom
<Fault> 144 <faultcode>Client</faultcode> .......................................................................... 144 <faultstring>Something went wrong</faultstring> ........................................ 144 <detail>Application specific error information</detail> ............................. 144 </Fault> 144 </Body> 144 14.5 Memproses SOAP Message .................................................................... 144 14.6 SOAP Toolkit 3.0...................................................................................... 145 15. UNIVERSAL DESCRIPTION, DISCOVERY AND INTEGRATION (UDDI) ................................................................................150 15.1 Pengantar .................................................................................................... 151 UDDI, singkatan dari Universal Description, Discovery and Integration (UDDI) Protocol, adalah standar berbasis XML untuk menggambarkan, mempublikasikan dan menemukan Web service. UDDI merupakan insisiatif industri terbuka, oleh Microsoft, IBM, Ariba, dan sebagainya, yang memungkinkan pelaku bisnis saling menemukan satu dengan yang lain dan mendefinisikan bagaimana mereka berinteraksi melalui internet. .................................................. 151 15.2 Tiga tipe informasi UDDI ........................................................................ 151 15.3 Arsitektur Teknik...................................................................................... 152 15.4 Entitas bisnis ............................................................................................... 153 15.5 Business Service .............................................................................................. 154 15.6 Binding Template......................................................................................... 154 15.7 tModel ......................................................................................................... 155 15.8 Publisher Assertion ....................................................................................... 156 15.9 UDDI Query................................................................................................ 157 16 IMPLEMENTASI WEB SERVICE ........................................161 16.1 Pengantar ....................................................................................................... 162 16.2 Contoh Di Apache AXIS ......................................................................... 163 16.2.1 Kode Web Service dengan Java ............................................................. 163 16.2.2 Install Web Service di Web Server....................................................... 164 a. Cara Instan. ........................................................................................................ 164 - ganti file .java menjadi file .jws (java web service)..................................... 164 - copy file.jws file ke direktori webapp ............................................................ 164 - Jadi!! 164 Axis menangani kompilasi, pembuatan WSDL dsb. ....................................... 164
vii PAGE 10
Politeknik Telkom
b. Cara Custom ..................................................................................................... 164 Tahap 2: Buat stubs............................................................................................... 165 Gunakan WSDL2Java untuk membuat client stubs/bindings ....................... 165 java org.apache.axis.wsdl.WSDL2Java Calculator.wsdl membuat: ............. 165 - Calculator.java (interface) ................................................................................. 165 - CalculatorService.java (service interface) ..................................................... 165 - CalculatorServiceLocator.java ......................................................................... 165 (service factory, implements CalculatorService.java) .................................... 165 - CalculatorServiceSoapBindingStub.java ......................................................... 165 (stub for invoking service using SOAP, implements Calculator.java) ........ 165 DAFTAR PUSTAKA ....................................................................172
viii PAGE 10
Politeknik Telkom
1 Pengenalan XML
Overview
XML kependekan dari eXtensible Markup Language, merupakan sebuah standar W3C-endorsed untuk Markup language yang dikembangkan mulai tahun 1996 dan baru mendapatkan pengakuan dari W3C pada bulan Februari 1998. Markup language itu sendiri merupakan suatu bahasa pemprograman untuk menandai suatu dokumen yang disebut dengan tag agar dokumen tersebut lebih mudah dibaca, dipahami serta menarik.
Pada awalnya markup language digunakan oleh para penulis, editor, dan awak percetakan dalam dunia penerbitan, untuk menandai bagaimana sebuah naskah dipresentasikan. Editor menandai bagian-bagian naskah yang perlu diperbaiki oleh penulis dengan tanda-tanda khusus. Editor juga melakukan hal yang sama pada naskah yang akan di-layout oleh desainer (dahulunya merupakan bagian dari awak percetakan), bagian mana yang dicetak miring, tebal, dan lain-lain. Dengan kata lain, markup languange adalah gabungan antara naskah dengan informasi tambahan tentang naskah itu sendiri.
Tujuan
1. 2. 3.
Mahasiswa dapat memahami struktur dokumen XML Mahasiswa dapat memahami penggunaan data dengan XML Mahasiswa dapat membedakan antara data dokumen XML dengan database server
1 PAGE 10
Pengenalan XML
Politeknik Telkom
1.1 Keuntungan XML Teknologi yang digunakan pada XML sebenarnya turunan dari SGML yang telah dikembangkan pada awal 80-an. Ketika HTML dikembangkan pada tahun 1990, para penggagas XML mengadopsi bagian paling penting pada SGML dan dengan berpedoman pada pengembangan HTML menghasilkan markup language yang tidak kalah hebatnya dengan SGML.
XML didesain sebagai solusi interoperabilitas antar aplikasi pada platform yang berbeda. Misalnya aplikasi A berjalan di atas platform Java, ingin berbagi informasi dengan apliksi yang berjalan di atas platform .NET. aplikasi A akan membaca request dari apliksi B, kemudian menyediakan informasi yang dibutuhkan oleh apliksi B dalam format XML. Atau bisa jadi apliksi A menyediakan informasi yang sudah dikemas dalam format XML, yang dapat dimanfaatkan oleh aplikasi B, C, D, dan seterusnya. XML merupakan suatu metamarkup language yang digunakan untuk dokumen text dimana data yang dimasukan kedalam dokumen XML harus berbentuk string text. Seperti halnya HTML, data ini diapit oleh text markup yang menjelaskan maksud dari data tersebut. Text markup pembuka diawali dengan
< dan diakhiri dengan >, sedangkan markup penutup diawali dengan </ dan diakhiri >. Data tersebut dinamai dengan elemen.
Untuk mengakses informasi dalam format XML dapat menggunakan tools web service. Contoh yang paling sederhana dari interoperablitas menggunakan XML ini adalah RSS feed dan aggregator. RSS feed merupakan informasi yang disediakan oleh sebuah website baik blog ataupun situs yang dikemas dalam format XML. Sedangkan aggregator adalah yang mengambil informasi tersebut adalah aplikasi desktop. Adapun keuntungan menggunakan XML adalah : 1. Extensibilitas Kita dapat menentukan tag-tag apasaja yang akan kita gunakan tanpa ada batasan. 2. Memisahkan data dengan presentasi Sebuah data dapat hanya berisi data saja tanpa ada informasi lain bagaimana cara menampilkannya. Karena dokumen XML menjelaskan isi datanya sendiri
2 PAGE 10
Politeknik Telkom
3. 4. 5.
Fungsi search lebih cepat Informasi yang tersimpan akan lebih mudah ditemukan meskipun berbeda platform. Dapat ditukar atau digabung dengan dokumen lain Dengan memisahkan isi data dengan presentasi, maka akan mempemudah penggabungan data dari berbagaimacam sumber. Penyederhanaan aplikasi Untuk mengakses data menjadi lebih sederhana, client tidak perlu memerlukan lisensi atau hak akses terhadap data
1.2
Portable Data
XML memungkinkan penggunaan data secara cross-platform, long-term data format. Dengan demikian, dokumen yang kita buat melalui suatu platform dapat digunakan diplatform lain bahkan dengan program yang berbeda. XML sangat mudah, well-documented, format data terbuka. Dokumen XML adalah text yang dapat dibaca dengan tools apapun yang dapat membaca data text. Tidak hanya data, tapi text markup juga, dan ini dipresentasikan didalam file XML sebagai tag. Untuk mencari dokumen yang sesuai, dapat dilakukan dengan cara membaca tag name secara langsung, karena setiap elemen dibatasi langsung dengan tag, sehingga kita dapat mengabaikan tag-tag yang tidak ada hubungannya dengan pencarian hingga sampai pada akhir baris.
1.3
Seperti yang dijelaskan di atas, XML merupakan markup language. Namun, berbeda dengan HTML yang memerintahkan web browser bagaimana menampilkan informasi, XML hanya menandai informasi secara terstruktur sehingga memudahkan aplikasi lain untuke menggunakannya dokumen tersebut. Seperti halnya HTML, XML juga menggunakan tag-tag. Jika tag-tag pada HTML bersifat baku, tag-tag XML dapat dibuat sendiri, sesuai dengan kebutuhan. Untuk memudahkan aplikasi membaca tag-tag apa saja yang memuat informasi serta struktur hirarkinya. Perhatikan contoh dibawah ini : <?xml version="1.0"?> <product barcode="2394287410"> <manufacturer>Verbatim</manufacturer> <name>DataLife MF 2HD</name> <quantity>10</quantity>
Pengenalan XML 3 PAGE 10
Politeknik Telkom
<size>3.5"</size> <color>black</color> <description>floppy disks</description> </product> Dokumen diatas merupakan text yang akan disimpan menjadi sebuah file dengan extensi *.xml. Kita dapat mengubah file tersebut dengan berbagai macam aplikasi text editor, seperti notepad, BBEdit, jEdit, UltraEdit, Emacs, atau vi. Kita tidak perlu menggunakan editor XML secara khusus. Tetapi jika kita ingin menggunakan editor XML secara khusus dimana proses editor akan lebih mudah dan mengandung auto correct, kita dapat menggunakan NetBeans IDE 6.x, Dreamweaver atau XML editor lainnya yang dapat didownload disitus tertentu. Program yang sebenarnya mencoba untuk memahami isi (conten) dari dokumen XML dengan menggunakan XML parser untuk membaca dokumen tersebut. Parser berfungsi membagi dokumen kedalam elemen, atribut, dan bagian yang lain yang lebih kecil. Hasil parser dari dokumen XML ini digunakan ke aplikasi secara bagian per bagian. Jika setiap pointer pada hasil perser terdapat pelanggaran sintaks terhadap well-formedness rule dari XML, maka parser akan mengirim pesan error keaplikasi dan aplikasi akan menghentikan parsing. Pada beberapa kasus, parser mungkin akan melanjutkannya pada sebuah dokumen, melewatkan original error, sehingga ini dapat diketahui dan respon error lain yang akan terjadi didalam dokumen. Aplikasi yang menerima data dari parser seperti : 1. Web browser seperti Netscape Navigator atau Internet Explorer yang menampilkan document untuk dibaca 2. Word processor seperi StarOffice Writer yang yang memuat dokumen XML untuk diubah 3. Database seperti Microsoft SQL Server yang menyimpan data XML dalam record yang baru 4. Drawing program seperti Adobe Illustrator yang menginterpretasikan XML sebagai koordinat dua dimensi untuk kontent dari sebuah gambar. 5. Spreadsheet seperti Gnumeric yang mem-parser XML untuk mencari number dan fungsi yang digunakan pada kalkulator 6. Personal finance program seperti Microsoft Money yang membaca XML sebagai bank statemen. 7. Syndication program yang membaca dokumen XML dan meng-extrak headline untuk today's news
4 PAGE 10
Politeknik Telkom
8.
Program yang ditulis dengan Java, C, Python atau bahasa pemprograman lain yang menggunakannya sesuai dengan keinginan pembuat program.
Pebedaan XML dengan yang lain adalah format yang fleksibel untuk data. Dalam teori, semua data yang disimpan dikomputer dapat dijadikan XML format. Pada kenyataannya XML hanya cocok untuk menyimpan dan penukaran semua data yang dapat di-encode sebagai text. XML tidak cocok untuk data multimedia seperti photographs, recorded sound, video, dan lainlain yang sangat besar bit sequence-nya.
1.4
XML merupakan keturunan dari SGML yaitu Standard Generalized Markup Language. SGML diciptakan oleh Charles F. Goldfarb, Ed Mosher, dan Ray Lorie di IBM pada tahun 1970an dan dikembangkan oleh banyak orang sehingga akhirnya dijadikan sebagai standart ISO 8879 pada tahun 1986. SGML bertujuan untuk mengatasi banyak dari beberapa masalah pemecahan XML. Ini merupakan SGML semantik dan structural markup language untuk dokumen text. SGML sangat powerful dan telah berhasil digunakan dalam U.S. military dan pemerintahan, sektor penerbangan, dan bidang yang lainnya yang membutuhkan pemecahan mengatur dokumen secara efisien yang banyaknya puluhan hingga ratusan halaman. Pada tahun 1996, Jon Bosak, Tim Bray, C. M. Sperberg-McQueen, James Clark, dan dan beberapa yang lain mengawali "lite" version SGML yang mengadopsi sebagian besar kemampuan SGML pada February 1998, XML 1.0, telah dibesut dan ini akan segera mencapai kesuksesannya. Selanjutnya XML telah menerapkan standar Namespaces, ini merupakan sebuah usaha mengijinkan markup dari aplikasi XML yang berbeda untuk digunakan pada dokumen yang sama tanpa ada konfig. Selanjutnya XML menerapkan Extensible Stylesheet Language (XSL), yang merupakan sebuah aplikasi XML untuk men-transform XML dokumen menjadi form dapat dilihat pada web browser. Selanjutnya dibagi menjadi XSL Transformations (XSLT) and XSL Formatting Objects (XSL-FO). XSLT telah menjadi general-purpose language untuk transformasi suatu dokumen XML kedokumen yang lain, baik untuk menampilkan halaman web maupun yang lain. XSL-FO adalah aplikasi XML untuk mendeskripsikan susunan kedua print pages dan web pages.
Pengenalan XML
5 PAGE 10
Politeknik Telkom
Meski demikian, XSL tidak hanya dipilih untuk styling dokumen XML. Cascading Style Sheets (CSS) language telah siap digunakan pada dokumen HTML ketika XML telah menemukannya, dan itu dikembangkan untuk menjadi layak untuk XML menjadi lebih baik. Dengan munculnya CSS Level 2, W3C membuat styling dokumen XML eksplisit degan tujuan untuk CSS dan menjadikannya sama pentingnya untuk HTML. Dokumen pre-existing Style Sheet dan Semantics Language (DSSSL) telah diadopsi dari root CSS didalam SGML world untuk style dokumen XML untuk print dan Web. Extensible Linking Language (XLink), diawali dengan definisi struktur powerful linking yang dapat terhubung dengan dokumen XML didalam hypertext network yang membuat seperti tag A HTML. Development of extensions to the core XML specification continues. Future directions include : 1. XML Query Language Bahasa generasi keempat untuk mengurai informasi yang cocok untuk menspesifikasikan kriteriadari suatu atau dokumen XML lainnya 2. Canonical XML Algoritma standar untuk menentukan apakan dua dokumen XML sama setelah insignificant details, apakah single atau double quotes nilai atribut delimiter. 3. XInclude Yang berarti membangun single dokumen XML diluar multiple wellformed, potensial valid XML documents dan bagian tersebut. 4. XML Signatures Standar untuk penanda digital dokumen XML, dan menamamkan penanda tersebut pada dokumen XML, dan autentifikasi dokumen hasil. 5. XML Encryption Sebuah standard sintaks XML untuk encrypted konten secara digital, memuat bagian dari dokumen XML. 6. SAX 2.1 satu set small extensions untuk SAX2 yang menyediakan extra informasi tentang sebuah dokumen XML yang direkomendasikan oleh Infoset, yang memuat deklarasi XML. 7. DOM Level 3 Bsnysk class tambahan, interface, dan method yang dibangun diatas DOM2 untuk menyediakan skema pendukung, arti standar dari mengambil dan menyimpan dokumen XML, dan banyak tambahan lainnya untuk menambah kemampuan.
6 PAGE 10
Politeknik Telkom
8.
XFragment Usaha untuk menjelaskan bagian diluar dokumen XML yang mungkin dokumen tersebut tidak well-formed.
Pengenalan XML
7 PAGE 10
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.
8 PAGE 10
Politeknik Telkom
2 XML Fundamentals
Overview
Pada bab ini kita akan mencoba 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 Mahasiswa dapat membedakan antara tag, elemen, atribut, Cdata, emtity serta penggunaannya
9 PAGE 10
XML Fundamental
Politeknik Telkom
2.1
Dokumen XML mengandung data text bukan data binary. Sehingga dokumen tersebut dapat dibuka atau diubah menggunakan aplikasi text editor seperti motepad, wordpad, notepad++, dreamweaver atau kita dapat langsung mengunakan aplikasi XML editor. Berikut adalah contoh penulisan dokumen XML sederhana, dokumen yang well-formed XML sehingga XML parser dapat membaca dan memahaminya. <person> Alan Turing </person> Pada dokumen diatas, terlihat bahwa penulisan dokumen XML mengandung informasi yang diapit oleh tag. Dalam standar penulisan yang paling umum, file diatas akan disimpan dengan nama person.xml, atau 223.xml bahkan person.txt sekalipun karena tidaklah mengutamakan nama filenya, tetapi isi dari file/dokumen tersebut. Bahkan dokumen XML pun dapat disimpan tidak didalam file. Kita dapat melakuka pencatatannya dengan menggunakan database yang dapat dihasilkan dengan cepat menggunakan program CGI untuk merespon perintah dari browser. Dokumen XML bahkan dapat disimpan lebih dari satu file bahkan file tersebut berada pada server yang berbeda lokasi, namun hal itu bukanlah untuk penanganan dokumen yang sederhana seperti diatas. Hal tersebut dapat dilakukan jika dokumen yang ditulis sangatlah kompleks.
2.2
Pada contoh diatas, dokumen hanya mengandung satu elemen nama person. Elemen tersebut diapit oleh tag awal <person> dan tag akhir </person>. Semua yang berada pada tag awal dan tag akhir disebut elemen konten dan isi dari elen tersebut adalah string. Misalnya pada contoh diatas, isi elemennya adalah : Alan Turing spasi juga termasuk bagian dari elemen konten, meskipun pada kebanyakan aplikasi mengabaikan hail ini. <person> dan </person> adalah markup,
10 PAGE 10
Politeknik Telkom
sedangkan Alan Turing dan spasi disekitanya adalah elemen konten. Tag adalah hal yang paling umum untuk markup didalam dokumen XML. Sintaks Tag Tag XML secara sekilas tampak sama dengan tg HTML. Awal tag diawali dengan < sedangkan akhir tag diawali dengan </ dan keduanya diakhiri dengan > sedangkan diantaranya merupakan nama elemen. Namun tag XML tidaklah seperti tag HTML, kita diizinkan untuk membuat tag baru sesuai dengan keinginan kita yang dapat mendeskripsikan elemen data. Misalnya untuk menjelaskan elemen tersebut adalah seseorang, maka tag-nya menggunakan <person></person>, untuk menjelaskan sebuah alamat dapat menggunakan tag <address></address>. Meskipun kita dapat memberikan nama tag secara bebas, namun pada umumnya nama tag tersebut mencerminkan atau mendeskripsikan isi elemen konten sehingga akan memudahkan kita dalam penulisan dokumen. Elemen Kosong untuk elemen kosong yaitu elemen yang tidak memiliki konten, XML juga menyediakan tag khusus, dimana penulisannya dimulai dengan tag < dan diakhiri dengan />. misalnya pada HTML penulisan yang dilakukan adalah <br />, <hr />, <input /> bukan dengan <br>, <hr>, <input>. Namun penulisan tersebut sama artinya dengan <br></br>, <hr></hr>, <input></input>.
Case sensitif Tidak seperti HTML, penulisan tag XML merupakan case sensitif. Penulisan <Person> tidak sama dengan <PERSEON> dan tidak sama pula dengan <person>. Jika kita membuka tag dengan <person>, maka kita harus menutupnya dengan </person>. Jika kita menutupnya menggunakan </Person> atau </PERSON> maka dokumen kita salah. Dalam penulisan tag kita bebas menggunak huruf besar atau huruf kecil atau keduanya asalkan kita konsisten dengan apa yang kita gunakan.
XML Fundamental
11 PAGE 10
Politeknik Telkom
Pohon XML Mari kita coba memahami dokumen XML agak sedikit rumit. Pada contoh berikut dimana elemen person memiliki informasi lain yang memiliki art tersendiri : <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> Parents and children Pada contoh dokumen diatas elemen name tidah hanya memiliki karakter data, tetapi elemen tersebut memiliki elemen lain. Dokumen tersebut memiliki empat child yaitu name, dan tiga elemen profession. Elemen name berisi dia elemen lagi yaitu first_name dan last_name. Elemen person disebut parrent dari elemen name dan tiga elemen profession. Elemen name merupakan parrent dari elemen first_name dan elemen last_name. Sedangkan elemen first_name dan elemen last_name merupakan child dari elemen name dan elemen name dan tiga elemen profession merupakan child dari elemen person. Elemen root Elemen root merupakan suatu elemen yang tidak memiliki parrent dan elemen ini merupakan elemen pertama. Pada contoh diatas, kita dapat merepresentasikan dokumen tersebut menjadi diagram tree seperti pada gambar dibawah ini.
12 PAGE 10
Politeknik Telkom
Mixed Conten Maksud Mixed Content 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>
2.3
Atribut
Dalam penulisan dokumen XML, elemen dapat juga memiliki atribut layaknya HTML. Atribut merupakan pasangan name-value yang menempel pada elemen tag awal. 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>
XML Fundamental 13 PAGE 10
Politeknik Telkom
Berikut ini penulisan yang juga benar dimana nilainya diapit dengan tanda kutip satu dan menempatkan beberapa spasi diantaranya. <person died = '1954-06-07' Alan Turing </person> born = '1912-06-23' >
Berikut ini adalah contoh penempatan atribut dimana dokumen yang ditempati adalah elemen kosong. <person> <name first="Alan" last="Turing"/> <profession value="computer scientist"/> <profession value="mathematician"/> <profession value="cryptographer"/> </person> Sekarang yang menjadi pertanyaan kita kapa kita menggunakan atribut. Jawabannya tidak jelas penggunaan penggunaannya, namun penggunaannya tergantung pada dimana informasi tersebut akan disimpan.
2.4
XML Name
Spesifikasi XML dapat memungkinkan untuk disederhanakan yaitu dengan cara menggunakan kembali rule untuk item yang berbeda jika memungkinkan. Misalnya rule XML untuk elemen name dan juga rule XML untuk nama atribut dan untuk beberapa nama lainnya. Elemen dan XML name lainnya harus mengandung karakter alphanumeric. Ini termasuk karakter a-z, A-Z, 0-9, _(under score), - (hypen). XML name tidak boleh mengandung tanda baca selain karakter seperti tanda kutip, apostrophes, tanda-tanda dolar, carets, simbol persen, dan semicolon. Name XML tidak boleh juga mengandung spasi, carriage return, dan sebagainya. Selain itu kita juga tidak boleh menggunakan kata xml diawal name atau kombinasinya.
14 PAGE 10
Politeknik Telkom
Berikut adalah contoh penulisan yang benar : <Drivers_License_Number>98 NY 32 </Drivers_License_Number> <month-day-year>7/23/2001</month-day-year> <first_name>Alan</first_name> <_4-lane>I-610</_4-lane> <tlphone>011 33 91 55 27 55 27</tlphone> Sedangkan berikut adalah contoh penulisan yang salah <Driver's_License_Number>98 NY 32 </Driver's_License_Number> <month/day/year>7/23/2001</month/day/year> <first name>Alan</first name> <4-lane>I-610</4-lane>
2.5
Entity References
Dalam penulisan karakter data kita tidak boleh menggunakan tanda < atau >. lantas bagaimana jika kita inging menuliskan karak ter tersebut. Jalan keluarnya adalah kita dapat menggunakan entity reference < atau >. Ketika parser membaca dokumen, ia akan mengganti katakter < dengan string yang sebenarnya. Contohnya : <SCRIPT LANGUAGE="JavaScript"> if (location.host.toLowerCase(). indexOf("cafeconleche") < 0) { location.href="http://www.cafeconleche.org/"; } </SCRIPT> Didalam karakter tidak boleh mengandung ampersand (&), tetapi untuk penulisan itu dapat menggunakan entity reference &. Misalnya terlihat pada contoh berikut. <publisher>O'Reilly & Associates</publisher>
XML Fundamental
15 PAGE 10
Politeknik Telkom
2.6
CDATA Sections
Pada bahasan sebelumnya kita telah membahas apa yang namannya entity references dimana jika kita akan menuliskan string < maka kita tidak boleh menuliskannya secara langsung, namun kita harus meng-encode string tersebut menjadi <, begitu juga dengan string > akan di-encode menjadi >. Namun, jika kita menggunakan CData, kita dapat menuliskan string atau karakter reference secara alami, misalnya karakter < atau > dapat ditulis seperti itu juga sehingga elemen yang mengandung karakter < dan > bukan dianggap sebuan tag. Cara penulisannya adalah dengan diawali string <![CDATA[ dan diakhiri dengan ]]>. Contoh : <p>You can use a default <code>xmlns</code> attribute to avoid having to add the svg prefix to all your elements:</p> <![CDATA[ <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="10cm"> <ellipse rx="110" ry="130" /> <rect x="4cm" y="1cm" width="3cm" height="6cm" /> </svg> ]]> Pada contoh diatas yang dituliskan dalan XHTML file tanpa menggunakan karakter reference < dan >.
2.7
Komentar
Komentar merupakan kode atau string yang ditulis tetapi kode tersebut tidak akan dieksekusi. Dokumen XML juga mengizinkan kita untuk menuliskan komentar. 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 -->. Contoh :
16 PAGE 10
Politeknik Telkom
<!-- I need to verify and update these links when I get a chance. --> Untuk penulisan double hyphen -- sebaiknya tidak diizinkan hingga sampai pada penutup komentar -->. selain itu tiga hyphen ---> juga tidak dibolehkan. Pada komentarpenulisan string apapun dibolehkan. Komentar boleh dituliskan sebelum root elemen atau setelah root elemen. Namun, tidak seperti pada HTML, komentar pada XML tidak dibolehkan untuk dituliskan didalam tag dan didalam komentar yang lain. Aplikasi yang membaca dan yang memproses dokumen XML akan melewatkan informasi yang terdapat didalam komentar.
2.8
Processing Instruction
Pada HTML, comment biasanya disalahgunakan untuk mendukung ekstensi yang tidak standart (nonstandart extensions). Contohnya, konten-konten dari elemen script biasanya dilampirkan pada sebuah comment untuk menjaganya dari penampakan dengan nonscript-aware browser. Apache web server memparser comment-comment dalam bentuk file .shtml untuk mengenal bagian yang mengandung server. Sayangnya, dokumen-dokumen ini tidak mampu bertahan dalam melewati berbagai macam editor HTML (HTML editor) dan prosesor dengan komentar dan associated semantics intact. Yang lebih buruk, dimungkinkan untuk sebuah comment menjadi salah arti, sehingga menjadi sebuah input pada aplikasi. Olehkarenanya XML memberikan instruksi pemrosesan sebagai alternatif parsing informasi tertentu melalui aplikasi yang dapat membaca dokumen. Processing Instruction Merupakan perintah pengolahan dalam dokumen XML. Node ini ditandai awali dengan karakter <? Dan diakhiri dengan ?>. <? merupakan XML name yang disebut target, mungkin nama aplikasi untuk processing instruction ini yang dimaksudkan atau mungkin hanya sebuah identifier untuk processing instruction secara khusus. Sisa pemrosesan instruksi mengandung teks dalam format yang sesuai dengan aplikasi yang akan digunakan. Tapi perlu diingat bahwa header standard XML <?xml version=1.0 encoding=iso-8859-1?> bukanlah processing instruction. Header standard bukanlah bagian dari hirarki pohon dokumen XML.
XML Fundamental 17 PAGE 10
Politeknik Telkom
Sebagai contoh, didalam HTML sebuah robots META tag digunakan untuk memberitahukan kepada search-engine dan pencarian lainnya dan bagaimana mereka harus meng-index sebuah halaman web : <?robots index="yes" follow="no"?> Target pemrosesan instruksi ini adalah robots. Sintaks dari instruksi ini adalah proses dua atribut palsu, satu nama dan satu nama indeks, yang nilai-nilainya yes atau no. Semantik dari pemrosesan instruksi ini adalah jika indeks atribut memiliki nilai yes, kemudian search-engine robots harus mengiindek halaman tersebut. Jika indeks memiliki nilai no, maka halaman tersebut tidak akan diindex. sebaliknya, jika memiliki nilai yes, maka link dari dokumen ini akan diikuti. Pemprosesan instruksi lainnya mungkin saja dapat berbeda antara semantik dan sintaksisnya. Contohnya, pemprosesan instruksi dapat mengandung jumlah text yang unlimited. PHP include program yang besar dalam pemprosesan instruksi. Sebagai contoh : <?php mysql_connect("database", "clerk", "password"); $result = mysql("HR", "SELECT LastName, FirstName FROM Employees ORDER BY LastName, FirstName"); $i = 0; while ($i < mysql_numrows ($result)) { $fields = mysql_fetch_row($result); echo "<person>$fields[1] $fields[0] </person> \r\n"; $i++; } mysql_close( ); ?> Pemrosesan instruksi adalah markup tampak seperti elemen, tetapi bukan elemen. Instruksi pemrosesan dapat muncul di manapun dalam dokumen XML di luar tag, termasuk sebelum atau sesudah elemen root. Yang paling umum pemrosesan instruksi, xml-stylesheet, digunakan untuk melampirkan stylesheets ke dokumen. Stylesheets selalu muncul sebelum elemen root, pada contoh berikut, pemrosesan instruksi xml-stylesheet memberitahu browser untuk menerapkan CSS stylesheet person.css ke dokumen ini sebelum tampil.
18 PAGE 10
Politeknik Telkom
2.9
Deklarasi XML
Sebuah dokumen XML boleh dideklarasikan boleh juga tidak. Pendeklarasian XML mengandung name dan version, standalone, dan encoding atribut. Sebagai Contoh : <?xml version="1.0" encoding="ASCII" standalone="yes"?> <person> Alan Turing </person> pendeklarasian tidak perlu ditulis pada dokumen XML. Namun, jika pada dokumen ada pendeklarasian maka dek;arasi harus berada paling atas, tidak boleh didahului sintaks apapun seperti komentar, spasi, dll. Penjelas san atau arti dari bagiannya : 1. version Merupakan versi penulisan dokumen XML yang digunakan 2. Encoding Ini merupakan type encoding dari dokumen XML tersebut, misalnya UTF-8, UTF-16, ISO-8859-1, ASCII, dll 3. Standalone Apakah dokumen ini berdisi sendiri atau mmerupakan penggabungan dari dokumen lain.
XML Fundamental
19 PAGE 10
Politeknik Telkom
20 PAGE 10
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 Fundamental
21 PAGE 10
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.
22
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.
PAGE 10
Politeknik Telkom
3.1
Validation
Dokumen yang valid termasuk jenis dokumen mendeklarasikan DTD. DTD yang mengandung selua elemen, atribut, dan entitas yang akan digunakan didalam dokumen. Validitas operasinya pada prinsipnya bahwa semua yang tidak diperbolehkan adalah dilarang. Semua dokumen yang akan ditulis harus dideklarasikan didalam DTD. Jika pada suatu dokumen terdapat deklarasi DTD, maka mau tidak mau isi dari dokumen yang akan ditulis harus sesuai dengan DTDnya. Jika dokumen yang ditulis tersebut telah sesuai, maka dokumen tersebut dapat dikatakan valid, jika tidak maka dokumen tersebut tidak valid. Selain itu, banyak hal-hal yang ditak diulas DTD, diantaranya : 1. Apa yang menjadi root element dari dokumen. 2. Berapa kasus dari tiap-tiap elemen yang muncul di dalam dokumen. 3. Karakter data apa yang tampak didalam elemen. 4. Semanting yang berarti dari sebuah elemen, apakah mengandung data tanggal atau nama orang. DTD memungkinkan untuk penempatan beberapa kostrain pada form sebuah dokumen XML. Parser membaca apakah dokumen tersbut valid atau tidak. Jika dokumen tersebut valid, maka program akan menerima data dari parser. Dalam beberapa kasus, seperti memasukan record kedalam database, validation error mungkin cukup serius, sehingga field yang dibutuhkan hilang. Contoh sederhana penggunaan DTD : <!DOCTYPE person [ <!ELEMENT person (name, profession*)> <!ELEMENT name (first_name, last_name)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)> ]> <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>mathematician</profession> <profession>cryptographer</profession> </person>
Document Type Definitions (DTDs) 23 PAGE 10
Politeknik Telkom
pada contoh diatas maksudnya adalah person menjadi elemen root dimana didalam elemen person harus ditulis satu kali element name dan elemen profession boleh muncul atau boleh tidak. Sedangkan pada elemen name harus memiliki dua elemen child yaitu first_name, last_name dan kemunculannya msing-masing satu kali. Sedangkan (#PCDATA) menunjukan tipe isi dari elemen yaitu data karakter. Contoh: <!DOCTYPE person [ <!ELEMENT person (student+)> <!ELEMENT student (name, hobbi | favorite)> <!ELEMENT name (#PCDATA)> <!ELEMENT hobbi (#PCDATA)> <!ELEMENT favorite (#PCDATA)> ]> <person> <student> <name>Alan Turing</name> <hobbi>Tenis</hobbi> </student> <student> <name>Johan</name> <favorite>Arktis</favorite> </student> <student> <name>Marie</name> <hobbi>Tenis</hobbi> <favorite>Arktis</favorite> </student> </person> Pada contoh diatas, terdapat tanda | diantara hobbi dan faforite. Maksudnya adalah didalam elemen student wajib mengandung satu elemen nama dan boleh salah satu dari elemen hobbi atau faforite yang muncul atau keduanya muncul. Selain itu, dokumen yang valid juga memasukan sebuah reference kedalam DTD yang harus dibandingkan disajikan dalam dokumen dari satu jenis
24 PAGE 10
Politeknik Telkom
dokumen deklarasi. Ini berguna jika kita menuliskan DTDnya didalam file yang terpisah dengan dokumen. Contoh deklarasi dokument type adalah : <!DOCTYPE person SYSTEM "http://www.politekniktelkom.ac.id/person.dtd"> <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>mathematician</profession> <profession>cryptographer</profession> </person> sintaks tersebut dituliskan didalam dokumen XML dan DTDnya berada diluar serve.
3.2
Element Declarations
Setiap elemen yang digunakan dalam dokumen yang valid harus dinyatakan dalam dokumen DTD dengan elemen deklarasi. Deklarasi elemen meniliki bentuk dasar : <!ELEMENT element_name content_specification> adapun beberapa hal yang merupakan bagian dari elemen declaration adalah : #PCDATA Konten yang terkandung didalam elemen yang dimaksud adalah text. Meskipun data yang ada dielemen tersebut berupa angka, tetap dianggap sebagai text. Contohnya : <!ELEMENT phone_number (#PCDATA)> 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)>
Document Type Definitions (DTDs) 25 PAGE 10
Politeknik Telkom
Maksudnya adalah elemen phone_number merupakan anak dari elemen fax. 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)> 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. 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.
26 PAGE 10
Politeknik Telkom
Parentheses Dari yang telah kita bahas choices, sequences, dan suffixes sangat tebatas penggunaannya, oleh karena itu kita dapat pula manggabungkannya dari masing-masing bagian tadi. Misalnya : <!ELEMENT circle (center, (radius | diameter))> Atau <!ELEMENT center ((x, y) | (y, x) | (r, ) | (, r) )> 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)*> Elemen Kosong Elemen kosong adalah sebuah tag yang tidak memiliki elemen nilai. Penulisannya dapat berupa : <image source="bus.jpg" width="152" height="345" alt="Alan Turing standing in front of bus"/> dengan deklarasi elemennya : <!ELEMENT image EMPTY>
Document Type Definitions (DTDs) 27 PAGE 10
Politeknik Telkom
ANY Kita dapat mengijinkan apapun dapat berada pada suatu elemen. Penulisan deklarasinya adalah : <!ELEMENT page ANY>
3.3
Deklarasi Atribut
Seperti halnya elemen, dokumen dikatakan valid jika dapat menyatakan semua atribut elemen jika elemennya memiliki atribut. Yaitu sintaks ATTLIST dapat mendeklarasikan beberapa atribut dalam suatu elemen. Contoh berikut merupakan pendeklarasian ATTLIST pada elemen imaeg, dimana elemen image memiliki atribut source : <!ATTLIST image source CDATA #REQUIRED> atau kita dapat menuliskan lebih dari satu atribut didalam suatu elemen : <!ATTLIST width height alt > image CDATA CDATA CDATA source CDATA #REQUIRED #REQUIRED #REQUIRED #IMPLIED
maksud dari deklarasi diatas adalah elemen image memiliki atribut source, width, height dan alt. Dengan type CDATA. Type Atribut Type atribut yang ada didalam XML adalah : CDATA Atribut yang hanya memiliki nilai text string. NMTOKEN Type atribut yang mengandung token XML name yang dipisahkan dengan spasi <performances dates="08-21-2001"> Kat and the Kings </performances>
28 PAGE 10
Politeknik Telkom
NMTOKENS Type atribut yang mengandung satu atau lebih token XML name yang dipisahkan dengan spasi <performances dates="08-21-2001 27-2001"> Kat and the Kings </performances> Enumeration Atribut yang bukan merupakan keyword XML. 08-23-2001 08-
<!ATTLIST date month (January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED > ID Sebuah type atribut ID harus berisi XML name yang unik didalam dokumen. IDREF Mengacu pada type atribut ID dari beberapa elemen. IDREFS Mengandung spasi sebagai pemisah dan masing-masing harus mengacu pada ID dari elemen didalam dokumen itu sendiri. ENTITY Berisi name dari sebuah deklarasi entity unparsed di DTD ENTITIES Berisi name dari satu atau lebih deklarasi entity unparsed di DTD NOTATION Mengandung deklarasi notasi didalam DTD Atribut Default #IMPLIED Tidak disediakan nilai default, jika kita mengisi nilai tersebut, maka nilai atribut elemen menjadi sesuai yang dituliskan, jika kita tidak memberikan nilai atributnya, maka nilai atributnya menjadi kosong.
29 PAGE 10
Politeknik Telkom
#REQUIRED Merupakan default atribut. Artinya tidak disediakan nilai default untuk atribut, jadi nilainya harus diisi, jika tidak maka parser akan menampilkan pesan error. #FIXED Disediakan nilai default dan jika kita mengisikan nilai atribut pada elemen, maka nilainya akan samadengan yang diisikan, sedangkan jika dokosongkan maka parser akan mengenali nilai atributnya sesuai dengan nilai default yang diberikan.
3.4
Referensi entitas didefinisikan dengan pendeklarasian sebuah ENTITY didalam DTD. Hal ini diberikan guna memberikan nama pada entiti. Dengan kata lain, kita bisa menggantikan kalimat yang panjang atau satu blok elemen yang sering kita gunakan dengan sebuah pengenal singkat. Dengan adanya pendeklarasian entiti yang sesuai, kita dapat menuliskan text atau string apapun hanya dengan menuliskan entity referencenya saja yang telah dideklarasikan tampa harus menulis text tersebut secara utuh. Misalnya deklarasi entity mendefinisikan &email; sebagai singkatan dari admin@somethingweb.com, maka contoh penulisannya : <!ENTITY email "admin@somethingweb.com"> <person> <name>Peter Kok kok</name> <email>&email;</email> </person>
3.5
Pada umumnya situs-situs web yang beredar lebih memilih menyimpan konten yang akan tampil berulang kedalam file external yang kemudian akan ditampilkan kehalaman webnya menggunakan PHP atau bahasa pemprograman web, termasuk server-site atau mekanisme yang lainnya. Dalam hal ini, XML mendukung teknik tersebut melalui external general entity references meskipun dalam hal ini client bukanlah sebagai server. External general entity references dideklarasikan menggunakan pendeklarasian ENTITY. Contohnya :
30 PAGE 10
didalam
DTD
yang
Politeknik Telkom
<!ENTITY footer SYSTEM "http://www.oreilly.com/boilerplate/footer.xml"> atau kita juga dapat memasukan relative URL. Misalnya : <!ENTITY footer SYSTEM "/boilerplate/footer.xml">
3.6
Tidak semua data itu XML. Terdapat banyak file ASCII didunia ini yang tidak memberikan arti tentang < sebagai < atau kendala lainnya yang pada dokumen XML yang terbatas. Pada dokumen JPEG photographs, GIF line art, QuickTime movies, MIDI sound files, dan sebagainya yang merupakan komponen penting dari berbagai macam komponen namun tidak dapat diimplementasikan menjadi dokumen XML. Namun mekanisme embeded XML menyarankan untuk menggunakan External Unparsed Entities yang dapat didefinisikan kedalam DTD sebagai entitas yang bukan dokumen XML. Misalnya pendeklarasian ENTITY yang mengasisiasikan nama turing_getting_off_bus dengan gambar JPEG pada http://www.turing.org.uk/turing/pi1/bus.jpg : <!ENTITY turing_getting_off_bus SYSTEM "http://www.turing.org.uk/turing/pi1/bus.jpg" NDATA jpeg> Notifikasi Ini digunakan agar dokumen XML dapar mengenali file yang akan dimasukan, misalnya dengan memberikan penamaan jpeg pada file JPEG image. Contoh : <!NOTATION jpeg SYSTEM "image/jpeg"> Meletakan Unparsed Entities didalam dokumen Namun kita tidak bisa menempatkan entity reference, entitas reference hanya dapat merujuk ke parsed entities. Misalnya elemen image dan deklarasi atribut seperti : <!ELEMENT image EMPTY> <!ATTLIST image source ENTITY #REQUIRED>
Document Type Definitions (DTDs) 31 PAGE 10
Politeknik Telkom
akan
merujuk
pada
<image source="turing_getting_off_bus"/> Notifikasi untuk target pemprosesan instruksi Notasi dapat juga dapat digunakan untuk mengidentifikasi target yang tepat dari instruksi proses. Notasi dapat mengidentifikasi nama singkat XML dengan spesifikasi lebih lengkap. Misalnya targer path : <!NOTATION tex SYSTEM "/usr/local/bin/tex">
3.7
Parameter Entities
tidak dapat digunakan pada multiple elemen untuk men-share semua atau sebagian untuk atribut yang sama. Misalnya adda elemen simpel XLink yang dijadikan xlink:type and atribut xlink:href, dan mungkin xlink:show and atribut xlink:actuate. Misalnya, aplikasi XML untuk perumahan daftar real-estate yang menyediakan elemen terpisah untuk apartemen, sublets, coops untuk penjualan, Condos untuk dijual, dan rumah untuk dijual. Elemen deklarasi mungkin terlihat seperti ini: <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT apartment sublet coop condo house (address, (address, (address, (address, (address, rooms, rooms, rooms, rooms, rooms, baths, baths, baths, baths, baths, rent)> rent)> price)> price)> price)>
Parameter Entity Syntax parameter entity reference banyak dinyatakan pada general entitas reference. Namun, tanda persen (%) ditempatkan diantara <!ENTITY dan nama entitas. <!ENTITY % residential_content "address, footage, rooms, baths"> <!ENTITY % rental_content "rent"> <!ENTITY % purchase_content "price">
32 PAGE 10
Politeknik Telkom
Parameter entity yang ditulis kembali sebagai general reference, hanya dengan tanda persen. <!ELEMENT apartment (%residential_content;, %rental_content;)> <!ELEMENT sublet (%residential_content;, %rental_content;)> <!ELEMENT coop (%residential_content;, %purchase_content;)> <!ELEMENT condo (%residential_content;, %purchase_content;)> <!ELEMENT house (%residential_content;, %purchase_content;)> Redefining Parameter Entities Jika dokumen menggunakan both internal maupun eksternal DTD subset, maka subset internal DTD dapat menentukan teks untuk entity. Jika ELEMENT dan ATTLIST dideklarasi di luar subset DTD ditulis langsung dengan parameter entitas reference. <!ENTITY % residential_content footage, rooms, bedrooms, available_date"> "address, baths,
External DTD Subsets Entitas parameter external dideklarasikan menggunakan normal ENTITY dengan tanda %. Contoh, deklarasi ENTITY mendefinisikan sebuah konten eksternal entitas yang disebut names yang kontennya diambil dari file names.dtd. Kemudian entitas parameter referensi %name; memasukkan isi file ke dalam DTD. <!ENTITY % names SYSTEM "names.dtd"> %names;
33 PAGE 10
Politeknik Telkom
3.8
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)> ]]> Sintaks diatas sepertinya tidak berguna, karena kita bisa saja menggunakan komentar. Namun tujuan ini adalah untuk menunjukan bahwa deklarasi yang diberikan benar-benar digunakan didalam DTD. Contoh : <![INCLUDE[ <!ELEMENT production_note (#PCDATA)> ]]>
3.9
34 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.
35 PAGE 10
Politeknik Telkom
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.
36
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
PAGE 10
Politeknik Telkom
4.1
Menggabungkan beberapa dokumen markup dari multiple aplikasi XML. Misalnya pada dokumen XHTML dapat mengandung both gambar SVG dan MathML equations. XSLT stylesheet mengandung both XSLT instruksi dan elemen dari kosakata result-tree. XLinks selalu simbiotik dengan elemenelemen pada dokumen yang ada sejak XLink hanya mendefinisikan atribut saja. Dalam beberapa kasus, aplikasi ini dapat menggunakan nama yang sama untuk merujuk ke berbagai hal. Misalnya pada SVG satu set elemen memberikan nilai atribut untuk durasi waktu yang ditentukan. Sedangkan pada MathML satu set memiliki elemen matematis. Hal ini sangatlah penting, jika ingin menentukan kapan harus menggunakan SVG, kapan menggunakan MathML. Jika tidak, maka validasi, rendering, pengindek-an, dan tugas lainnya akan bingung dan failed.
4.2
Sintaks Namespace
Namespace membuat elemen tidak ambigu terhadap nama yang sama karena pemberian elemen dan atribut pada URI. Secara umum, semua elemen dari suatu aplikasi XML di-asign kepada satu URI dan semua elemen yang berasal dari aplikasi XML yang berbeda di-asign dalam URI yang berbeda. URI inilah disebut dengan nama namespaces. Elemen dan atribut URI dibagi kedalam disjoint sets. Elemen yang sama dan URI yang sama adalah sama. Sebagian besar waktu merupakan pemetaan one-to-one antara namespaces and aplikasi XML, meskipun beberapa aplikasi menggunakan multi namespaces untuk subdivide yang berbeda lokasi dari aplikasi. Misalnya, XSL menggunakan nama yang berbeda untuk transformasi XSL (XSLT) dan XSL Formatting Objects (XSL-FO). Contoh penggunaan namespace, misalnya ada sebuah dokumen yang mendiskripsikan tentang kebutuhan material pembuatan gardu jaga dari bambu, dengan dokumen sederhana sebagai berikut : <bambu> <jenis>Jawa</jenis> <panjang>2</panjang> </bambu>
Namespaces 37 PAGE 10
Politeknik Telkom
sedangkan ada dokumen lain yang menyatakan bahwa bambu itu adalah sebuah merk produk dengan penulisan dokumen : <bambu> <jumlah>246</jumlah> <hargasatuan>200</hargasatuan> </bambu> untuk mengatasi hal ini, namespace menyediakan metode dengan menggunakan prefiks yang berbeda sehingga penulisan dokumen pertama pada contoh tersebut adalah : <n_pertama:bambu> <n_pertama:jenis>Jawa</n_pertama:jenis> <n_pertama:panjang>3m</n_pertama:panjang> </n_pertama:bambu> dan dokumen kedua menjadi : <n_kedua:bambu> <n_kedua:jumlah>100</n_kedua:jumlah> <n_kedua:hargasatuan>300</n_kedua:hargasatuan> <n_kedua:/bambu> Dengan cara demikian konflik penamaan tag tidak terjadi lagi.
5.
Qualified Names, Prefixes, and Local Parts Karena URI mengandung karakter /, %, dan ~ yang tidak legal didalam XML names, singkat awalan seperti rdf dan xsl dibuat didalam elemen dan atribut names. Setiap awalan digabung dengan URI dan nama yang awal digabung dengan URI yang sama didalam namespace yang sama. Awalan elemen dan atribut didalam namespace memiliki nama yang mengandung titik dua. Misalnya terlihat seperti dibawah : rdf:description xlink:type xsl:template
38 PAGE 10
Politeknik Telkom
sebelum tanda titik dua disebut sebagai prefix, setelah titik dua disebut sebagai local part, nama lengkap yang memasukan titik dua disebut sebagai qualified name, QName, atau raw name. 6. Binding Prefixes to URIs Setiap awalan dalam kualifikasi nama harus terkait dengan URI, misalnya semua elemen XSLT digabung dengan URI http://www.w3.org/1999/XSL/Transform. <rdf:RDF xmlns:rdf="http://www.w3.org/TR/RECrdf-syntax#"> <rdf:Description about="http://www.cafeconleche. org/examples/impressionists.xml"> <title> Impressionist Paintings </title> <creator> Elliotte Rusty Harold </creator> <description> A list of famous impressionist paintings organized by painter and date </description> <date>2000-08-22</date> </rdf:Description> </rdf:RDF> 7. Namespace URIs Banyak aplikasi XML yang memiliki customary prefixes. Misalnya elemen SVG sering menggunakan prefik svg dan elemen RDF sering menggunakan prefik rdf. Sebelum prefik dapat digunakan ia haruslah ada keterkaitan dengan URI seperti http://www.w3.org/2000/svg atau http://www.w3.org/1999/02/22-rdf-syntax-ns# yang merupakan standar URI dan bukan prefik. Namespace URIs tidak harus menunjuk ke halaman atau dokumen yang sebenarnya. Pada kenyataannya, namespace URI tidak perlu menggunakan skema http, bahkan mungkin menggunakan beberapa protokol lainnya seperti mailto URIs yang bahkan tidak mengarah ke dokumen.
Namespaces 39 PAGE 10
Politeknik Telkom
8.
Setting a Default Namespace with the xmlns Attribute <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="10cm"> <ellipse rx="110" ry="130" /> <rect x="4cm" y="1cm" width="3cm" height="6cm" /> </svg> walaupun tidak ada elemen yang memiliki prefik, namun elemen svg, ellipse, dan rect berapa pada ruang yang sama yaitu http://www.w3.org/2000/svg. Default namespace hanya berlaku untuk elemen, bukan atribut. Olehkarena itu pada contoh, atribut width, height, rx, ry, x, dan y tidak berada didalam naame space.
9.
Attribute Declarations for xmlns DTD dapat melampirkan atribut xmlns ke kontainer elemen utama untuk sebuah aplikasi agar semuanya ditempatkan di sebelah kanan namespace tanpa atribut xmlns. Misalnya : <!ATTLIST svg xmlns "http://www.w3.org/2000/"> CDATA #FIXED
Hal tersebut memungkinkan kita untuk menghilangkan atribut xmlns untuk semua elemen svg.
4.3
Namespace bukanlah bagian dari XML 1.0, namun titik dua-titik dua merupakan karakter yang legal didalam elemen XML 1.0 dan nama atribut. Sehingga parser akan menampilkan beberapa nama mengandung titik dua. Namespace-aware parser telah menambahkan couple untuk memeriksa wellformed dokumen. Pemeriksaan dikhususkan untuk melihat semua prefik yang dipetakan ke URI. Hal ini akan merijek dokumen yang menggunakan unmapped prefik (kecuali xmlns, xml).
40 PAGE 10
Politeknik Telkom
4.4
Diperlukan DTD untuk menyatakan prefik names sebagai pengganti raw names atau beberapa kombinasi local path dan namespace URI membuatnya sulit untuk mengubah prefik didalam dokumen yang valid. Masalahnya adalah dengan mengubah prefiknya, maka akan mengubah seluruh deklarasi yang menggunakan prefiks DTD. Namun, denga sedikit trik, parameter entitas referen dadpat meringankan masalahnya. Triknya adalah dengan didefinisikan sebagai parameter entitas baik prefik namespace dan titik dua yang memisahkan prefik dari nama lokal. Contohnya : <!ENTITY % dc-prefix "dc"> <!ENTITY % dc-colon ":"> langkah yang kedua adalah dengan mendefinisikan kualifikasi names sebagai parameter entitas yang lain. Contohnya : <!ENTITY % dc-title "%dc-prefix;%dc-colon;title"> <!ENTITY % dc-creator "%dc-prefix;%dc-colon;creator"> <!ENTITY % dc-description "%dc-prefix;%dc-colon;description"> <!ENTITY % dc-date "%dc-prefix;%dc-colon;date"> Untuk penulisan deklarasi namespace pada DTD adalah dengan menuliskan : <prefiks:nama_elemen xmlns:prefiks=http:/www.sesuatusitus.com/nspace> prefiks adalah awalan yang digunakan, nama_elemen merupakan nama elemen yang akan diberi namespace karena memiliki kesamaan nama dengan elemen lain namun berbeda maksud. Sedangkan atribut namespace di tambahkan pada tag. Syntax untuk atribut namespace adalah sebagai berikut: xmlns:prefiks=namespace
Namespaces
41 PAGE 10
Politeknik Telkom
Penulisan dokumen pada contoh sebelumnya yaitu tentang penulisan bambu sebagai bahan pembuat gardu dan yakedua adalah bambu sebagai nama atau merek produk, maka penulisan deklarasinya pada DTD adalah : <n_pertama:bambu xmlns:n_pertama=http:/www.sesuatusitus.com/gardu> <n_kedua:bambu xmlns:n_kedua=http:/www.sesuatusitus.com/merk> Pada deklarasi contoh diatas namespace-nya menggunakan alamat URL. W3C namespace spesification menyatakan bahwa namespace haruslah merupakan Uniform Resource Identifier (URI). Alamat URL tersebut tidak digunakan untuk mendapatkan informasi, tapi hanya untuk memberikan nama yang unik bagi namespace. Tetapi kebanyakan orang sering menyalahgunakannya. Sehingga kebanyakan dari mereka menggunakan namespace untuk menunjuk pada halaman web yang berisi informasi tentang namespace yang digunakan.
42 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
43 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
44 PAGE 10
Politeknik Telkom
5.1
XHTML
XHTML merupakan rekomendasi resmi dari W3C, dan mendefinisikan XMLcompatible versi HTML, atau sebaliknya, dapat mengubah HTML sebagai aplikasi XML, bukan sebagai aplikasi SGML. Dengan melihat dokumen XHTML, mungkin kita tida menyadari ada sesuatu yang berbeda dalam hal ini, seperti : tag <p> boleh dalam XHTML, tetapi tag <P> tidak boleh, <table border="0" width="515"> bolej dalam XHTML, tapi <table border=0 width=515> tidak boleh. Moving from HTML to XHTML Sebagian besar pengubahan dokumen HTML menjadi dokumen XHTML adalah dengan membuat dokumen well-formed. Misalnya perubahan yang akan dilakukan : 1. Tambahkan missing end-tag seperti </p> and </li> 2. Tulis kembali dokumen yang timpang tindih, misalnya <b><i>apa</b></i> menjadi <b><i>apa</i></b> 3. Letakkan tanda petik pada nilai atribut. Misalnya <p align=center> menjadi <p align="center">. 4. Tambahkan nilai pada atribut yang memiliki nilai boolean dengan namanya sendiri. Misalnya <input type="checkbox" checked> menjadi <input type="checkbox" checked="checked">. 5. Ganti karakter & atau < dalam data atau atribut dengan nilai-nilai & and <. Misalnya ubah A&P menjadi A&P 6. Jadikan dokuen sebagai single root element html. 7. Ubah empty elemen. Misalnya <hr> menjadi <hr/> atau <hr></hr> 8. Tambahkan hyphens kedalam komentar. Misalnya <! this is a comment> menjadi <!-- this is a comment --> 9. Encode kedalam UTF-8 atau UTF-16. Tiga DTD untuk XHTML 1. Strict Memasukan elemen dan atribut basik seperti p dan class.
45 PAGE 10
Politeknik Telkom
XHTML
1.0
Transitional Bentuk looser XHTML dan digunakan ketika kita sulit untuk melakukan tanpa elemen dan atribut yang usang seperti applet and bgcolor. Ini teridentifikasi sebagai deklarasi DOCTYPE. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd" >
3.
Frameset hampir sama dengan Transitional namun Frameset mengijinkan elemen frame-related sebagai framset dan iframe
Browser Support for XHTML 1. The XML declaration and processing instructions Beberapa browser menampilkan pemrosesan instruksi dan deklarasi XML inline. Ini harus dihilangkan jika memungkinkan. 2. Empty elements Beberapa browser tidak konsekuen terhadap penanganan sintak kosong. Misalnya beberapa browser mengerti <hr/> tapi tidak untuk <hr></hr>, sedangkan yang lain mengerti <hr></hr> tetapi tidak <hr/> 3. Entity references Embedded skrip sering mengandung karakter reserved seperti & atau < sehingga dokumen tersebut tidak well-formed. Namun sebagian besar interpreter JavaScript dan VBScript tidak mengenali & atau < sebagai operator. 4. Other unsupported features Ada beberapa perbedaan antara bagaimana browser meng-handle XHTML dan bagaimana XHTML di-handle.
5.2
Kita berharap bahwa browser akan dapat menampilkan tidak hanya XHTML, tetapi XML juga. Namun terlalu banyak untuk meminta browser unttuk menyediakan semantik XML untuk semua aplikasi.
46 PAGE 10
Politeknik Telkom
The xml-stylesheet Processing Instruction Stylesheet yang berhubungan dengan dokumen diindikasikan oleh xmlstylesheet processing instruction didalam dokumen prolog, yang ditulis setelah deklarasi XML tetapi sebelum elemen root. Pemprosesan intruksi ini menggunakan atribut untuk mendeskripsikan stylesheet (yaitu, terlihat seperti atribut tetapi bukan karena atribut xml-stylesheet merupakan pemrosesan instruksi dan bukan elemen). 1. The required href and type pseudoattributes Ada dua atribut palsu yang diperlukan untuk pemprosesan instruksi xmlstylesheet. Nilai atribut href berisi URL yang dapat berupa relatif path atau absolute path. Tipe atribut palsu ini menjelaskan tipe MIME media stylesheet, text/css untuk cascading stylesheets, application/xml untuk XSLT stylesheets <?xml version="1.0"?> <?xml-stylesheet href="person.css" type="text/css"?> <person> Alan Turing </person> 2. Media untuk pseudoattribute Media atribut palsu berisi string singkat untuk medium stylesheet yang harus digunakan, misalnya : Screen monitor Komputer tty Teletypes, terminal, xterm, dan monospacedlainnya, device textonly. Tv Televisi, WebTVs, video game konsol, dan lain-lain projection Slide, transparansi, dan direct-from-laptop presentasi yang akan ditampilkandi layar besar handheld PDA, ponsel, GameBoys, dan lain-lain print kertas braille
47 PAGE 10
Politeknik Telkom
Tulisan Timbul aural Screen readers dan speech synthesizers all <?xml-stylesheet href="http://www.cafeconleche. org/style/titus.css" type="text/css" media="tv, projection, print"?> 3. The charset pseudoattribute Atribut palsu Charset yang menjelaskan dalam karakter yang mengatur stylesheet, menggunakan nilai-nilai yang sama sebagai deklarasi menggunakan encoding. Misalnya, untuk mengatakan bahwa CSS stylesheet koran.css tertulis di dalam karakter ISO-8859-6 yang digunakan : <?xml-stylesheet href="koran.css" type="text/css" charset="ISO-8859-6"?> 4. The alternate and title pseudoattributes atribut palsu alternate menentukan apakah primary stylesheet untuk tipe media atau alternate untuk special case. <?xml-stylesheet href="big.css" type="text/css" alternate="yes" title="Large fonts"?> <?xml-stylesheet href="small.css" type="text/css" alternate="yes" title="Small fonts"?> <?xml-stylesheet href="medium.css" type="text/css" title="Normal fonts"?> Internet Explorer Microsoft Internet Explorer 4.0 (IE4) include XML parser yang dapat diakses dari VBScript atau JavaScript dan digunakan secara internal untuk mendukung chanel dan desktop aktif. Internet Explorer 5 (IE5) and 5.5 (IE 5.5) telah suport XML. Walaupun pada parsernya ada sedikit bug yang menolak beberapa dokumen yang seharusnya tidak ditolak. Internet Explorer 6 (IE6) telah meningkatkan sedikit perbaikan terhadap parsing XML, tetapi masih belum sepenuhnya sesuai.
48 PAGE 10
Politeknik Telkom
Netscape and Mozilla Netscape 4.x dan sebelumnya tidak menyediakan untuk menampilkan XML pada browser. Netscape 4.0.6 dan setelahnya telah menggunakan XML internal untuk beberapa fitur. Netscape 6.2 juga mendukung untuk XSLT 1.0 tetapi masih ada beberapa bug.
5.3
Mixing XHTML into Your Applications Keuntungan memisahkan HTML ke semua modul yang berbeda yang dapat dipilihsesuai dengan yang diinginkan. Jika dokumen menggunakan tabel, maka kita dapat menyertakan modul tabel. Mixing Your Applications into XHTML fitur modular XHTML yang lebih penting adalah pilihan untuk menambahkan elemen baru yang tidak mendukung. Misalnya untuk memasukan gambar SVG kedalam dokumen, hanya dengan import SVG DTD. Mixing Your Own XHTML XHTML 1.1 DTD tidak mendukung semua modul yang tersedia. Misalnya frame dan turunan elemen presentational yang sengaja diabaikan.
5.4
Bagian dari hype XML telah dimanfaatkan search engines untuk mencari arti isi dokumen hanya isi yang di-markup. Sementara itu, untuk menambahkan beberapa petunjuk XML ke halaman HTML, search engines dapat mengambil keuntungan dari menggunakan : Resource Description Framework (RDF) RDF dapat difahami sebagai encoding XML untuk data model yang sederhana. Elemen root dokumen RDF merupakan dokumen RDF. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22rdf-syntax-ns#"> <rdf:Description about="urn:isbn:0596002920"> <author>Elliotte Rusty Harold</author> <author>W. Scott Means</author>
XML pada Web 49 PAGE 10
Politeknik Telkom
</rdf:Description> </rdf:RDF> Dublin Core Merupakan standart set dari sepuluh informasi item dengan spesifik semantik yang mencerminkan jenis atau tipe data. Sepuluh informasi itu adalah : Title, Creator, Subject, Description, Publisher, Contributor, Date, Type, Format, Identifier, Source, Language, Relation, Coverage, Rights Robots Pada HTML, robots tag META memberi tahukan kepada searc- engine apakah boleh mengindeks halaman atau tidak. Contoh penulisannya adalah : <?robots index="yes" follow="no"?>
50 PAGE 10
Politeknik Telkom
Rangkuman
1. XML merupakan bahasa yang masih sangat menarik untuk gunakan didalam halaman web 2. Penggunaan XML pada web berbentuk XHTML 3. Dokumen XHTML mendefinisikan kompetibeliti dar XML 4. Dokumen XHTML harus well-formed agar bisa ditampilkan pada
halaman browser
51 PAGE 10
Politeknik Telkom
Overview
XSLT merupakan aplikasi XML untuk menspesifikasikan aturan antara dokumen XML yang satu ditranformasikan menjadi dokumen XML lainnya. 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. 4.
Mahasiswa dapat memahami XSLT Mahasiswa dapat menspesifikasikan XSLT pada dokumen XML Mahasiswa dapat membuat XSLT pada dokumen XML Mahasiswa bisa membedakan perintah XSLT dengan XPath
52 PAGE 10
Politeknik Telkom
6.1
<?xml version="1.0"?> <people> <person born="1912" died="1954"> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> <person born="1918" died="1988"> <name> <first_name>Richard</first_name> <middle_initial>P</middle_initial> <last_name>Feynman</last_name> </name> <profession>physicist</profession> <hobby>Playing the bongoes</hobby> </person> </people> Dokumen diatas disimpan kedalam file dengan nama people.xml. XSLT dapat bekerja dengan dokumen yang valid maupun tidak valid asalkan well-formed. Dokumen ini juga tidak menggunakan namespace meskipun bisa juga dengan menggunakan namespace. XSLT hanya dapat berjalan dengan baik jika menggunakan namespace. Tidak seperti DTD, XSLT lebih memperhatikan namespace URIs dari pada prefiks.
6.2
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=
XML Transformations (XSLT) 53 PAGE 10
Politeknik Telkom
"http://www.w3.org/1999/XSL/Transform"> </xsl:stylesheet>
6.3
Stylesheet Processors
XSLT processor sebuah perangkat lunak yang membaca XSLT stylesheet, membaca dokumen input XML, dan membuat dokumen output sesuai dengan petunjuk dalam stylesheet menjadi informasi didalam dokumen masukan. XSLT processor dapat diterapkan pada web browser, seperti MSXML pada Internet Explorer 6. Command-Line Processors Sebenarnya detail cara menginstal, konfigurasi, dan menjalankan XSLT processor tidak seperti prosessor ke prosesor. Umumnya, kita harus mengistal prosessor pada path tempat kita bekerja atau menambahkan file jar ke class path jika itu ditulis dengan java. Contoh menggunakan Xalan : % java org.apache.xalan.xslt.Process -IN people.xml -XSL minimal.xsl -OUT 8-3.txt ===Parsing file:D:/books/xian/minimal.xsl ==== Parse of file:D:/books/xian/minimal.xsl took 771 milliseconds ========= Parsing people.xml ========== Parse of people.xml took 90 milliseconds ============================= Transforming... transform took 20 milliseconds XSLProcessor: done The xml-stylesheet Processing Instruction XML dokumen yang ditampilkan ke web browser memiliki xml-stylesheet processing instruction pada prolog yang memberitahukan browser dimana lokasi stylesheet pada dokumen tersebut. Jika stylesheet-nya merupakan XSLT stylesheet, maka tipe pseudoattribute harus memiliki nilai application/xml. Contoh, pemprosesan instruksi xml-stylesheet menunjukan browsers harus memakai stylesheet pada URL absolut http://www.oreilly.com/styles/people.xsl. Namun, Relativ URLs juga bisa digunakan.
54 PAGE 10
Politeknik Telkom
6.4
Untuk mengontrol hasil outputan, kita dapat menambahkan template rule kedalam XSLT stylesheet. Setiap template direpresentasikan dengan elemen xsl:template. Elemen ini harus memiliki kesesuaian atribut dengan XPath pattern dan mengandung template yang di instansiasi dan output jika polanya cocok. Namun ada sedikit terminologi trik; elemen xsl:template merupakan template rule yang mengandung template. Elemen xsl:template bukan bukan template untuk dirinya sendiri. Pencocokan pola secara sederhana adalah pada elemen name. Dengan demikian, template rule ini menunjukan elemen peson. stylesheet processor harus mengeluarkan text A person. Contoh Templatenya : <xsl:template match="person">A Person</xsl:template> Template rule : <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"> <xsl:template match="person">A Person</xsl:template> </xsl:stylesheet> Output proses : <?xml version="1.0" encoding="utf-8"?> A Person A Person
55 PAGE 10
Politeknik Telkom
6.5
Elemen XSLT lainnya dapat memilih konten tertentu dari dokumen input dan memasukkannya ke dalam dokumen output. Elemen xsl:value-of akan mengolah nilai string dari expresi XPath dan memasukannya kedalam output. Nilai dari sebuah elemen merupakan text elemen setelah semua tag dihapus serta entitas dan karakter reference telah berubah. Elemen yang nilainya diambil diidentifikasikan dengan atribut select berisi expresi XPath. Contoh : <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"> <xsl:template match="person"> <p> <xsl:value-of select="name"/> </p> </xsl:template> </xsl:stylesheet> Ketika XLS diproses, maka output dari hasil tersebut adalah : <?xml version="1.0" encoding="utf-8"?> <p>Alan Turing</p> <p>Richard P Feynman</p>
6.6
xsl:apply-templates dapat meng-eksplisitkan pilihan pemprosesan. xsl:apply-templates digunakan untuk membuat XLS processor untuk mengaplikasikan template yang digunakan. Misalnya kita ingin menampilkan list people pada input dokumen, namun pada output dokumen kita akan menampilkan nama belakang ditulis didepan. Penulisan XSL nya adalah : <xsl:template match="name"> <xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/> </xsl:template> atau kita juga dapat menggunakan :
56 PAGE 10
Politeknik Telkom
6.7
Terdapat tujuh jenis node dalam sebuah dokumen XML yaitu : root node, element nodes, attribute nodes, text nodes, comment nodes, processing instruction nodes, and namespace nodes. XSLT menyediakan default template built-in untuk ketujuh node tersebut. Namun template tersebut akan aktif jika : The Default Template Rule for Text and Attribute Nodes Yang paling mendasar dari built-in template rule adalah menyalin nilai text dan atribut node kedalam dokumen output. Seperti terlihat pada contoh berikut : <xsl:template match="text( )|@*"> <xsl:value-of select="."/> </xsl:template> node text ( ) merupakan pattern matching untuk semua node. Misalnya first_name merupakan pattern matching untuk semua elemen node first_name. Sedangkan @* merupakan pattern matching untuk semua node atribut. The Default Template Rule for Element and Root Nodes Yang paling penting adalah bagai mana menjamin bahwa elemen child juga akan diproses. Aturan penulisannya adalah : <xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template> The Default Template Rule for Comment and Processing Instruction Nodes <xsl:template instruction()|comment( )"/> match="processing-
Politeknik Telkom
6.8
Modes
Elemen xsl:apply-templates dan xsl:template dapat memiliki pilihan atribut mode yang menghubungkan template rule yang berbeda ke penggunaan yang berbeda. Atribut mode pada elemen xsl:template mengidentifikasi pada mode yang template rulenya harus aktif. Elemen xsl:apply-templates dengan atribut mode hanya berjalan dengan template rule dengan atribut mode yang cocok. Contoh : <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <ul><xsl:apply-templates select="person" mode="toc"/></ul> <xsl:apply-templates select="person"/> </body> </html> </xsl:template> <!-- Table of Contents Mode Templates --> <xsl:template match="person" mode="toc"> <xsl:apply-templates select="name" mode="toc"/> </xsl:template> <xsl:template match="name" mode="toc"> <li><xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/></li> </xsl:template> <!-- Normal Mode Templates --> <xsl:template match="person"> <p><xsl:apply-templates/></p> </xsl:template> </xsl:stylesheet>
6.9
Template rule membungkus elemen input person didalam elemen span HTML yang memiliki atribut class dengan nilai person.
58 PAGE 10
Politeknik Telkom
<xsl:template match="person"> <span class="person"><xsl:apply-templates/></span> </xsl:template> Namun, permasalahannya adalah jika nilai atribut tidak diketaui ketika stylesheet ditulis, tapi harus dibaca dari dokumen inputan. Solusinya dengan menggunakan nilai atribut template. Nilai atribut template merupakan ekspresi XPath. Misalnya, kita ingin menulis nama template yang mengubah input elemen name untuk elemen kosong dengan first_name, middle_initial, last_name dan atribut seperti : <name first="Richard" initial="P" last="Feynman"/> Template ini menyelesaikan task berikut : <xsl:template match="name"> <name first="{first_name}" initial="{middle_initial}" last="{last_name}" /> </xsl:template>
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
60 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. Oleh karena itu, 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.
Mahasiswa dapt memahami arti Xpath Mahasiswa dapat mengetahui semua bagian-bagian Xpath Mahasiswa dapat membuat XPath pada XSLT
Xpath
61 PAGE 10
Politeknik Telkom
7.1
Struktur dokumen XML berbentuk tree yang terdiri dari node-node, dimana masing-masing node dapat berisi beberapa node lainnya. Terdapat satu elemen root dimana elemen tadi berisi semua elemen lainnya. Struktur ini mirip dengan struktur penyimpanan data pada hardisk komputer, dimana node-node tersebut diibaratkan dengan folder dimana masing-masing folder dapat berisi folder lain. Dalam hal ini, XPath merupakan bahasa untuk memilih node-node tersebut untuk mengarahkan pencarian data pada data yang dituju. Dari perspektif XPath, ada tujuh jenis node : 1. The root node 2. Element nodes 3. Text nodes 4. Attribute nodes 5. Comment nodes 6. Processing-instruction nodes 7. Namespace nodes Satuhal yang perlu diperhatikan dalam halini adalah struktur atau konstruksi yang tidak termasuk adalah : CDATA section, entity references, dan deklarasi tipe dokumen. XPath akan beroperasi pada dokumen XML setelah semua item telah digabungkan ke dalam dokumen.
7.2
Location Paths
Yang paling berguna dalam ekspresi path adalah location path. 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. Setiap node location step dievaluasi terhadap node tertentu didalam dokumen yang disebut node konteks. The Root Location Path Sederhananya adalah dengan memilih node root dari dokumen. Perintah ini hanya ditulis dengan slash ( / ) yang menunjukan posisi absolut. Sebagai contoh XSLT template rule menggunakan pola XPath slash untuk mencocokan entri input dokumen tree dengan dan menuliskannya didalam dokumen html.
62 PAGE 10
Politeknik Telkom
<xsl:template match="/"> <html><xsl:apply-templates/></html> </xsl:template> Child Element Location Steps Lokasi path selanjutnya adalah nama elemen single. Path ini akan memilih semua elemen child dari konteks node denga spesifikasi nama yang sama. Misalnya XPath profession akan mengarah kepada semua elemen profession child pada konteks node. <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> Misalnya pada dokumen : <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <xsl:apply-templates select="person"/> </xsl:template> <xsl:template match="person"> <xsl:value-of select="name"/> </xsl:template> </xsl:stylesheet> pada penggalan <xsl:value-of select="name"/> maksudnya adalah akan menampilkan semua nilai (value-of) dari elemen name. Attribute Location Steps Kita juga dapat memilih elemen tertentu menggunakan nilai atribut tertentu dengan menggunakan simbol @. Misalnya kita menggunakan @born, maka yang akan ditampilkan adalah nilai yang dimiliki oleh atribut born. <xsl:template match="person"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="@born"/></td> <td><xsl:value-of select="@died"/></td>
Xpath 63 PAGE 10
Politeknik Telkom
</tr> </xsl:template> The comment(), text(), and processing-instruction( ) Location Steps Dikarenakan komentar dan text tidak memiliki nama, maka node comment( ) dan text( ) dapat mencocokan semua node komentar atau text kedalam node kontext. Setiap komentar merupakan node comment. Setiap node text yang ada didalam elemen merupakan text yang kontigus selagi tidak dipisahkan oleh tag. Entity references dan CDATA sections dipisahkan kedalam text dan markup dan tidak mengganggu node text. Secara default, XSLT stylesheets melakukan proses node teks tetapi tidak untuk node komentar. Namun, kita juga dapat menambahkan proses node komentar pada template XSLT stylesheets. Sebagai contoh, template rule berikut menggantikan setiap comment dengan teks "Comment Deleted" dengan tulisan italik. <xsl:template match="comment( )"> <i>Comment Deleted</i> </xsl:template> Node processing-instruction( ) akan memilih semua processing-instruction child dari node konteks. Jika itu merupakan argumen maka yang akan dipilih hanyalah yang sesuai dengan spesifikasi target. Wildcards Wildcard cocok digunakan pada elemen dan tipe node yang berbeda. Ada tiga jenis wildcard : *, node( ), and @*. Tanda asterik (*) cocok dengan semua elemen node tanpa memperhatikan namanya namun tidak dapat digunakan pada attributes, node teks, komentar, atau node processing-instruction. Contoh penggunaan perikut akan menampilkan semua nilai elemen yang ada pada dokumen : <xsl:template match="*"><xsl:apply-templates select="*"/></xsl:template> wildcard node( ) tidak hanya untuk semua tipe elemen, namun dapat juga dengan node teks, node processing-instruction, node namespace, node attribute, dan node komentar. Wildcard @* dapat digunakan pada semua node atribut.
64 PAGE 10
Politeknik Telkom
Multiple Matches with | terkadang kita sering ingin mencocokan node dengan beberapa jenis, misalnya berdasarkan elemen atau atribut ataupun yang lainnya. Dengan sebab itu, kita dapat mengkombinasikan semua location path dan step node dengan vertikal bar ( | ). Misalnya kita ingin menampilkan semua elemen first_name, last_name, profession dan hobby : <xsl:template match="first_name|last_name|profession|hobby"> <xsl:value-of select="text( )"/> </xsl:template>
7.3
Sepanjang yang telah kita pelajari, yang kita ketaui adalah pencocokan elemen, /, comment( ), text( ) dll. Namaun kesemuanya itu dapat kita gabungkan dengan /. namun ada pengecualian untuk //, ini sama halnya dengan Unix Shell sintaks untuk untuk navigasi hirarki filesistem.
Building Compound Location Paths from Location Steps with / Lokasi step dapat dikombinasikan dengan slash ( / ) untuk membuat lokasi compound. Penulisan ini hampir sama dengan penulisan lokasi file atau folder pada direktori hardisk. Misal ada dokumen XML : <people> <person> <name> <first_name>Alan</first_name> <first_name>Richard</first_name> </name> </person> </people> Contoh expresi XPart untuk menampilkan Alan dan Richard : /people/person/name/first_name/text( ).
Xpath
65 PAGE 10
Politeknik Telkom
Selecting from Descendants with // Double slash ( // ) digunakan untuk memilih semua konteks node termasuk dirinya sendiri. Misalnya kita ingin memilih semua elemen nama yang ada didalam dokumen, maka expresi XPath-nya adalah : //name Selecting the Parent Element with .. double period ( .. ) digunakan untuk memilih parent node. Misalnya kita ingin memilih semua atribut id pada dokumen, maka expresi XPath-nya adalah : //@id/.. Selecting the Context Node with . Single period ( . ) digunakan untuk mengindikasi konteks node. Didalam XSLT, hal ini sering digunakan jika kita ingin mengambil nilai yang sedang dicocokan. Misalnya, template rule berikut menyalin konten pada setiap komentar didalam input dokumen ke elemen span pada output dokumen :
7.4
Predicates
Secara umum, sebuah ekspresi XPath dapat merujuk ke lebih dari satu node. Setiap langkah dilokasi path mungkin memiliki predikat yang dipilih dari current list node pada step expression. Predikat yang berisi expresi boolean akan diuji untuk masing-masing node dalam konteks daftar node. Jika expresi tersebut palsu, maka node tersebut akan dihapus dari daftar, jika tidak maka node tersebut akan tetap ada. Misalnya kita ingin mencari semua elemen profession yang mempunyai nilai physicist. Maka expresi XPath-nya adalah : //profession[. = "physicist"]. Selain double quote, kita juga dapat menggunakan single-quote untuk mengapit
66 PAGE 10
Politeknik Telkom
elemen. Contohnya : <xsl:apply-templates select= "//profession[.= 'physicist']" />. selain itu jika kita ingin menampilkan semua elemen porson yang mempunyai elemen anak profession dengan nilai physicist, maka Ekspresi XPathnya adalah //person[profession="physicist"]. Atau jika ingin mencari elemen person dengan id p4567, kita dapat menyisipkan karakter @ pada depan nama atribut : //person[@id="p4567"]. Selain tanda = , kita juga dapat menggunakan expresi boolean yang lain, misalnya <, >, <=, >= dan !=. misalnya kita akan menampilkan seluruh elemen person yang mempunyai atribut born antara 1910 dan 1920 : //person[@born<=1920 and @born>=1910], namun jika itu ditulis dalam sebuah dokumen XML, maka expresi tersebut harus ditulis dengan : <xsl:apply-templates select="//person[@born<=1920 and @born>=1910]"/>
7.5
Setiap location step didalam location path, mempunyai dua bagian, yaitu axis dan node test. Axis berfungsi untuk mengarahkan perjalanan dari konteks node untuk mencari node selanjutnya yang akan dikunjungi. Sedangkan node test menunjukan node yang mana yang akan diincludekan dedalam axis. Dalam abbreviated location path, axis dan node test dikombinasikan, sedangkan didalam unabbreviated location path, akan dipisahkan dengan double colon ( : : ). misalnya abbreviated location path people/person/@id diubah untuk location path. Langkah pertama adalah memilih node elemen people mendekati child axis. Selanjutnya pilih node elemen person mendekati child axis. Selanjutnya pilih node atribut id mendekati chidl axis. Jika ditulis dengan sintaks unabbreviated, maka location pathnya dapat dituliskan dengan : child::people/child::person/attribute::id. Unabbreviated location path boleh mempunyai dan digunakan didalam predikat. Misalnya abbreviated path /people/person[@born<1950]/name[first_name="Alan"] akan menjadi /child::people/child::person[ attribute::born < 1950 ] /child::name[ child::first_name = "Alan" ].
Xpath
67 PAGE 10
Politeknik Telkom
7.6
Location path tidak hanya digunakan didalam ekspresi XPath, namun XPath juga mengambalikan nilai number, boolean, dan string. Numbers Nilai yang number boleh diisikan adalah semua number 8-byet, IEEE 754 floating-point double. Selain itu floating-point numbers dengan rentang dari 4.94065645841246544e-324 sampai 1.79769313486231570e+308 (positif atau negatif) dan nol. XPath menyediakan lima operator aritmatika dasar yaitu : + * div mod Addition Subtraction Multiplication Division Taking the remainder
Contoh penggunaannya adalah : <xsl:value-of select="6*7"/>, dalam template XSLT sisipan string 42 ke output tree ketika template diinstansiasi. Contohlain adalah template rule akan menghitung abad pada tahun lahir person : <xsl:template match="person"> <century> <xsl:value-of select="(@born - (@born mod 100)) div 100"/>th </century> </xsl:template> Strings kita dapat menggunakan = dan != untuk membandingkan apakan dua buah string sama atau tidak. Selain itu, kita juga dapat menggunakan operator <, >, <=, dan >= untuk membandingkan string, tapi kecuali kedua string tersebut direpresentasikan dengan number.
68 PAGE 10
Politeknik Telkom
Booleans Boolean merupakan nilai pasti yaitu true atau false. Namun, XPath tidak menyediakan literal untuk nilai boolean. Jika kita menggunakan <xsl:value-of select="true"/> pada XSLT stylesheet, maka XSLT processor akan menganggap elemen child dari conteks node dengan nama true. Namun fungsi true( ) and false( ) dapat menggantikan literatur tadi. Selain itu, kita juga dapat menggunakan ekspresi =, !=, <, >, >=, dan <= dimana hasil dari operasi tersebut menghasilkan nilai boolean. Selain itu kita juga dapat menggabungkan nilai expresi dengan operator and dang or. Contoh penggunaannya didalam XSLT : <xsl:template match="profession"> <xsl:if test=".='computer scientist' or .='physicist'"> <xsl:value-of select="."/> </xsl:if> </xsl:template>
7.7
XPath Functions
XPath memberikan beberapa fungsi yang akan berguna dalam penggunaan predikat atau raw expression. Nilai kembali dari fungsi XPath adalah : Node-Set Functions Fungsi node-set digunakan untuk mengetahu informasi tentang node-set. Fungsi yang sering digunakan adalah position( ) yang berguna untuk mengarahkan pencarian langsung pada posisi tertentu. Selain itu kita juga bisa menentukan posisi dasar yaitu kita dapat menggunakan fungsi last( ) untuk mengarahkan langsung pada elemen terahit atau fungsi firts( ) untuk mengarahkan pencarian pada elemen pertama. Fungsi count( ) berguna untuk menghitung jumlah elemen yang dimaksud. Misalnya penggunaannya adalah count(//name), maka akan mengembalikan nilai jumlah semua elemen name didalam dokumen. Fungsi id( ) umumnya digunakan untuk penyingkatan sintaks XPath. Ini mengijinkan kita untuk membentuk absolut location path yang tidak dimulai dari elemen root. Fungsi local-name( ) menggunakan nodeset sebagai argumen dan mengembalikan local part dari node ptertama dalam set itu sendiri. Fungsi namespace-uri( ) menggunakan node-set sebagai argumen dan mengembalikan namespace URI dari node pertama didalam set.
Xpath
69 PAGE 10
Politeknik Telkom
Fungsi name( ) menggunakan node-set sebagai argumen dan mengembalikan nama prefiks dari node pertama didalam set. String Functions XPath mengandung fungsi basik pemprosesan string misalnya, menghitung panjang string, mengubah string menjadi hurup besar atau sebaliknya, memotong string, dll. Fungsi string berguna untuk mengkonfersi semua argumen menjadi string. Termasuk boolean akan dikofersi menjadi string true atau false. Fungsi starts-with( ) mengambil dua argumen string. Fungsi ini mengembalikan nilai true jika argumen pertama diawali dengan argumen yang kedua. Funsi contains( ) mengambil dua string yang digunakan untuk memeriksa apakan suatu string ada pada string yang lain. Fungsi ini mengembalikan nilai true jika string pada argumeng pertama mengandung string pada argumen kedua. Fungsi substring-before( ) berguna untuk mengambil kata-kata pada argumen pertama sebelum string pada argumen yang kedua. Boolean Functions fungsi boolean adalah mengembalikan nilai true atau false. Fungsi yang digunakan adalah true( ) dan false( ). selain kedua tersebut, kita juga dapat mengoperasikan string atau number sehingga menjadi nilai boolea. Misalnya dengan menggunakan operator =, !=, <, >, <=, >=. selain itu kita jga dapat menggunakan fungsi not( ). Contohnya not(@id>400). Number Functions Fungsi yang disediakan adalah fungsi untuk mengolah number. Misalnya fungsi number( ) digunakan untuk menkonfersi semua ekspresi menjadi number. Namun dengan catatan bahwa nilai tersebut harus angka. Selain itu ada juga fungsi round( ) untuk mengubah nilai decimal menjadi pembulatan kebawah, floor( ) untuk membulatkan nilai desimal sesuai dengan nilainya, and ceiling( ) untuk membulatkan nilai desimal dengan pembulatan keatas.
70 PAGE 10
Politeknik Telkom
Rangkuman
1. XPath merupakan bahasa untuk mengalamati bagian-bagian didalam dokumen XML 2. struktur XPath mirip dengan hirarki direktori pada hardisk 3. Untuk mengarahkan kita pada data tertentu, kita dapat 4.
memanggilnya dengan menggunakan pemanggilan mirip dengan direktori folter pada hardisk. XPath dijalankan dengan menggunakan XSLT.
Xpath
71 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. Saat ini banyak sekali browser yang telah mendukung simple XLink yang lebih sedikit dibanding dengan fungsionalitas elemen A pada HTML. Banyak web browser yang tidak mendukung Xling sama sekali. Namun aplikasi yang kita buat sendiri dapat mengeturnya lebih banyak. XLink dapat mendeskripsikan tabel konten atau indeks. Dengan aplikasi yang berbeda maka akan berbeda pula mengartikan XLink.
Tujuan
1. 2. 3. 4.
72
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.
PAGE 10
Politeknik Telkom
8.1
Simple Links
Simple link didefinisikan dengan koneksi atau hubungan secara one-way antara dua resource. Source awal dari koneksi terdapat elemen link pada dirinya sendiri. Sedangkan target diidentifikasikan oleh Uniform Resource Identifier (URI). Link mulai berjalan dari source asal ke source target. source asal selalu berupa elemen XML. Sedangkan source target dapat berupa dokumen XML, atau elemen-elemen tertentu didalam dokumen XML, grup elemen dalam dokumen XML, teks span didalam dokumen XML, atau sesuatu yang bukan merupakan dokumen XML seperti MPEG movie, file PDF, atau gambar JPG. Simple XLink ditulis didalam dokumen XML sebagai elemen yang mempunyai atribut xlink:type dengan nilai simple dan atribut xlink:href dengan nilai URI target. Contohnya kita mempunyai dokumen XML pada ftp server dengan alamat ftp://archive.org/pub/etext/etext93/wizoz10.txt : <novel> <title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year> </novel> Selanjutnya dokumen berikut akan menggunakan XLink untuk dihubungkan dengan dirinya dengan file dokumen diatas : <novel xmlns:xlink= "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "ftp://archive.org/pub/etext/etext93/wizoz10.txt"> <title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year> </novel>
8.2
Link Behavior
Jika kita lihat bagaimana XLink dipresentasikan dengan hubungan antara dua resource. Misalnya ketika browser menemukan elemen novel yang menggunakan elemen http URL, seharusnya browser akan mengambil link novel dan menampilkannya didalam jendela browser sehingga menggantikan isi dari browser, atau bisa saja membukanya pada jendela yang baru. Misalnya,
Xlink 73 PAGE 10
Politeknik Telkom
konten yang terdapat pada beberapa link yang terhubung langsung dalam dokumen, seperti pada lemen image berikut : <image width="152" height="345" xlink:type="simple" xlink:href="http://www.turing.org.uk/turing/pi1/bus. jpg" /> xlink:show pilinah atribut xlink:show mempunyai lima kemungkinan nilai : 1. new Membuka wondow baru dan menampilkan kontent link URI (source target) pada window tersebut. 2. replace Menampilkan resource target pada window awal dan menggantikan dokumen awal 3. embed menampilkan resource target didalam dokumen awal pada lokasi link 4. other 5. none xlink:actuate pilinah atribut xlink:actuate mempunyai lima kemungkinan nilai : 1. onLoad Link harus diikuti pada saat aplikasi baru dijalankan. 2. OnRequest Link yang harus diikuti bila pengguna meminta rekues. 3. Other Ketika mengikuti link ditentukan oleh markup lain dalam dokumen yang tidak ditentukan oleh XLink. 4. None Tidak ada rincian mengenai kapan atau apakah akan mengikuti link ini.
8.3
Link Semantics
Merupakan sebuah link yang menghubungkan antara dua buah resource dimana resourcenya dapat berupa dokumen XML atau bukan. Tapi jika filenya berberbentuk dokumen XML, maka hubungan keduanya dapat sedikit diubah. Misalnya link dapat mengindikasikan hubungan parent-child, hubungan previous74 PAGE 10
Politeknik Telkom
next, hubungan employer-employee, hubungan customer-supplier, dan yang lainnya. Atribut XLink dapat memiliki atribut xlink:title dan xlink:role untuk menspesifikasikan maksud dan tujuan serta arti hubungan antara keduanya. atribut xlink:title mengandung sedikit keseluruhan mendeskripsikan remote resource untuk ditunjukan sebagai tooltip saat user memindahkan kursor ke link. Sedangkan xlink:role mengandung URI. 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>
8.4
Extended Links
Olehkarena simple link tidak mendeskripsikan arah hubungan antara dokumen dengan remote resource, maka Extended Link dapat mendeskripsikan kumpulan resource dan kumpulan path antara resource. Setiap koneksi path terdapat dua resource. Mungkin saja setiap resource terhubung dengan satu resource lain, dua resource lain atau bahkan tidak memiliki resource (nol resource), resource yang lain, atapun subser sesource didalam kumpulan tersebut. Didalam XML, Extended Link direpresentasikan oleh elemen Extended Link, yang tipe elemen atributnya adalah xlink:type dengan nilai extended. Contohnya adalah sebagai berikut : <novel xlink:type="extended"> <title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year> </novel>
Xlink
75 PAGE 10
Politeknik Telkom
selain extended, nilai untuk atributnya dapat berupa locator dan arc. Atribut dengan nilai locator mengandung URI untuk resource pada lokasi tersebut, sedangkkan arc merupakan path antara resource, selain atribut dirinya sendiri arc juga memiliki atribut xlink:from dan xlink:to dimana atribut xlink:from untuk identifikasi resource sumber sedangkan atribut xlink:to untuk identifikasi resource tujuan. Local resource locator merepresentasikan remote resource, yaitu resouce yang tidak terletak pada dokumen yang mengandung extended link. Sedangkan extended link harus memiliki local resource. Olehkarena itu, untuk mendeskripsikan local resouce adalah dengan cara : <author xlink:type="resource">L. Frank Baum</author> atau kita juga dapat menambahkan label pada link tersebut. Contoh penggunaannya adalah pada contoh berikut ini : <author xlink:type="resource" Frank Baum</author> xlink:label="baum">L.
Element title kita dapat menggunakan atribut xlink:title untuk mendeskripsikannya. Atribut ini dubuat dengan tujuan untu memberikan judul dari link. Contoh penggunaannya adalah : <edition xlink:type="locator" xlink:href="urn:isbn:0700609857" xlink:title="University Press of Kansas" xlink:role="http://www.kansaspress.ku.edu/" xlink:label="ISBN0700609857"> <publisher_info xlink:type="title"> <ul> <li>The Kansas Centennial Edition</li> <li>Illustrated by Michael McCurdy</li> <li>Foreword by Ray Bradbury</li> <li>1999</li> <li>216 pages</li> <li>SRP: $24.95</li> </ul>
76 PAGE 10
Politeknik Telkom
</publisher_info> </edition>
8.5
Linkbases
Salah satu revolusi pada pada fitur XLink dimana memiliki kemampuan untuk mendefinisikan antar dokumen tanpa kita harus mengontrolnya. Misalnya dokumen yang memiliki third-party Link. Sebuah dokumen XML yang mengandung link third-party disebut linkbase. Linkbase membentuk link dari dokumen lain ke dirinya.
8.6
Sebuah link pada dokumen XML harus falid, semua link yang ada didalam dokumen dapat kita deklarasikan didalam DTD sama seperti atribut yang lain. Kita juga dapat menggunakan #FIXED untuk mendeklarasikannya. Contoh berikut adalah : <!ELEMENT novel (title, author, year)> <!ATTLIST novel xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' xlink:type (simple) #FIXED 'simple' xlink:href CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> contoh penggunaan deklarasi tersebut pada dokumen adalah sebagai berikut : <novel xlink:href = "urn:isbn:0688069444"> <title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year> </novel>
Xlink
77 PAGE 10
Politeknik Telkom
Rangkuman
1. XLink
merupakan atribut yang berbasi sistaks untuk melampirkan link dokumen XML yang memungkinkan user untuk
menambahkan hyperlinking kesuatu dokumen. 2. XLink dapat berarti tag a pada HTML yang dapat menampilkan resource tujuan pada halaman browser
78 PAGE 10
Politeknik Telkom
9 XPointer
Overview
XPointer bukanlah merupakan sintaks XML. 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
XPointer
79 PAGE 10
Politeknik Telkom
9.1
http://java.sun.com:80/products/jndi/index.html. Pada skema tersebut, http menunjukan aplikasi protokol protokol yang digunakan sebagai penyampaian dokumen. sedangkan java.sun.com:80 menunjukan alamat asal atau darimana dokumen tersebut diambil dimana angka 80 menandakan bahwa data yang diambil dilewatkan melalui port 80, port ini biasanya dapat diakses secara bebas oleh siapapun, namun terkadang penyedia juga dapat melewatkan melalui port lain dan akan memberikan autektifikasi username dan password untuk mengaksesnya. Pada bagian /products/jndi/index.html menunjukan lokasi file tersebut disimpan pada server. File yang akan dikirim adalah index.html yag tersimpan pada folder /products/jndi pada direktori server. Selain penulisan seperti diatas, kita juga dapat menandai bagian-bagian tertentu pada dokumen, dimana dokumen tersebut sebelumnya sudah terbagi sesuai dengan kriteria tertentu. Untuk mengaksesnya kita dapat menggunakan tanda sharp ( # ). misalnya kita ingin mengarahkan pada dokumen seperti contoh diatas, tetapi kita ingin langsung mengarahkan halaman tersebut bukan pada awal dokumen, namun pada bagian-bagian tertentu. Misalnya kita langsung ingin mengarah pada bagian download. URL yang dituliskan untuk melakukan hal tersebut adalah : http://java.sun.com:80/products/jndi/index.html#download. Ketika browser menampilkan halaman dokumen tersebut, browser akan mencari nama penanda bagian dengan nama download pada dokumen tersebut yang ditulis dengan sintaks : <a name="download"></a> ketika menemukannya, maka browser akan langsung menscrol halaman sehingga bagian tersebut langsung ditampilkan. Namun hal tersebut bekerja pada HTML dokumen. Namun hal itu masih memiliki kekurangan, untuk mengarah ke point tersentu, kita kita harus mengubah dokumen yang akan dituju agar kita dapat memasukan penandanya. XPointer berupaya menghilangkan haltersebut, dimana kita dapat menentukan sendiri dimana kita akan menentukan link penggunaan ekspresi XPath sebagai penanda bagian dokumen. Selain itu, XPointer dapat meng-ekspan XPath dengan menyediakan operasi untuk memilih poin tertentu pada
80 PAGE 10
Politeknik Telkom
dokumen XML. misalnya, sebuah XPointer dapat menjelaskan berbagai teks yang dipilih oleh mouse. 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) jika kita tidak dapat menemukan apa yang dlakukan XPointer, kita dapat memberikan langkah alternatif pencarian dengan XPointer pula. Misalnya,
jika XPointer tidak menemukan elemen lat_name, ia mencari elemen last_name sebagai penggantinya :
xpointer(//first_name)xpointer(//last_name)
9.2 XPointers pada Link XPointer dapat digunakan dimanapun dia dipasang. Baik itu didalam URL ataupun link. Misalnya, kita ingin mengarahkan langsung pada bagian dokumen yang langsung mengarah pada dokumen nama pada posisi pertama, dapat kita tuliskan linknya menjadi :
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
XPointer 81 PAGE 10
Politeknik Telkom
< dapat ditulis dengan %3C, tanda petik dua ( ) akan ditulis dengan %22, dapat dutuliskan dengan %C3%A9 dan sebagainya.
9.3
Bare Names
XPointers dapat memberikan sejumlah ekstensi yang cocok untuk XPath. Salah satu contohnya adalah 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#NTAbsoluteLocationPath ke-elemen XPath pada atribut tipe ID dengan nilai NTAbsoluteLocationPath. Contohnya, kita ingin meng-link ke pilihan Motivation dan Summary namespace pada dokumen XML yang dialamati dengan : http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml.
9.4
Child Sequences
XPointer dapat memilih elemen dengan posisi relatif untuk elemen yang sejajar. Contohnya xpointer(/child::*[position() = 1]/child::*[ position( ) = 2]/child::*[position( ) = 3]) memilih tiga elemen child pada elemen child kedua dari elemen root. Namun, 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( ).
9.5
Namespaces
XPointers memerlukan mekanisme sendiri untuk mengikat prefiks namespace ke URI namespace. Hal ini dilakukan dengan menempatkan satu atau lebih bagian xmlns sebelum bagian xpointer dan dapat ditulis dengan
82 PAGE 10
Politeknik Telkom
xmlns(prefix=URI). Misalnya pemetaan XPointer prefiks svg pada namespace http://www.w3.org/2000/svg mencari semua elemen rect dalam namespace :
xmlns(svg=http://www.w3.org/2000/svg) xpointer(//svg:rect)
9.6
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))
XPointer
83 PAGE 10
Politeknik Telkom
9.7
Ranges
Range merupakan jangkauan parsing karakter data antara dua poin. Fungsi yang ada pada XPointer untuk range adalah : 1. Fungsi range( ) fungsi range( ) mengembalikan batasan antara start-point sebelum batasan lokasi sampai end-point setelah batasan lokasi. 2. Fungsi range-inside( ) Untuk setiap elemen node akan sama sebagai batasan yang dikembalikan oleh range( ). 3. Fungsi range-to( ) Mengambil sebuah lokasi yang harus mengembalikan tepat satu lokasi. Start-points dari konteks node merupakan start-points yang akan dikembalikan 4. Fungsi string-range( ) Mengambil argumen sebagai sebuah ekspresi XPath dan mengidentifikasi lokasi dan substring dan mencocokkan terhadap nilai string XPath pada setiap lokasi 5. Relative XPointers Dapat digunakan pada dirinya sendiri tanpa harus menggunakan URL eksplisit. 6. Fungsi Here( ) Hanya digunakan pada dokumen itu sendiri dan merujuk pada node yang mengandung XPointer. 7. Fungsi Origin( ) Digunakan ketika dokumen link out-of-line dan mengarah pada node asal.
84 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
XPointer
85 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.
Tujuan
1. 2. 3.
86
Mahasiswa dapat memahami penggunaan schema Mahasiswa dapat menggunakan schema pada dokumen XML Mahasiswa dapat membedakan antara schema dan DTD
PAGE 10
Politeknik Telkom
10.1 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: 1. Element nesting 2. Element occurrence constraints 3. Permitted attributes 4. Attribute types and default values Sedangkan skema standar memasukan : 1. Simple and complex data types 2. Type derivation and inheritance 3. Element occurrence constraints 4. 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.
Politeknik Telkom
Elemen yang dideklarasikan oleh elemen top-level pada skema dianggap elemen global. Annotations dengan menggunakan komentar pada XML, parser tidak menjamin bahwa komentar akan tetap utuh hingga proses parsing selesai. Untuk mengakomodasi hal tersebut, elemen skema memiliki sebuah optional elemen xs:annotation sebagai elemen anak pertama. Annotation memiliki konbinasi: 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> xml:lang untuk mengidentifikasi bahasa pesan singkat.
Elemen xs:appinfo berisi kombinasi karakter data atau markup dari skema yang akan diincludekan Element Declarations kita juga dapat mendeklarasikan elemen yang akan digunakan. Contoh pendeklarasian berikut dengan deklarasi single elemen : <xs:element name="fullName" type="xs:string"> Simple Types kita juga dapat mendeklarasikan tipe data yang ingin kita gunakan. Adapun tipe data yang dapat digunakan dalam hal ini adalah : anyURI, base64Binary,
88 PAGE 10
Politeknik Telkom
boolean, byte, dateTime, duration, integer, language, Name, normalizedString, string dan token Attribute Declarations atribut dideklarasikan menggunakan elemen xs:attribute. Atribut dapat dideklarasikan secara global atau pada bagian elemen tertentu saja. Contoh : <xs:element name="fullName"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="language" type="xs:language"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
Target Namespaces Menggabungkan skema dengan XML namespace sangat sederhana. Kita hanya menambahkan atribut targetNamespace ke lemen root xs:schema seperti : <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://namespaces.oreilly.com/xmlnu t/address"> Controlling Qualification ElementFormDefault dan atribut attributeFormDefault dari elemen xs:schema kontrol lokal menyatakan apakah elemen dan atribut harus memenuhi namespace-qualified dalam dokumen. Misalnya atribut
XML Schemas 89 PAGE 10
Politeknik Telkom
attributeFormDefault yang ditetapkan untuk memenuhi syarat dalam skema seperti ini: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://namespaces.oreilly.com/xmlnu t/address" xmlns:addr="http://namespaces.oreilly.com/xmlnut/add ress" attributeFormDefault="qualified">
90 PAGE 10
Politeknik Telkom
Types of Element Content Empty Simple content Mixed content Any type
XML Schemas
91 PAGE 10
Politeknik Telkom
92 PAGE 10
Politeknik Telkom
menjadi satu modul dan digunakan oleh beberapa dokumen. Ada tiga mekanisme yang diberikana, yaitu : xs:include, xs:redefine, dan xs:import. Derived Complex Types kita dapat menggunakan elemen xs:extension dan xs:restriction untuk mengetahui cara kerjanya tanpa harus berangkat kedalam node. Tipe yang dihasilkan oleh xs:extension setara dengan penambahan konten dengan deklarasi baru ke conten deklarasi dasar. Sedangkan elemen xs:restriction memungkinkan hubungan secara langsun antara dokumen. Substitution Groups merupakan kimpulan elemen yang semuanya dapat dipertukankan dengan elemen tertentu dan subtitution goup juga sdisebtu sebagai head element. Untuk membuat substitution group, elemen yang diperlukan harus dideklarasi termasuk atribut substitutionGroup yang merupakan nama head untuk grup tersebut. Dan dimanapun elemen head itu dideklarasikan yang merujuk pada skema, maka setiap anggota substitution group juga muncul.
XML Schemas
93 PAGE 10
Politeknik Telkom
Setting fixed Facets kita dapat men-setnya secara permanen dengan nilai yang diberikan dengan cara menambahkan atribut fixed="true". Uniqueness and Keys dengan keterbatasan kemampuan atribut ID dan IDREF, skema XML mengatasi keunikan sebuah elemen dengan yang lainnya dengan menggunakan elemen xs:unique dan xs:key. Elemen xs:unique akan memaksa nilai elemen dan atribut menjaid unik untuk spesifikasi elemen dalam skema dokumen. Contoh : <xs:element name="contacts" type="addr:contactsType" minOccurs="0"> <xs:unique name="phoneNums"> <xs:selector xpath="phone"/> <xs:field xpath="@addr:number"/> </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>
94 PAGE 10
Politeknik Telkom
</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>
XML Schemas
95 PAGE 10
Politeknik Telkom
Rangkuman
1. 2. 3.
Pada dasarnya kegunaan skema adalah untuk melengkapi kekurangan-kekurangan 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.
96 PAGE 10
Politeknik Telkom
Overview
Bab ini mengenalkan DOM (Document Object Model) dan penggunaannya dalam program untuk mengakses dan memanipulasi dokumen XML.
Tujuan
1. 2.
mengenal DOM XML menggunakan objek-objek DOM XML untuk mengakses berbagai bagian dokumen XML.
97 PAGE 10
Politeknik Telkom
11.1 Pengantar
Document Object Model (DOM) mendefinisikan struktur lojik dokumen XML, cara mengakses dan memanipulasinya. Ia menyediakan Application Programming Interface (API) untuk dokumen XML dan HTML. Nama DOM dipilih karena ia dirancang dekat dengan paradigma objectoriented: dokumen XML tersusun atas object-object. Setiap object memiliki property dan method pengaksesnya. Menggunakan DOM, pemrogram dapat membuat dokumen XML, menelusuri strukturnya, menambah, memodifikasi, atau menghapus elemen-elemen dan isinya. Object-object dan method-method yang disediakan oleh DOM dapat digunakan dalam beragam bahasa pemrograman, semisal Java, C++, dan Visual Basic. Object-object ini dapat juga digunakan dalam bahasa script, seperti VBScript dan JavaScript. Untuk dapat menggunakan fitur-fitur XML, DOM menggunakan parser DOM-enabled, misalnya MSXML. Parser DOMenabled membaca dokumen XML, menelusurinya, meyakinkan bahwa ia valid. Kemudian, ia membuat representasi memori dalam struktur data tree. Struktur tree terbuat dari node-node. Anda dapat menggunakan object-object DOM yang disediakan parser DOM-enabled untuk memanipulasi node-node ini.
98 PAGE 10
Politeknik Telkom
MSXML Library
Dokumen XML Parser DOM Tree Root Child text Child text
Aplikasi
Gambar 10.1 DOM, Dokumen XML dan Application Perhatikan potongan program berikut: <PRODUCTDETAILS> <PRODUCT> <PRODID>P001</PRODID> <PRODNAME> Beras </PRODNAME> <PROD>5000</SALARY> </PRODUCT> <PRODUCT> <PRODID>P002</PRODID> <PRODNAME> Jagung </PRODNAME> <PROD>5000</SALARY> </PRODUCT> </PRODUCTDETAILS> Gambar berikut menunjukkan struktur tree-nya:
PRODUCTDETAILS PRODUCT
PRODID P001 PRODNAME Beras PRODPRICE 5000 PRODID P002
PRODUCT
PRODNAME Jagung PRODPRICE 4000
99 PAGE 10
Politeknik Telkom
Setiap node tree memiliki nama, tipe dan nilai. Contoh node PRODID, namanya PRODID, tipenya element, nilainya P001.
Penjelasan Membuat element baru <PRODUCT></PROD UCT> Membuat atribut <PRODUCT PRODID=><PROD UCT> Membuat komentar Membuat text untuk node Membuat node
docobj.createElement( PRODUCT) docobj.createAttribute(P RODID) docobj.createComment( This is an XML document) docobj.createTextNode( Mini Bus) docobj.createNode(elem ent, PRODUCT, )
Politeknik Telkom
ce-URI) docobj.createNode(elem ent, prod:PRODUCT, www.ecomatcybershopp e.com/Products) docobj.createNode(1, PRODUCT, ) docobj.getElementsByTag Name(PRICE) docobj.load(http://www. ecomatcybershoppe.com/ products.xml) docobj.load(c:\products. xml) docobj.loadXML(<?xmlv ersion=1.0> <PRODUCTS> <PRODUCT> <NAME> Barbie Doll </NAME> </PRODUCT> </PRODUCTS>) docobj.transformNode( products.xsl) This method takes a style sheet object as its parameter and processes the node by applying the corresponding style sheet template on the XML document and returns the result of transformation. docobj.appendChild(root)
Mengambil semua node dengan nama tag PRICE Mengambil dokumen xml
loadXML(string)
appendChild(chi ld node)
Politeknik Telkom
save(destination ) createDocumen tFragment() createProcessin gInstruction(tar get, text) createEntityRef erence(referenc e name) createElementN S(namespaceUR I, qualifiedname) createAttribute NS(namespace URI, qualifiedName) getElementsByT agNameNS()
docobj.save(http://www. ecomatcybershoppe.com/ product.xml) docobj.createDocumentF ragment() docobj.createProcessingIn struction(XML, version=1.0) docobj.createEntityRefere nce(newref) docobj.createElementNS( http://www.cybershoppe. com/element, NewE) docobj.createAttributeNS (http://www.cybershoppe .com/attribute, NewA) Docobj.getElementsByTag NameNS(http://www.w3. org/1998/Math/MathML ,apply)
Menyimpan dokumen XML yang ada di RAM ke disk Membuat fragment (bagian) dokumen XML Membuat ProcessingInstruction Membuat objek EntityReference Membuat element di namespace Membuat atribut di namespace Mengambil semua elemen dengan tag yang sama dari namespace
Objek Document memiliki property, ditunjukkan dalam tabel berikut. Property Contoh Penjelasan Async docobj.async = true Jika true, script jalan terus meskipun dokumen XML sedang diload. childNodes var firstelem = Daftar node anak dari docobj.childNodes.item(1 suatu parent node. ) documentEleme var Elemen root. nt root=docobj.documentEl ement firstChild var Anak pertama firstelem=docobj.firstChil d
102 PAGE 10
Politeknik Telkom
lastChild parseError
var firstelem=docobj.lastchild var error = docobj.parseError var stateinfo = docobj.readyState if (stateinfo == 4) //Document loading //completed { : [perform someaction] :} document.write (docobj.xml) docobj.validateOnParse= true
Anak terakhir Memberikan object ParseError yang berisi status load dokumen XML Status load mungkin : 1:loading; 2:loaded; 3:interactive; 4:completed. readyState melihat statusnya ini
readyState
xml validateOnParse
Menulis isi xml ke browser Jika true, berarti parser harus memvalidasi dokumen XML
Biasanya mengakses dokumen XML dengan method dan property object Dokumen sudah cukup. Oleh karena itu, untuk object-object berikutnya, penjelasan tidak dilakukan secara rinci. 11.3.2 Element Object Element menyatakan seluruh node element dalam dokumen. Atribut element dipandang sebagai property, bukan element child. Berikut adalah method-method yang disediakan di object ini. - getAttribute(attributeName) - getAttributeNode(attributeName) - getElementsByTagName(tagName) - normalize() - removeAttribute(attributeName)
Document Object Model 103 PAGE 10
Politeknik Telkom
11.3.3 Node
removeAttributeNode(attributeNode) setAttribute(attributeName, attributeValue) setAttributeNode(attributeNodeName) getAttributeNS(namespaceURI, localName) setAttributeNS(namespaceURI, qualifiedname,value) removeAttributeNS(namespaceURI, localName) getAttributeNodeNS(namespaceURI, localName) setAttributeNodeNS(namespaceURI, attribute) getElementsByTagNameNS(namespaceURI,localName)
Object node menyatakan suatu node tree. Boleh jadi berupa elemen yang berisi elemen anak. Objek node memiliki method berikut : - appendChild(newChild) - insertBefore(newNode, refNode) - removeChild(nodeName) - replaceChild(newNode, oldNode) - hasChildNodes() - cloneNode(Boolean) Objek node juga memiliki property berikut: - nodeName - nodeType - nodeValue - childNodes - firstChild - lastChild - text - xml 11.3.4 NodeList Objek NodeList menyediakan daftar node yang ada di tree. Dengan node list, programmer dapat mengakses node manapun yang dikehendaki. Objek NodeList memiliki method berikut: - item(Number) - nextNode() Objek node memiliki property length untuk mengetahui berapa banyak node dalam daftar node.
104 PAGE 10
Politeknik Telkom
Perhatikan kode JavaScript berikut: myelement=myxmlDoc.getElementsByTagName("emp"); for(i=0; i< myelement.length; i++) alert(myelement.item(i).xml); Kode ini mengambil daftar node dengan nama emp, disimpan di variabel myelement. Looping for sepanjang length selanjutnya menelusuri node dan menampilkan isinya.
11.3.5 Attr Objek Attr menyatakan attribute suatu objek Element. Objek ini mewarisi property dan method objek Node. Hanya, oleh DOM ia tidak dipandang sebagai node anak dari suatu element, tetapi sebagai property. 11.3.6 Text Objek ini menyatakan text dalam node tree, memiliki method splitText(number), untuk memisahkan text. 11.3.7 CDataSection Objek ini menyatakan seksi CDATA dalam node tree. Node ini digunakan untuk mengabaikan bagian teks yang biasanya dikenali sebagai markup. 11.3.8 ParseError Objek ini memberi informasi tentang error penelusuruan terkini. Objek ini memiliki atribut berikut: - errorCode - reason - line - linePos - srcText Perhatikan kode berikut: var prodxml = new ActiveXObject("Msxml2.DOMDocument.4.0");
Document Object Model 105 PAGE 10
Politeknik Telkom
prodxml.async = false; prodxml.load("product.xml"); if (prodxml.parseError.errorCode != 0) { alert("A parse error occurred."); } else { alert(prodxml.documentElement.xml); } Setelah diload, akan diperiksa apakah ada error. Jika errorCode bernilai 0 berarti tidak ada kesalahan dalam dokumen XML. Berikut adalah contoh kode product.xml dan JavaScript yang mengaksesnya. <?xml version="1.0"?> <productdetails> <product> <prodid>P001</prodid> <prodname>Beras</prodname> <price>5000</price> </product> <product> <prodid>P002</prodid> <prodname>Jagung</prodname> <price>6000</price> </product> <productdetails> Kode Javascript berikut digunakan untuk menampilkan rincian setiap karyawan. <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function Navigate() { //Create an instance of the DOMDocument object. var myxmldoc=new ActiveXObject("Msxml2.DOMDocument.4.0"); var i; myxmldoc.async=false; //Load the XML document. Specify the appropriate path. myxmldoc.load("product.xml"); //Check whether the process of loading is complete and that //there are no errors in the XML document.
106 PAGE 10
Politeknik Telkom
if (myxmldoc.readyState == 4 && myxmldoc.parseError.errorCode==0) { //Store the reference to the root element of the XML //document in the variable root var root=myxmldoc.documentElement; //Traverse through the child nodes of the root element. for (i=0; i< root.childNodes.length; ++ i) { //Display the XML code for each child node. alert (root.childNodes.item(i).xml); } } //If the XML document contains an error, display an error //message. else { alert("Failed to load the document. Check whether your XML document is well-formed"); } } </SCRIPT> </HEAD> <BODY onload="javascript:Navigate()"> </BODY> </HTML> Contoh lain akan diberikan di buku praktikum.
107 PAGE 10
Politeknik Telkom
Rangkuman
1. 2. 3. 4. 5.
DOM adalah antarmuka pemrograman aplikasi yang mengijinkan aplikasi mengakses dokumen XML. Objek-objek DOM dipakai untuk mengakses dan memanipulasi dokumen XML. MSXML parser membuat struktur tree representasi dokumen XML. Node adalah wadah berisi informasi tentang elemen, atribut, dan isi dokumen XML. Objek DOM berikut digunakan untuk memanipulasi data dalam dokumen XML: Document , Element, Node, NodeList, Attr, Text, CDataSection, ParseError
108 PAGE 10
Politeknik Telkom
1. 2. 3. 4. 5.
Data XML dikelola DOM dalam bentuk struktur linked list (list berkait). DOM dibuat oleh Microsoft. Object yang merupakan root dari struktur tree DOM adalah Element ParseError digunakan untuk memeriksa kesalahan validasi dokumen XML. Mendapatkan node-node anak digunakan properti ChildNodes.
109 PAGE 10
Politeknik Telkom
Pilihan Ganda
Petunjuk: Pilihlah jawaban yang paling tepat! 1. A. B. C. 2 A. B. C. 3. A. B. C. 4. A. B. C. 5. A. B. C. DOM singkatan dari : Directory Object Model Document Oriented Medium Document Oriented Model DOM dibuat untuk : Mengakses dokumen XML Memodelkan dokumen XML Membuat objek dokumen XML D. E. Document Object Medium Document Object Model
D. E.
DOM merepresentasikan data dokumen XML dalam bentuk struktur data tree D. struktur data stack struktur data graph E. struktur data queue struktur data stack Berikut adalah objek-objek DOM kecuali: Tree D. Node Document E. NodeList Element Property Node untuk mendapatkan node-node anak adalah: nodeName D. childNodes nodeType E. firstChild nodeValue
110 PAGE 10
Politeknik Telkom
Latihan
1. 2. 3. 4. 5.
Apa manfaat DOM? Sebutkan objek-objek dalam DOM! Sebutkan method-method dalam objek Document dan kegunaannya. Sebutkan property dalam objek Dokumen dan kegunaannya. Jika diketahui : . xmldoc = load(product.xml var root = xmldoc.DocumentElement; ... File product.xml berisi data berikut: <?xml version="1.0"?> <productdetails> <product> <prodid>P001</prodid> <prodname>Beras</prodname> <price>5000</price> </product> <product> <prodid>P002</prodid> <prodname>Jagung</prodname> <price>6000</price> </product> <productdetails> Bagaimana mencari data price dari prodid P002?
111 PAGE 10
Politeknik Telkom
Overview
Bab ini mengenalkan Simple API for XML (SAX) dan menggunakannya untuk mengakses dokumen XML.
Tujuan
1. 2. 3.
112
Mempelajari SAX sebagai alternative selain DOM untuk mengakses dokumen XML Melihat fitur-fitur SAX Menelusuri dokumen XML dengan SAX API
PAGE 10
Politeknik Telkom
113 PAGE 10
Politeknik Telkom
Program Anda
startDocument(...) main(...)
Gambar 11.1 Callback pada SAX Kode berikut menjelaskan bagaimana beragam method callback dipanggil ketika memproses dokumen XML: <!-- parser memanggil method startElement()--> <Address>
114 PAGE 10
Politeknik Telkom
<!-- parser memanggil method startElement(), characters() dan endElement() --> <name> Tony </name> <!-- parser memanggil method startElement(), characters(), dan endElement() --> <street> 172,Churchill</street> <!--parser memanggil method startElement(), characters(), dan endElement()--> <phone-number>01-8282882</phone-number> <!-- parser memanggil method endElement() ---> </Address>
Politeknik Telkom
12.5.1 Interface ContentHandler Interface ini menyediakan beragam method callback yang dipanggil ketika SAX parser menelusuri dokumen XML. Method-methodnya adalah sebagai berikut : - setDocumentLocator() - startDocument() - endDocument() - startElement() - endElement() - characters() 12.5.2 Interface ErrorHandler Interface ini mendefinisikan beragam method callback untuk menangani berbagai error yang mungkin terjadi selama penelusuran. Sesuai jenis kesalahan yang terjadi, interface ini memiliki method: - warning() - error() - fatalError() 12.5.3 Interface DTDHandler Interface ini mendefinisikan method untuk menangani event yang terjadi ketika suatu parser memproses DTD dokumen XML. Method yang disediakan : - notationDecl() - unparsedEntityDecl() 12.5.4 Interface EntityResolver Interface ini mendefinisikan method callback untuk menangani entitas external selama penelusuran, yaitu resolveEntity().
Politeknik Telkom
1. 2. 3. 4.
import package terkait. extends class DefaultHandler. parse dokumen XML. override method callback.
Berikut adalah contoh bagaimana menampilkan isi dokumen XML dengan menggunakan Java. File product.xml berisi data berikut. <?xml version="1.0"?> <productdetails> <product> <prodid>P001</prodid> <prodname>Beras</prodname> <price>5000</price> </product> <product> <prodid>P002</prodid> <prodname>Jagung</prodname> <price>6000</price> </product> <productdetails> Kode Java berikut digunakan untuk menampilkan isi product.xml. import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; public class displayProductSax extends DefaultHandler { static private Writer writerOut; StringBuffer stringBuffer; public static void main(String fileName[]) { if (fileName.length != 1) { System.err.println("Usage: cmd filename"); System.exit(1);
Simple API for XML (SAX) 117 PAGE 10
Politeknik Telkom
} DefaultHandler defaultHandler = new displayProductSax(); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { writerOut = new OutputStreamWriter(System.out,"UTF8"); SAXParser Sax_Parser = saxParserFactory.newSAXParser(); /* Parse the XML file */ Sax_Parser.parse( new File(fileName[0]), defaultHandler); } catch (Throwable thr) { thr.printStackTrace(); } System.exit(0); } /* Method that handles the start document event notification */ public void startDocument() throws SAXException { IOHandler("<?xml version = '1.0' encoding = 'UTF-8'?>"); /* To print a new line character */ newLine(); } /* Method that handles the end document event notification */ public void endDocument() throws SAXException { try { newLine(); writerOut.flush(); } catch (IOException e) { throw new SAXException("I/O error", e); } }
118 PAGE 10
Politeknik Telkom
/* Method that handles the start element event notification */ public void startElement(String namespaceURI, String sName, StringqName, Attributes attrs) throws SAXException { displayText(); String eName = sName; if ("".equals(eName)) eName = qName; IOHandler("<" + eName); if (attrs != null) { /* Get the length of the attribute */ for (int i = 0; i < attrs.getLength(); i++) { /* Gets the attribute local name */ String aName = attrs.getLocalName(i); if ("".equals(aName)) aName = attrs.getQName(i); IOHandler(" "); /* Retrieve the value of an attribute */ IOHandler(aName + "=\"" + attrs.getValue(i) + "\""); } } IOHandler(">"); } /* Method that handles the end element event notification */ public void endElement(String namespaceURI, String sName, StringqName) throws SAXException { displayText(); String eName = sName; if ("".equals(eName)) eName = qName; IOHandler("</" + eName + ">"); } /* Method that handles the character data event */
Simple API for XML (SAX) 119 PAGE 10
Politeknik Telkom
public void characters(char buf[], int offset, int len) throws SAXException { String s = new String(buf, offset, len); /* if the string buffer is empty */ if (stringBuffer == null) { stringBuffer = new StringBuffer(s); } else { /* Add the character to the string buffer */ stringBuffer.append(s); } } /* Display text accumulated in the string buffer */ private void displayText() throws SAXException { /* If the string buffer is empty */ if (stringBuffer == null) return; String s = ""+stringBuffer; IOHandler(s); stringBuffer = null; } /* Write the content in the string buffer to the output console */ private void IOHandler(String s) throws SAXException { try { writerOut.write(s); writerOut.flush(); } catch (IOException IOExcep) { throw new SAXException("I/O error", IOExcep); /* Any I/O error is wrapped in SAXException. The generated Exception is thrown back to the SAX
120 PAGE 10
Politeknik Telkom
parser*/ } } /* Prints a new line character */ 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); } } } Ketikkan program di atas di Notepad. Simpan dengan nama displayProductSax.java. Lakukan kompilasi dengan perintah : C:\>javac displayProductSax.java Jalankan dengan perintah C:\>java displayProductSax product.xml.
121 PAGE 10
Politeknik Telkom
Rangkuman
1. 2.
3. 4. 5.
SAX adalah alternatif selain DOM untuk mengakses dokumen XML. Dibanding DOM, SAX menelusuri dokumen XML dari awal hingga akhir, tidak membentuk tree, lebih cepat untuk browse, harus mengoverride method callback, lebih hemat memori, hanya membaca dokumen XML, tidak mengubahnya. Package Java org.xml.sax. berisi interface dasar SAX API. Ada beragam interface yang dapat diimplement oleh program pengguna : ContentHandler, ErrorHandler, DTDHandler. Untuk membuat aplikasi JAXP yang menelusuri dokumen XML menggunakan SAX dilakukan tahap berikut: - Import package yang dibutuhkan - Extend class DefaultHandler. - Telusuri dokumen XML. - Override method callback.
122 PAGE 10
Politeknik Telkom
1. 2. 3. 4. 5.
SAX sama dengan DOM dalam hal tujuannya untuk mengakses dokumen XML, namun berbeda caranya. SAX membentuk struktur tree dari dokumen XML. SAX terakhir dibuat khusus untuk Java. Harus meng-override method yang disediakan untuk membuat aplikasi parser SAX. Disebut callback karena memanggil kembali method yang dibuat programmer.
123 PAGE 10
Politeknik Telkom
Pilihan Ganda
SAX singkatan dari: Simple API for XML Simple Access for XML Standardized API for XML
D. E.
SAX awal mula dibuat khusus untuk bahasa: Java D. JavaScript C# E. VBScript VB.net Struktur data yang digunakan SAX adalah: tree D. graph linked list E. tidak menggunakan struktur data apapun stack SAX lebih unggul daripada DOM dari sisi : Kecepatan browse D. Penelusuran elemen Kebutuhan memori E. A dan B benar Kemampuan mengubah data Ketika menemukan simbol < di dokumen XML, SAX parser akan memanggil method : startDocument() D. endDocument() startElement() E. endElement() Characters()
Politeknik Telkom
Latihan
1. 2.
Jelaskan persamaan dan perbedaan antara SAX dan DOM. Apakah program displayProductSax.java di atas dapat digunakan untuk menelusuri semua dokumen XML? Jelaskan dan buktikan.
125 PAGE 10
Politeknik Telkom
Overview
Bagaimana jika akses web site tidak hanya file html? Atau upload dan download file? Akses internet akan lebih berdaya guna jika antar program aplikasi dapat berkomunikasi. Komponen program yang ada di suatu web site yang dapat diakses dari web site lain dikenal dengan istilah Web Service. XML, yang tag-tagnya bebas didefiniskan oleh pengguna, dapat digunakan untuk menggambarkan Web Service. WSDL (Web Service Description Language) dibuat berbasis XML untuk menggambarkan Web Service dan bagaimana mengaksesnya.
Tujuan
1. 2.
126 PAGE 10
Politeknik Telkom
13.1
Konsep komunikasi antar program aplikasi sesungguhnya bukan konsep baru. Beberapa terapannya sudah dilakukan sebelumnya : Sun RPC (1985) CORBA (1992) DCE / RPC (1993) Microsoft COM (1993) Microsoft DCOM (1996) Java RMI (1996) Method yang dimiliki suatu class yang ada di suatu computer dicoba untuk dapat diakses oleh class di computer lain. Konsep ini melahirkan ide pembuatan Web Service, aplikasi di suatu web site dapat diakses dari web site lain. Gambar berikut mungkin lebih menjelaskan konsep Web Service.
Application 1 XML Application 2
Website 1
Website 2
Gambar 9.1 Akses aplikasi di web site lain melalui XML Web Service itu dapat dibuat dalam suatu bahasa pemrograman, dan dikenali oleh bahasa pemrograman lain. Interfacenya didefinisikan dengan XML. Antar aplikasi berinteraksi menggunakan pesan-pesan berbasis XML yang dibawa oleh protokol Internet. Web Service diidentifikasi dengan URI (universal resource identifier).
13.2
Web Services dibangun pada landasan protokol XML. Untuk pertukaran pesan, mungkin digunakan SOAP, XML-RPC. Untuk menggambarkan service digunakan WSDL. Untuk pencarian service digunakan UDDI. SOAP, WSDL dan UDDI adalah standard de fakto implementasi Web Service. Gambar berikut diharapkan lebih menjelaskan peranan masing-masing.
Web Service Definition Language 127 PAGE 10
Politeknik Telkom
Service Registry
Publish (UDDI)
Service Provider
Bind (SOAP)
Gambar 9.2 Protokol pendukung Web Service Arsitektur Web Service diimplementasikan dalam lima layer berikut: DISCOVERY DESCRIPTION PACKAGING TRANSPORT NETWORK Gambar 9.3 Lima lapis teknologi pendukung Web Service Layer teratas, Discovery, menyediakan mekanisme standar untuk mendaftarkan dan menemukan Web service, UDDI. Direktori UDDI berisi pointer ke Web service dan dokumenWSDLnya. Direktori UDDI digunakan aplikasi client untuk menemukan Web service.
128 PAGE 10
Politeknik Telkom
Layer bawahnya, Description, mendeskripsikan Web service, menggunakan standar WSDL. Layer bawahnya, Packaging, menyediakan mekanisme pemaketan informasi yang akan dikirimkan atau diterima. Format paket yang sering digunakan adalah SOAP, yang dibangun di atas XML. Dengan SOAP, aplikasi dan komponen dapat mengkomunikasikan pesan call dan return-nya. Layer bawahnya, Transport dan Network disediakan protocol TCP/IP untuk komunikasi pesan.
13.3
WSDL
WSDL singkatan dari Web Services Description Language, dibuat utuk menggambarkan Web Service. WSDL ditulis dalam format XML, sehingga WSDL adalah dokumen XML. WSDL juga dimanfaatkan untuk mencari Web Service. WSDL sejak 2007 direkomendasikan oleh W3C.
13.4
Dokumen WSDL berisi informasi berikut: daftar web services yang tersedia, fungsi Web service, apa parameternya, apa outputnya, format cara pakai, alamat URLnya. Tag-tag yang digunakan dalam dokumen WSDL ditunjukkan dalam tabel berikut. Tabel 9.1 Tag-tag dokumen WSDL Element <types> <message> <portType> <binding> Penjelasan tipe data yang akan digunakan web service messages yang akan dikirimkan web service operasi (function) yang disediakan the web service. Protokol komunikasi yang digunakan web service - Bagaimana message dikirim di kabel? - Apa rincian spesifik protokol message protocol disana Dimana service disimpan
<service>
Politeknik Telkom
<types> definition of types........ </types> <message> definition of a message.... </message> <portType> definition of a port....... </portType> <binding> definition of a binding.... </binding> </definitions> Gambar 9.3 Contoh Dokumen WSDL WSDL biasanya tidak dibuat manual oleh programmer, namun dibuat otomatis oleh toolkit, semisal Altova XMLSpy di www.w3schools.com.
130 PAGE 10
Politeknik Telkom
Service
Port Binding
Port Type
(in) Message
Operation(s)
(out) Message
Gambar 9.4 Port Web Service Gambar 9.4 memberikan gambaran kerangka kerja Web Service. Service punya beberapa port. Oleh karenannya, elemen <portType> merupakan elemen terpenting. Port adalah lokasi pengiriman pesan, misalnya : http://cs.cf.ac.uk/axis/service. Tiap port dikaitkan ke protokol message protocol. Port type menyatakan: Nama Operation, tipe message masukan, tipe message keluaran. Elemen <message>, mirip parameter, mendefinisikan elemenelemen data operasi. Setiap message dapat terdiri dari satu atau beberapa bagian.
Web Service Definition Language 131 PAGE 10
Politeknik Telkom
Elemen <types> mendefinisikan tipe data yang digunakan web service. Untuk netralitas maksimum, WSDL menggunakan skema XML untuk mendefinisikan tipe data. Elemen <binding> mendefinisikan format message dan rincian protokol untuk setiap port. Berikut adalah contoh dokumen WSDL yang disederhanakan: <message name="getBookResponse"> <part name="resp" element="book"/> </message> <portType name="bookPortType"> <operation name="getBook"> <input message="getBookRequest"/> <output message="getBookResponse"/> </operation> </portType> <binding type="bookPortType" name="bookBind"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation> <soap:operation soapAction="getBook"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="Hello_Service"> <port binding="bookBind" name="bookPort"> <soap:address location="http://localhost/bookservice"/> </port> </service> Di contoh ini elemen <portType> mendefinisikan "bookPortType" sebagai nama port, dan "getBook" sebagai nama operation. Operasi "getTerm" memiliki input message yang disebut "getBookRequest" dan output message yang disebut "getBookResponse".
132 PAGE 10
Politeknik Telkom
<wsdl:definitions name="nmtoken"? targetNamespace="uri"> <import namespace="uri" location="uri"/> * <wsdl:documentation .... /> ? <wsdl:types> ? <wsdl:documentation .... /> ? <xsd:schema .... /> * </wsdl:types> <wsdl:message name="ncname"> * <wsdl:documentation .... /> ? <part name="ncname" element="qname"? type="qname"?/> * </wsdl:message> <wsdl:portType name="ncname"> * <wsdl:documentation .... /> ? <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <wsdl:input message="qname"> ? <wsdl:documentation .... /> ? </wsdl:input> <wsdl:output message="qname"> ? <wsdl:documentation .... /> ? </wsdl:output> <wsdl:fault name="ncname" message="qname"> * <wsdl:documentation .... /> ? </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:serviceType name="ncname"> * <wsdl:portType name="qname"/> + </wsdl:serviceType> <wsdl:binding name="ncname" type="qname"> * <wsdl:documentation .... /> ?
Web Service Definition Language 133 PAGE 10
Politeknik Telkom
<-- binding details --> * <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:input> ? <wsdl:documentation .... /> ? <-- binding details --> </wsdl:input> <wsdl:output> ? <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:output> <wsdl:fault name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="ncname" serviceType="qname"> * <wsdl:documentation .... /> ? <wsdl:port name="ncname" binding="qname"> * <wsdl:documentation .... /> ? <-- address details --> </wsdl:port> </wsdl:service> </wsdl:definitions>
134 PAGE 10
Politeknik Telkom
Rangkuman
1. 2. 3.
Web Service adalah komponen program di suatu web site yang dapat diakses dari web site lain. Untuk menggambarkan service yang disediakan digunakan WSDL (Web Service Description Language) WSDL, dibuat dengan XML, terdiri dari tag-tag : <message>, <portType>, <binding>, <service>, masing-masing dengan manfaatnya sendiri.
135 PAGE 10
Politeknik Telkom
1. 2. 3. 4. 5.
Programmer biasanya lebih senang menggunakan coding karya sendiri. Web Service, meski kelihatannya bagus, tidak akan berkembang pesat seperti yang dibayangkan. Web Service yang dibuat dengan bahasa Java harus diakses dengan program berbahasa Java juga. Pengaksesan service harus menggunakan format yang sudah ditentukan oleh WSDL. WSDL untuk menggambarkan service, SOAP untuk mengaksesnya, UDDI untuk mendaftarkannya. Program pengakses seharusnya membayar service yang disediakan program lain.
136 PAGE 10
Politeknik Telkom
Pilihan Ganda
Petunjuk: Pilihlah jawaban yang paling tepat! 1. A. B. C. 2. A. B. C. 3 A. B. Berikut adalah terapan konsep komunikasi antar program: RPC D. Web Service RMI E. Semua benar Corba Komponen berikut penting untuk berjalannya suatu Web Service: WSDL D. XML-RPC UDDI E. Semua benar SOAP WSDL digunakan untuk: Menggambarkan service. Apa yang harus disiapkan program lain yang akan mengakses suatu service. Apa masukan dan keluaran service D. E. Port mana yang dipakai Semua benar.
C. 4. A. B. C. 5. A. B. C.
Tag-tag berikut digunakan di WSDL kecuali: <message> D. <binding> <portType> E. <html> <type> Tag paling penting dalam dokumen WSDL adalah : <message> D. <binding> <portType> E. <service> <type>
137 PAGE 10
Politeknik Telkom
Latihan
1. 2. 3. 4. 5.
Apakah Web Service itu? Jelaskan arsitektur Web Service. Sebutkan apa saja yang dibutuhkan agar Web Service dapat bekerja. Sebutkan tag-tag dalam dokumen WSDL dan manfaatnya. Apakah programmer perlu membuat sendiri WSDL?
138 PAGE 10
Politeknik Telkom
Overview
SOAP adalah protokol berbasis XML yang mengijinkan aplikasi bertukar informasi melalui HTTP. Bab ini akan menjelaskan apa itu SOAP, dan bagaimana menggunakan XML untuk bertukar informasi di antara aplikasi.
Tujuan
1. 2.
mengenal apakah SOAP itu dan apa manfaatnya mengetahui bagaimana menggunakannya
139 PAGE 10
Politeknik Telkom
14.1
Pengantar SOAP
Banyak aplikasi saat ini berkomunikasi menggunakan Remote Procedure Calls (RPC) antar objek seperti DCOM dan CORBA, tetapi HTTP tidak dirancang untuk ini. SOAP, singkatan Simple Object Access Protocol, adalah protokol berbasis XML yang memungkinkan aplikasi bertukar informasi melalui HTTP. Dalam SOAP diatur format pengiriman pesan. Selain menggunakan HTTP, mungkin juga menggunakan FTP atau SMTP. SOAP bebas platform, tidak seperti RMI yang harus Java atau DCOM. SOAP efektif untuk membangun Web services. SOAP sederhana dan ringan untuk pengiriman data dibanding CORBA, RMI, DCOM. SOAP mudah dipelajari dan diimplementasikan. SOAP didukung IBM, Microsoft, Apache, direkomendasikan W3C, sejak 2003. Output Web service akan dipakai aplikasi client yang mungkin beda platform. Format XML berbasis plain-text, dapat digunakan untuk pertukaran data. XML digunakan untuk menggambarkan data dalam pesan SOAP.
140 PAGE 10
Politeknik Telkom
Seluruh elemen diatas dideklarasikan dalam namespace default untuk SOAP envelope: http://www.w3.org/2001/12/soap-envelope dan namespace default untuk kode SOAP dan tipe datanya di: http://www.w3.org/2001/12/soap-encoding Gambar 10.1 berikut menggambarkan keterkaitan antar elemen. Gambar 10.2 mengambarkan tag-tagnya. SOAP Envelope (Required) SOAP Header (Optional) Extension Information e.g. routing, security
Gambar 10.1 SOAP Message Beberapa aturan penting pembuatan SOAP Message: harus menggunakan SOAP Envelope namespace harus menggunakan SOAP Encoding namespace harus tidak berisi rujukan DTD harus tidak mengandung XML Processing Instructions
UNIVERSAL DESCRIPTION, DISCOVERY AND INTEGRATION (UDDI)
141 PAGE 10
Politeknik Telkom
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soapencoding"> <soap:Header> ... ... </soap:Header> <soap:Body> ... ... <soap:Fault> ... ... </soap:Fault> </soap:Body> </soap:Envelope> Gambar 10.2 Tag-tag SOAP Message
14.3
Contoh SOAP
Berikut adalah contoh SOAP Message yang dikirim dan yang diterima.
SOAP Message yang dikirim. POST /InStock HTTP/1.1 Host: www.stock.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> ... (optional header information) </soap:Header>
142 PAGE 10
Politeknik Telkom
<soap:Body xmlns:m="http://www.stock.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope> SOAP Message yang diterima HTTP/1.1 200 OK Content-Type: application/soap; charset=utf-8 Content-Length: nnn <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle ="http://www.w3.org/2001/12/soapencoding"> <soap:Header> ... (optional header information) </soap:Header> <soap:Body xmlns:m ="http://www.stock.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>
14.4
Elemen Fault
Elemen Fault, bersifat optional, menyimpan inofrmasi error dan status untuk suatu SOAP message. Jika ada, ia harus menjadi elemen anak dari elemen Body, dan hanya boleh muncul satu kali.
143 PAGE 10
Politeknik Telkom
Elemen Fault berisi sub elemen berikut: Sub Elemen <faultcode> <faultstring> <faultactor> <detail> Penjelasan Kode kesalahan Penjelasan error Informasi siapa penyebab kesalahan Berisi rincian kesalahan terkait elemen Body
Kode berikut menunjukkan contoh pesan SOAP yang berisi error. <Body xmlns=http://www.w3.org/2001/12/soap-envelope> <Fault> <faultcode>Client</faultcode> <faultstring>Something went wrong</faultstring> <detail>Application specific error information</detail> </Fault> </Body> Kode kesalahan berikut digunakan untuk menggambarkan kesalahan yang terjadi. Error Penjelasan VersionMismatch namespace tidak sesuai MustUnderstand Elemen anak dari Header bertanda mustUnderstand tidak dapat dipahami. Client Kesalahan dari client Server Kesalahan dari server
14.5
Aplikasi dan komponen yang memproses SOAP message disebut SOAP node. SOAP node mungkin berperan sebagai : Sender, Receiver, atau Intermediary. Perannya disimpan di Header SOAP message. Sender mengirim SOAP message ke receiver. Pengirim awal SOAP disebut initial SOAP sender. Node perantara menerima dari SOAP sender dan mengirim ulang ke SOAP node lain.
144 PAGE 10
Politeknik Telkom
SOAP Header dapat berisi dua atribut global: - SOAP role : menyatakan peran SOAP node ketika pesan diterima. - SOAP mustUnderstand : menyatakan apakah block Header diproses oleh SOAP node.
14.6
SOAP Toolkit 3.0 dibuat Microsoft untuk membangun aplikasi yang menggunakan SOAP message. Toolkit ini cepat untuk mengakses Web service. Toolkit ini mendukung: - standar W3C SOAP, - spesifikasi skema XML W3C - pembuatan tipe data simple dan complex dalam skema XML. Dalam toolkit ini ada Wizard untuk membuat dokumen WSDL dan WSML utilitas untuk melacak lintasan SOAP message. Web Services Meta Language (WSML) adalah dokumen XML yang berisi informasi komponen di server untuk memproses request. Jika digunakan Soap Messaging Object (SMO) untuk memproses SOAP Messages, maka SOAP message diproses di client dan di server tempat Web service. SMO adalah framework yang menyatakan setiap komponen message sebagai object. SMO dapat digunakan untuk mengakses dokumen WSDL dan WSML menggunakan beragam bahasa script. Aliran data di sisi Client: Aplikasi client mengirim request ke Web server. Object SoapClient dibuat di komputer client untuk mengirim dan menerima messages menggunakan SOAP. Aliran Data di sisi Server: Web server memproses request. SOAP listener di Web server menerima request. Listener menggunakan object SoapServer yang disediakan SMO.
145 PAGE 10
Politeknik Telkom
Object SoapServer menggunakan informasi dalam dokumen WSML untuk me-load komponen, memanggil servis yang diminta, dan mendapatkan outputnya.
Tool WSDL Generator digunakan untuk men-generate dokumen WSDL dan WSML untuk suatu Web service. Dokumen WSDL, WSML dan file ASP listener yang dibuat dengan SOAP Toolkit 3.0 harus disimpan di Web server. Generator WSDL membuat file ASP. File ASP listener menggunakan object SoapServer object di Web server. File-file WSDL dan WSML di server di-load oleh method init() object SoapServer. Method SoapInvoke() dari object SoapServer meng-ekstrak informasi tentang request dari file WSDL, menggunakan file WSML, me-load Web service yang dikehendaki, dan memberi output ke client sebagai object SoapResponse. Object SoapSerializer memungkinkan Anda membangun SOAP message. menyediakan akses ke beragam komponen SOAP message : Envelope, Header, Body, and Fault. Method yang didefinisikan Web service dipanggil pada saat menggunakan Web service.
146 PAGE 10
Politeknik Telkom
Rangkuman
1. 2. 3.
SOAP digunakan untuk bertukar informasi antar aplikasi melalui HTTP. SOAP message terdiri dari tag-tag : <envelope>, <header>, <body> dan <fault>, masing-masing dengan fungsinya sendiri. SOAP Message dikirim oleh client ke server. Client menerima jawaban dari server dalam bentuk SOAP Message juga.
147 PAGE 10
Politeknik Telkom
1. 2. 3. 4. 5.
Isi pesan SOAP harus sesuai dengan pesan yang diminta oleh WSDL. Pesan SOAP dibuat manual oleh programmer client, bukan toolkit. Pesan SOAP boleh tanpa tag <envelope> Pesan SOAP boleh tanpa tag <header> Pesan SOAP boleh tanpa tag <fault>
Pilihan Ganda
Petunjuk: Pilihlah jawaban yang paling tepat! 1. A. B. C. 2. A. B. C. 3. A. B. C. SOAP digunakan untuk: Menggambarkan service Mempublikasikan service Mengakses service Berikut ciri SOAP, kecuali Bebas platform Bebas bahasa pemrograman Dibuat dengan XML D. E. Mengakses objek sederhana Bertukar informasi
D. E.
Elemen tertinggi dalam SOAP Message adalah: Header D. Fault Envelope E. Attachment Body Berikut adalah sub-sub elemen tag <Fault>, kecuali:
PAGE 10
148
Politeknik Telkom
4. A. B. C. 5. A. B. C.
D. E.
<detail> <body>
Kode kesalahan VersionMismatch berarti: Versi html tidak sama D. Versi namespace berbeda Versi xml berbeda E. Versi Windows berbeda Versi SOAP berbeda
Latihan
1. 2. 3. 4. 5.
Jelaskan hubungan antara SOAP dengan WSDL. Sebutkan komponen SOAP, tag-tag dan kegunaannya. Haruskah programmer membuat SOAP sendiri? Jelaskan. Pesan SOAP yang diterima pasti berbeda dengan yang dikirim. Benarkah? Jelaskan Apa manfaat namespace dalam SOAP? Jelaskan.
149 PAGE 10
Politeknik Telkom
Overview
UDDI, singkatan dari Universal Description, Discovery and Integration, adalah standar berbasis XML untuk menggambarkan, mempublikasikan, dan menemukan Web services. Di bab ini akan dipelajari apa itu UDDI, mengapa dan bagaimana kita menggunakannya.
Tujuan
1. 2.
Apakah UDDI itu? Apa yang dimaksud dengan : - Entitas bisnis - Bisnis service - Binding template - tModels - UDDI query
150 PAGE 10
Politeknik Telkom
15.1
Pengantar
UDDI, singkatan dari Universal Description, Discovery and Integration (UDDI) Protocol, adalah standar berbasis XML untuk menggambarkan, mempublikasikan dan menemukan Web service. UDDI merupakan insisiatif industri terbuka, oleh Microsoft, IBM, Ariba, dan sebagainya, yang memungkinkan pelaku bisnis saling menemukan satu dengan yang lain dan mendefinisikan bagaimana mereka berinteraksi melalui internet. UDDI bebas platform, merupakan kerangka kerja terbuka, dapat berkomunikasi melalui SOAP, CORBA, dan protocol RMI Java. UDDI menggunakan WSDL untuk menggambarkan interface ke web service. Bersama SOAP dan WSDL merupakan tiga fondasi standar web service. UDDI terdiri dari dua bagian: direktori seluruh metadata web service termasuk pointer ke WSDL-nya direktori yang digunakan aplikasi client untuk menemukan Web service.
15.2
Perusahaan dapat mendaftarkan dirinya ke dalam tiga tipe informasi dalam UDDI registry. Informasi ini dimasukkan dalam tiga elemen UDDI. Tiga elemen itu adalah : - white page - yellow page - green page. Kategori white page berisi : informasi dasar tentang perusahaan dan bisnisnya, informasi kontak bisnis : nama bisnis, alamat, nomor telpon, NPWP, dsb. Informasi ini penting bagi pihak lain yang ingin tahu bisnis perusahaan tersebut. Kategori yellow page berisi : rincian lebih lanjut tentang perusahaan, termasuk kemampuan e-commerce. Di sini digunakan skema kategorisasi industri, kode industri, kode produk, kode identifikasi bisnis. Informasi ini memudahkan customer mencari produk yang mereka ingingkan. Kategori green pages berisi informasi teknik tentang web service: lokasi URL, informasi discovery dan data terkait untuk menemukan dan menjalankan Web Service.
UNIVERSAL DESCRIPTION, DISCOVERY AND INTEGRATION (UDDI)
151 PAGE 10
Politeknik Telkom
Jadi, UDDI tidak hanya dibatasi untuk menggambarkan web service berdasarkan SOAP. Lebih daripada itu UDDI dapat digunakan untuk menggambarkan beragam service, dari sebuah halaman web atau alamat email, hingga SOAP, CORBA, dan servis Java RMI.
15.3
Arsitektur Teknik
Arsitektur Teknik UDDI terdiri dari tiga bagian : - UDDI data model : skema XML untuk menggambarkan bisnis dan web service. - UDDI API specification : spesifikasi API untuk mencari dan mempuplikasikan data UDDI - UDDI cloud services : ini adalah situs operator yang menyediakan implementasi spesifikasi UDDI dan mensinkronkan secara peridoik.
UDDI Business Registry (UBR), adalah sistem konseptual tunggal dari beberapa node yang memiliki data tersinkronisasi melalui replikasi.
152 PAGE 10
Politeknik Telkom
UDDI berisi skema XML yang menggambarkan lima struktur data: businessEntity businessService bindingTemplate tModel publisherAssertion
15.4
Entitas bisnis
Entitas bisnis menyatakan penyedia web services dalam UDDI registry. Informasinya meliputi : nama perusahaan, deskripsi bisnis, informasi kontak, informasi lain. Gambar 11.2 menunjukkan contoh kasus.
153 PAGE 10
Politeknik Telkom
Perhatikan penggunaan Universally Unique Identifiers (UUIDs) dalam atribut businessKey dan serviceKey. Setiap entitas bisnis dan business service diidentifikasi unik dalam seluruh registry UDDI melalui UUID yang diberikan registry ketika informasi pertama kali dimasukkan.
Politeknik Telkom
<bindingTemplate> bindingKey=MNOP serviceKey=EFGH> <description> Web Service </description> <accessPoint> http://bbc.co.uk/news </accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey=QRST/> </tModelInstanceDetails> </businessTemplate>
<bindingTemplate> bindingKey=IJKL serviceKey=EFGH> <description> Web Page </description> <accessPoint> http://news.bbc.co.uk </accessPoint> </businessTemplate>
Gambar 11. 4 Binding Template dalam UDDI Business service boleh memiliki beberapa binding templates. Service boleh menyatakan implementasi berbeda dari service yang sama, masingmasing dikaitkan dengan sekumpulan protokol atau alamat jaringan yang berbeda.
15.7
tModel
Tidak ada hubungan eksplisit antara UDDI dan WSDL. Binding template berisi access point tetapi belum ada informasi bagaimana cara memakainya (misalnya tipe data yang diharapkan). tModel (Technical Model) menghubungkan deskripsi interface dengan suatu binding. Beberapa binding boleh merujuk interface yang sama. Mirip dengan industri penerbangan mendefinisikan interface standar pemesanan tiket, maskapai penerbangan menerapkan interface ini.
155 PAGE 10
Politeknik Telkom
<bindingTemplate> bindingKey=MNOP serviceKey=EFGH> <description> Web Service </description> <accessPoint> http://bbc.co.uk/news </accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey=QRST/> </tModelInstanceDetails> </businessTemplate>
156 PAGE 10
Politeknik Telkom
157 PAGE 10
Politeknik Telkom
Rangkuman
1. UDDI digunakan untuk mendaftarkan web service ke UDDI registry. 2. Ada tiga tipe informasi dapat disimpan dalam UDDI registri : white yellow (entitas bisnis), yellow page (business service), dan green page (web service). 3. Ada lima struktur data dalam skema XML UDDI : businessEntity, businessService, bindingTemplate, tModel, publisherAssertion 4. Disediakan beragam query untuk mendapatkan data dari UDDI registry.
1. 2. 3. 4. 5.
UDDI dibuat untuk bertukar informasi antar aplikasi. UDDI, dibuat oleh Microsoft, hanya berlaku di lingkungan sistem operasi Window. UDDI tidak berhubungan dengan WSDL. Green page berisi data entitas bisnis. UDDI tidak hanya dibatasi untuk menggambarkan web service berdasarkan SOAP.
158 PAGE 10
Politeknik Telkom
Pilihan Ganda
Petunjuk: Pilihlah jawaban yang paling tepat! 1. A. B. C. 2. A. B. C. 3. A. B. C. 4. A. B. C. 5. A. B. C. Dari komponen arsitektur teknik berikut yang mana yang merupakan situs operator yang menyediakan implementasi spesifikasi UDDI? UDDI data model D. Business Entity UDDI API Spesification E. Business Service UDDI cloud services Di antara komponen skema XML UDDI, yang berisi identitas perusahan adalah: businessEntity D tModel businessService E. publisherAssertion bindingTemplate Di antara komponen skema XML UDDI, yang berisi produk yang ditawarkan perusahan adalah: businessEntity D tModel businessService E. publisherAssertion bindingTemplate Di antara komponen skema XML UDDI, yang berisi informasi teknis bagaimana mengakses web service adalah: businessEntity D tModel businessService E. publisherAssertion bindingTemplate Di antara komponen skema XML UDDI, yang berisi hubungan antar entitas bisnis: businessEntity D tModel businessService E. publisherAssertion bindingTemplate
159 PAGE 10
Politeknik Telkom
Latihan
1. 2. 3. 4. 5.
Jika perusahan PT.ABC beralamat di Jl.Abc 11 mendaftarkan diri sebagai entitas bisnis, bagaimana bentuk skema XMLnya? Jika perusahaan tersebut menjual barang-barang elektronik, TV, radio, dsb, bagaimana bentuk skema XMLnya? Jika perusahaan ini membuat web service salesOrderSystem, bagaimana bentuk skema XMLnya? Jika salesOrderSystem dapat diakses dari www.ABC.com bagaimana bentuk skema XMLnya? Apakah ada hubungan antara UDDI dengan WSDL? Jelaskan.
160 PAGE 10
Politeknik Telkom
16
Overview
Di bagian terdahulu sudah dibahas Web Service dibangun dari tiga komponen: SOAP, UDDI dan WSDL. Pada bab ini dibahas bagaimana mengimplementasikan Web Service.
Tujuan
1. 2.
Mengenal Web Service Toolkit Mencoba salah satu Web Service mengimplementasikan Web Service.
Toolkit
untuk
161 PAGE 10
Politeknik Telkom
16.1 Pengantar
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)
162 PAGE 10
Politeknik Telkom
Berikut adalah contoh Web Service Toolkit, bahasa yang didukung dan Web Servernya : Web Service Toolkit Apache AXIS (open source) Microsoft .Net SOAP::Lite Bahasa Java, C++ Visual Basic, C#, Perl (SO Windows) Perl Web Server Apache Tomcat IIS bebas
16.2
Apache AXIS adalah engine 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/.
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
164 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
165 PAGE 10
Politeknik Telkom
Tahap 3: Tulis kode client import Calculator.*; public class CalcClient { public static void main(String[] args) { 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
166 PAGE 10
Politeknik Telkom
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)
167 PAGE 10
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
168 PAGE 10
Politeknik Telkom
1. 2. 3. 4. 5.
Dengan adanya Web Service Toolkit, pemrograman Web Service menjadi mudah. Tanpa Web Service Toolkit, programmer harus membuat XML, SOAP, HTTP sendiri. Kita bebas mendownload Web Service Toolkit Apache AXIS. Kita bebas mendownload Microsoft.NET Deploy cara instant lebih mudah daripada cara custom.
169 PAGE 10
Politeknik Telkom
Pilihan Ganda
Petunjuk: Pilihlah jawaban yang paling tepat! 1. A. B. C. 2. A. B. C. Berikut adalah Web Service Toolkit yang bebas didownload: Apache AXIS D. J2EE Server Microsoft .NET E. IIS SOAP :: Lite Untuk menjalankan Apache AXIS perlu diinstall berikut, kecuali: Apache Tomcat D Sistem Operasi Java E Microsoft .NET Apache AXIS
170 PAGE 10
Politeknik Telkom
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.
171 PAGE 10
Politeknik Telkom
DAFTAR PUSTAKA
1. Ian Wang, Deploying Web Service, users.cs.cf.ac.uk/ I.N.Wang/teaching/lecture a Deploying Web Services.ppt, Maret 2009 2. NIIT, XML Courseware, 02-Querying XML Documents, NIIT Publishing, 2004 3. www.w3schools.com, Web Services Tutorial, Maret 2009 4. www.w3schools.com, WSDL Tutorial, Maret 2009 5. www.w3schools.com, SOAP Tutorial, Maret 2009 6. www.w3schools.com, UDDI Tutorial, Maret 2009
172 PAGE 10