• Tidak ada hasil yang ditemukan

Controlling Type Derivation

3 XSD tipe Elemen

3.4 Controlling Type Derivation

Atribut final dapat ditambahkan pada sebuah definisi tipe kompleks untuk mengatur #all, extension, atau restriction. Apabila suatu tipe berasal dari tipe <?xmlversion="1.0" encoding="UTF-8"?>

<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:elementname="mahasiswa_polpos_2020"> <xs:complexType>

<xs:sequence>

<xs:elementmaxOccurs="unbounded" ref="mahasiswa"/> </xs:sequence>

</xs:complexType> </xs:element>

<xs:elementname="mahasiswa"> <xs:complexType>

<xs:sequence>

<xs:elementref="nim"/> <xs:elementref="nama"/> <xs:elementref="ortu"/> </xs:sequence>

<xs:attributename="aktif" use="required"> <xs:simpleType>

<xs:restrictionbase="xs:NCName">

<xs:patternvalue="ya|tidak"></xs:pattern> </xs:restriction>

</xs:simpleType> </xs:attribute>

</xs:complexType> </xs:element>

<xs:elementname="nim" type="xs:integer"/> <xs:elementname="nama" type="xs:NCName"/> <xs:elementname="ortu">

<xs:complexType> <xs:sequence>

<xs:elementref="ayah"/> <xs:elementref="ibu"/> </xs:sequence>

</xs:complexType> </xs:element>

<xs:elementname="ayah" type="xs:NCName"/> <xs:elementname="ibu" type="xs:NCName"/> </xs:schema>

POLITEKNIK POS INDONESIA

lain yang memiliki atribut final, schema processor memverifikasi. Contoh penulisan :

perhatikan xsd di atas pada atribut:aktif terdapat restriction pengisian hanya boleh string ya atau tidak.

PRAKTIK Studi kasus:

Anda memiliki perusahaan logistik jasa pengantar barang (PT X). Anda memiliki banyak klien. Anda dan klien berkomunikasi melalui pertukaran dokumen xml.

Struktur dokumen sebagai berikut: • barang o kode o nama o satuan o harga o asal  PT  kodeWIL o tujuan  PT  kodeWIL

Buatlah contoh file xml nya dan schema xsd.

1. File xml dapat diintegrasikan dengan berbagai project, untuk keperluan

praktikum ini kita akan membuat project tidak utuh, hanya membuat file xml dan xsd dengan tools dan plugin eclipse, kemudian memeriksa apakah dokumen tersebut valid, well form.

2. Buat baru

3. Klik file>new>project >plug-in project 4. Beri nama: xmltest_1

5. Klik next>finish

6. Perhatikan pada project explorer, struktur projectnya.

7. Perlu diperhatikan bahwa suatu perusahaan mengolah data dalam bentuk database system seperti (oracle, sql server, mysql dlsb) kemudian hasil olahan

POLITEKNIK POS INDONESIA

tadi disimpan dalam bentuk xml yang akhirnya dipertukarkan antar B2B. Kemudian untuk memastikan bahwa data yang dikirim adalah benar dilampirkan definisinya atau xsd. Maka dalam praktikum ini diasumsikan bahwa output bermula dari olahan database adalah file xml.

8. Pada project explorer, fold: src/xmltest_1. Klik kanan 9. Pilih New>other...

10. XML file dan klik next

11. Beri nama: barang.xml dan klik finish

12. Berdasarkan struktur dokumen di atas, kita asumsikan dokumen xml nya sebagai berikut: (ingat aturan format xml, nested, casesensitif dll)

14. Jika Anda menggunakan plugin Rinzo xml editor, pada project explorer, klik kanan file barang.xml dan pilih Create XML Definition

<?xml version="1.0" encoding="UTF-8"?> <logbarang> <barang> <kode>M1112</kode> <satuan>pc</satuan> <harga>5000</harga> <asal> <pt>ladyrock</pt> <kodewil>10</kodewil> </asal> <tujuan> <pt>union</pt> <kodewil>1001</kodewil> </tujuan> </barang> <barang> <kode>M1122</kode> <satuan>pc</satuan> <harga>1000</harga> <asal> <pt>pbm</pt> <kodewil>103</kodewil> </asal> <tujuan> <pt>mitra kencana</pt> <kodewil>300</kodewil> </tujuan> </barang> </logbarang>

POLITEKNIK POS INDONESIA

15. Beri nama barang.xsd, klik finish 16. Dapat dilihat design schema

Beri nama barang.xsd, klik finish apat dilihat design schema

17. Anda dapat memeriksa sesuai struktur yang terlihat pada xml 18. Klik pada elemen logbarang

Perhatikan pada jendela

selanjutnya Anda dapat memodifikasi banyaknya elemen yang boleh muncul melalui jendela properties ini

19. Klik pada (logbarangType)

Anda dapat memeriksa sesuai struktur yang terlihat pada xml logbarang

Perhatikan pada jendela properties, Maximum Occurence: unbounded. Untuk selanjutnya Anda dapat memodifikasi banyaknya elemen yang boleh muncul melalui jendela properties ini.

Klik pada (logbarangType)

properties, Maximum Occurence: unbounded. Untuk selanjutnya Anda dapat memodifikasi banyaknya elemen yang boleh muncul

POLITEKNIK POS INDONESIA

Dapat terlihat elemen pembentuk barang, sesuai pada struktur xml 20. Klik pada (barangType)

21. Sampai disini dapat dilihat bahwa struktur schema mengikuti pendekatan berbasis objek.

22. Buatlah pattern

a. untuk kode tidak boleh kosong b. Harga harus diatas 1000

23. Anda dapat memeriksa valid/tidaknya dokumen xml dengan cara seperti pada bab sebelumnya

TUGAS:

Buatlah file xml dan xsd berdasarkan kebutuhan perusahaan yang bergerak di bidang: • Industri manufacturing

• Industri jasa

• Industri perhotelan • Pendidikan

Isi data pada masing-masing file xml minimal 5, libatkan juga penggunaan atribut, patern (contoh: pola untuk email [email protected]) minimal elemen 10.

POLITEKNIK POS INDONESIA BAB V

TIK:

Mahasiswa dapat Memahami dasar-dasar SAX dan DOM Pokok Bahasan:

• SAX, DOM Sub Pokok Bahasan:

• Pendahuluan • SAX

1 Pendahuluan

Terdapat beberapa cara untuk membaca dan memanipulasi dokumen XML. Cara yang umum adalah dengan metode

• Simple Api for XML (SAX) dan • Document Object Model (DOM)

Bahasa pemrograman telah menyediakan kemampuan untuk ini.

2 SAX

SAX dikembangkan oleh W3C dan dirilis pada tahun 1998. Parser berbasis SAX memanggil metode ketika suatu markup (misalnya tag awal, tag akhir, dll) ditemukan. Tidak ada struktur pohon yang diciptakan. Data diteruskan ke aplikasi dari dokumen XML secara berurut. Parser SAX biasanya digunakan untuk membaca dokumen XML yang tidak akan diubah.

Hasil parsing SAX tidak disimpan dalam memori sehingga lebih ringan ketika digunakan untuk membaca dokumen XML yang besar. Karena tidak disimpan dalam memori maka SAX tidak memiliki kemampuan untuk mengolah data XML. Cara SAX bekerja dengan berjalan secara sequential dari awal hingga akhir dan memanggil fungsi event handler untuk setiap jenis elemen yang ditemui dalam file XML.

Parser berbasis SAX tersedia untuk berbagai bahasa pemrograman, C++, Java, dan Perl yang paling popular. SAX didasarkan pada model event driven menggunakan call backs untuk menangani pengolahan. Berikut hal yang dapat dilakukan program dengan metode SAX:

• Mencari pada dokumen suatu elemen yang mengandung kata kunci • Mencetak format konten

• Memodifikasi dokumen XML dengan membuat perubahan kecil, seperti memperbaiki ejaan dan elemen penggantian nama

• Membaca data untuk membangun struktur data yang kompleks Tetapi program tidak dapat:

POLITEKNIK POS INDONESIA

• Re-order elemen dalam dokumen

• Menyelesaikan cross-references antar elemen • Verifikasi ID-IDREF Link

• Validasi dokumen XML

3 DOM

Berbeda dengan SAX, DOM membaca seluruh dokumen XML ke dalam memori dan mempresentasikannya sebagai tree of nodes, sehingga dapat dilakukan manipulasi terhadap data memori, mengakses nilai node pada lokasi dimanapun. DOM direkomendasikan oleh W3C.

Contoh XML:

<?XML version="1.0"encoding="UTF-8"?> <logbarang> <barang> <kode>M1112</kode> <satuan>pc</satuan> <harga>5000</harga> <asal> <pt>ladyrock</pt> <kodewil>10</kodewil> </asal> <tujuan> <pt>union</pt> <kodewil>1001</kodewil> </tujuan> </barang> <barang> <kode>M1122</kode> <satuan>pc</satuan> <harga>1000</harga> <asal> <pt>pbm</pt> <kodewil>103</kodewil> </asal> <tujuan> <pt>mitra kencana</pt> <kodewil>300</kodewil> </tujuan> </barang> </logbarang>

XML DOM tree nodes untuk XML

Selanjutnya kita akan mengolah dokumen XML dengan beberapa bahasa (contoh php, javascript). Untuk tools IDE Anda dapat menggunakan eclipse dlsb (tidak disarankan notepad).

XML di atas:

kita akan mengolah dokumen XML dengan beberapa bahasa (contoh php, javascript). Untuk tools IDE Anda dapat menggunakan eclipse dlsb (tidak disarankan kita akan mengolah dokumen XML dengan beberapa bahasa (contoh php, javascript). Untuk tools IDE Anda dapat menggunakan eclipse dlsb (tidak disarankan

POLITEKNIK POS INDONESIA PRAKTIK

(Metode SAX)

1. Diketahui Anda memiliki XML:

2. Untuk penggunaan php pastikan server apache berjalan. 3. Buat pada direktori htdocs: folder domsax

4. Anda berada pada workspace domsax folder. 5. Buat file XML beri nama barang.xml

6. Isikan barang.xml dengan data pada langkah no 1. 7. Buat file php, beri nama: sax_baca.php

8. Isikan

1. <?php

2. // membaca xml dengan teknik sequensial

<?XML version="1.0"encoding="UTF-8"?> <logbarang> <barang> <kode>M1112</kode> <satuan>pc</satuan> <harga>5000</harga> <asal> <pt>ladyrock</pt> <kodewil>10</kodewil> </asal> <tujuan> <pt>union</pt> <kodewil>1001</kodewil> </tujuan> </barang> <barang> <kode>M1122</kode> <satuan>pc</satuan> <harga>1000</harga> <asal> <pt>pbm</pt> <kodewil>103</kodewil> </asal> <tujuan> <pt>mitra kencana</pt> <kodewil>300</kodewil> </tujuan> </barang> </logbarang>

3. // Simple API for XML (SAX) parser

4. global $isstart; 5.

6. $isstart = false;

7. function start_element($parser, $name, $attrs) { 8. global $isstart;

9. $isstart = true; 10.

11. echo "Start Element: $name"; 12.

13. foreach ( $attrs as $key => $value ) {

14. echo ", atribut: $key [ <b>$value</b> ]"; 15. }

16. }

17. function end_element($parser, $name) { 18. global $isstart;

19. $isstart = false; 20.

21. echo "End Element: $name"; 22. echo '</br>';

23. }

24. function characters($parser, $chars) { 25. global $isstart; 26. if (trim ( $chars, " \t\n\r\0\x0B" ) != '') { 27. 28. echo "[<b> $chars </b>]"; 29. } else if ($isstart) 30. echo '</br>'; 31. } 32. 33. $barang_parser = xml_parser_create (); 34.

35. xml_set_element_handler ( $barang_parser, "start_element", "end_element" ); 36.

37. xml_set_character_data_handler ( $barang_parser, "characters" ); 38.

39. $file = "barang.xml";

40. if ($file_stream = fopen ( $file, "r" )) { 41.

42. while ( $data = fread ( $file_stream, 4096 ) ) { 43.

44. $this_chunk_parsed = xml_parse ( $barang_parser, $data, feof ( $file_stream ) );

45. if (! $this_chunk_parsed) {

46. $error_code = xml_get_error_code ( $barang_parser ); 47. $error_text = xml_error_string ( $error_code );

48. $error_line = xml_get_current_line_number ( $barang_parser );

49.

50. $output_text = "Parsing problem at line $error_line:

$error_text";

51. die ( $output_text );

52. }

53. } 54. } else {

POLITEKNIK POS INDONESIA

55.

56. die ( "Can't open XML file." ); 57. }

58. xml_parser_free ( $barang_parser ); 59.

60. ?>

9. Catatan kedua file tersebut dalam 1 folder yang sama. 10. Anda dapat melihat hasilnya pada browser.

11. Dengan metode SAX, jika Anda memiliki 1000 record bagaimana Anda mengakses record ke -15 kemudian record ke -900 kemudian kembali lagi ke record ke -2?

PRAKTIK (Metode DOM)

1. Diketahui Anda memiliki XML:

2. Untuk penggunaan php pastikan server apache berjalan. 3. Anda berada pada workspace domsax folder.

4. Buat file XML beri nama barang.xml

5. Isikan barang.xml dengan data pada langkah no 1. 6. Buat file php, beri nama: dom_baca.php

7. Isikan:

1. <?php

2. //membaca file xml, meloadnya menjadi objek dan disimpan di memori

3. //Document Object Model (DOM)

4.

<?XML version="1.0"encoding="UTF-8"?> <logbarang> <barang> <kode>M1112</kode> <satuan>pc</satuan> <harga>5000</harga> <asal> <pt>ladyrock</pt> <kodewil>10</kodewil> </asal> <tujuan> <pt>union</pt> <kodewil>1001</kodewil> </tujuan> </barang> <barang> <kode>M1122</kode> <satuan>pc</satuan> <harga>1000</harga> <asal> <pt>pbm</pt> <kodewil>103</kodewil> </asal> <tujuan> <pt>mitra kencana</pt> <kodewil>300</kodewil> </tujuan> </barang> </logbarang>

POLITEKNIK POS INDONESIA

5. $doc = new DOMDocument (); 6. $doc->load ( 'barang.xml' ); 7.

8. $barangs = $doc->getElementsByTagName ( "barang" ); 9.

10. foreach ( $barangs as $barang ) { 11.

12. $ket = $barang->getAttribute ( 'keterangan' ); 13.

14. $kodes = $barang->getElementsByTagName ( "kode" ); 15. $kode = $kodes->item ( 0 )->nodeValue;

16.

17. $satuans = $barang->getElementsByTagName ( "satuan" ); 18. $satuan = $satuans->item ( 0 )->nodeValue;

19.

20. $hargas = $barang->getElementsByTagName ( "harga" ); 21. $harga = $hargas->item ( 0 )->nodeValue;

22.

23. echo "$kode - $satuan - $harga - $ket" . "</br>"; 24. }

25.

26. ?>

PRAKTIK

(Dengan javascript)

1. Diketahui Anda memiliki XML:

2. Ingat javascript adalah client side sehingga bisa saja tidak membutuhkan server untuk dieksekusi. Dalam praktikum ini Anda akan menjalankan script javascript pada localhost.

3. Anda berada pada workspace domsax folder. 4. Buat file XML beri nama barang.xml

5. Isikan barang.xml dengan data pada langkah no 1. 6. Buat file html, beri nama: javascript_baca1.html 7. Isikan:

<?XML version="1.0"encoding="UTF-8"?> <logbarang> <barang> <kode>M1112</kode> <satuan>pc</satuan> <harga>5000</harga> <asal> <pt>ladyrock</pt> <kodewil>10</kodewil> </asal> <tujuan> <pt>union</pt> <kodewil>1001</kodewil> </tujuan> </barang> <barang> <kode>M1122</kode> <satuan>pc</satuan> <harga>1000</harga> <asal> <pt>pbm</pt> <kodewil>103</kodewil> </asal> <tujuan> <pt>mitra kencana</pt> <kodewil>300</kodewil> </tujuan> </barang> </logbarang>

POLITEKNIK POS INDONESIA

1. <html>

2. <body>

3. 4.

5. <script type="text/javascript">

6. if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

7. xmlhttp = new XMLHttpRequest(); 8. } else {// code for IE6, IE5

9. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

10. }

11.

12. xmlhttp.open("GET", "barang.xml", false); 13. xmlhttp.send();

14. xmlDoc = xmlhttp.responseXML; 15.

16. var xlength = xmlDoc.getElementsByTagName("barang").length; 17.

18. for (i = 0; i < xlength; i++) {

19. document 20. .write(xmlDoc.getElementsByTagName("kode")[i].childNodes[0].nodeValue); 21. document.write("<br>"); 22. document 23. .write(xmlDoc.getElementsByTagName("satuan")[i].childNodes[0].nodeValue) ; 24. document.write("<br>"); 25. document.write(xmlDoc.getElementsByTagName("barang")[i] 26. .getAttributeNode("keterangan").nodeValue); 27. document.write("<br>"); 28. } 29. </script> 30. 31. </body> 32. </html>

PRAKTIK

(Dengan javascript, modifikasi program sebelumnya untuk navigasi) 1. Masih bekerja pada folder domsax dan dokumen barang.xml 2. Buat file html beri nama: javascript_baca2.html

3. Isikan:

1. <html>

2. <head>

3. <title>Navigasi xml</title>

4. <script type="text/javascript">

5. if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

6. xmlhttp = new XMLHttpRequest(); 7. } else {// code for IE6, IE5

8. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 9. }

10.

11. xmlhttp.open("GET", "barang.xml", false); 12. xmlhttp.send();

13. xmlDoc = xmlhttp.responseXML; 14.

15. var xlength = xmlDoc.getElementsByTagName("barang").length; 16. 17. var nom = 0; 18. 19. function prev() { 20. nom = nom - 1; 21. if (nom <= 0) { 22. nom = 0; 23. } 24. tampil(nom); 25. } 26. 27. function next() { 28. nom = nom + 1; 29. if (nom >= xlength) { 30. nom = xlength - 1;

31. alert("Telah mencapai batas akhir");

32. } 33. tampil(nom); 34. } 35. 36. function tampil(prm1) { 37. document.getElementById("kode").innerHTML = xmlDoc 38. .getElementsByTagName("kode")[prm1].childNodes[0].nodeValue; 39. document.getElementById("satuan").innerHTML = xmlDoc 40. .getElementsByTagName("satuan")[prm1].childNodes[0].nodeValue; 41. document.getElementById("keterangan").innerHTML = xmlDoc

POLITEKNIK POS INDONESIA 42. .getElementsByTagName("barang")[prm1] 43. .getAttributeNode("keterangan").nodeValue; 44. } 45. </script> 46. </head> 47. 48. 49. 50. 51.

52. <body onload="tampil(0);">

53. <table width="284" border="1" bordercolor="#000000">

54. <tr>

55. <th width="68" bgcolor="#0066FF" scope="row">kode</th>

56. <td width="200" id="kode">...</td>

57. </tr>

58. <tr>

59. <th bgcolor="#0066FF" scope="row">satuan</th>

60. <td id="satuan">...</td>

61. </tr>

62. <tr>

63. <th bgcolor="#0066FF" scope="row">keterangan</th>

64. <td id="keterangan">...</td>

65. </tr>

66. </table>

67. <form>

68. <table width="282" border="0">

69. <tr>

70. <td width="145" align="left"><input type="button"

name="prev1"

71. onclick="prev();" value="<-"></td>

72. <td width="127" align="right"><input type="button"

name="next1"

73. onclick="next();" value="->"></td>

74. </tr>

75. </table>

76. </form>

77. </body> 78. </html>

PRAKTIK

(menulis dengan metode DOM pada php)

1. Masih bekerja pada folder domsax dan dokumen barang.xml 2. Buat file php beri nama: dom_tulis.php

3. Isikan:

1. <?php

2. // write dengan teknik DOM

3. $logbarang = array (); 4. $logbarang [] = array ( 5. 'satuan' => 'pc', 6. 'kode' => 'M1112', 7. 'harga' => "5000", 8. 'keterangan' => 'reject' 9. ); 10. $logbarang [] = array ( 11. 'satuan' => 'pc', 12. 'kode' => 'M1122', 13. 'harga' => "1000", 14. 'keterangan' => 'good' 15. ); 16.

17. $doc = new DOMDocument (); 18. $doc->formatOutput = true; 19.

20. $r = $doc->createElement ( "logbarang" ); 21. $doc->appendChild ( $r );

22.

23. foreach ( $logbarang as $barang ) {

24. $b = $doc->createElement ( "barang" ); 25.

26. //atribut

27. $ket=$doc->createAttribute("keterangan");

28. $ket->appendChild( $doc->createTextNode( $barang ['keterangan'] )); 29. $b->appendChild($ket);

30.

31. $kode = $doc->createElement ( "kode" );

32. $kode->appendChild ( $doc->createTextNode ( $barang ['kode'] ) ); 33. $b->appendChild ( $kode );

34.

35. $satuan = $doc->createElement ( "satuan" );

36. $satuan->appendChild ( $doc->createTextNode ( $barang ['satuan'] ) ); 37. $b->appendChild ( $satuan );

38.

39. $harga = $doc->createElement ( "harga" );

40. $harga->appendChild ( $doc->createTextNode ( $barang ['harga'] ) ); 41. $b->appendChild ( $harga );

42.

43. $r->appendChild ( $b ); 44. }

POLITEKNIK POS INDONESIA

45.

46. echo $doc->saveXML ();

47. ?>

PRAKTIK

(menulis dokumen XML pada php)

1. Masih bekerja pada folder domsax dan dokumen barang.xml 2. Buat file php beri nama: php_tulis.php

3. Isikan:

1. <?php

2. // menulis dengan script php

3. // perlu diperhatikan validasi dan well formed!

4. $logbarang = array (); 5. $logbarang [] = array ( 6. 'satuan' => 'pc', 7. 'kode' => 'M1112', 8. 'harga' => "5000", 9. 'keterangan' => 'reject' 10. ); 11. $logbarang [] = array ( 12. 'satuan' => 'pc', 13. 'kode' => 'M1122', 14. 'harga' => "1000", 15. 'keterangan' => 'good' 16. ); 17. ?> 18. <!--Perhatikan templatenya --> 19. <logbarang> 20. <?php 21.

22. foreach ( $logbarang as $barang ) {

23. ?>

24. <barang>

25. <kode><?php echo( $barang['kode'] ); ?></kode>

26. <satuan><?php echo( $barang['satuan'] ); ?>

27. </satuan> <harga><?php echo( $barang['harga'] ); ?>

28. </harga> </barang>

29. <?php

30. }

31. ?>

32. </logbarang>

POLITEKNIK POS INDONESIA TUGAS:

Dari dokumen XML yang pernah Anda buat di materi sebelumnya lakukan proses pembacaan dengan teknik yang telah dijelaskan pada materi ini.

Buatlah file xml dan xsd berdasarkan kebutuhan perusahaan yang bergerak di bidang: Industri manufacturing

Industri jasa Industri perhotelan Pendidikan

Isi data pada masing-masing file xml minimal 5, libatkan juga penggunaan atribut, patern (contoh: pola untuk email [email protected]) minimal elemen 10.

BAB VI TIK:

Mahasiswa dapat Memahami dasar-dasar SOAP dan REST Pokok Bahasan:

• SOAP, REST Sub Pokok Bahasan:

• Pendahuluan • SOAP, WSDL • REST

POLITEKNIK POS INDONESIA

1 Pendahuluan

Seperti telah diketahui pertukaran data antar mesin dapat dilakukan dengan berbagai cara, pada awalnya RPC, RMI kemudian SOAP dan RESTful. Pada materi hanya akan dibahas mengenai SOAP dan RESTful.

2 SOAP

Simple Object Access Protocol (SOAP) adalah spesifikasi protokol standar untuk pertukaran pesan berbasis XML. Komunikasi antara layanan web dan klien terjadi menggunakan pesan XML.

SOAP dirancang sebagai protokol objek rekomendasi W3C pada tahun 2003.

Dokumen terkait