Halo! Hari ini kita akan berkenalan dengan format data lain yang disebut XML. Ini adalah topik yang sangat penting. Saat mengerjakan aplikasi Java sebenarnya, Anda hampir pasti akan menemui masalah terkait XML. Format ini digunakan hampir di mana-mana dalam pengembangan Java (kami akan mencari tahu alasannya tepat di bawah), jadi saya sarankan Anda membaca ceramah tidak "secara diagonal", tetapi memahami semuanya secara menyeluruh dan pada saat yang sama mempelajari literatur/tautan tambahan :) Ini waktu pasti tidak akan terbuang percuma. Jadi, mari kita mulai dengan yang sederhana - “apa” dan “mengapa”!
Apa itu XML?
XML adalah singkatan dari eXtensible Markup Language. Anda mungkin sudah familiar dengan salah satu bahasa markup: Anda pernah mendengar tentang HTML, yang digunakan untuk membuat halaman web :)
![Apa itu XML - 1]()
HTML dan XML bahkan memiliki tampilan yang serupa:
HTML 1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
|
XML 1
<headline>title</headline>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
|
HTML 2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
|
XML 2
<chief>title</chief>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
|
Dengan kata lain, XML adalah bahasa untuk mendeskripsikan data.
Mengapa XML diperlukan?
XML awalnya diciptakan untuk penyimpanan dan transmisi data yang lebih nyaman, termasuk melalui Internet. Ia memiliki sejumlah keunggulan yang memungkinkannya berhasil mengatasi tugas ini. Pertama, mudah dibaca oleh manusia dan komputer. Saya pikir Anda dapat dengan mudah memahami apa yang dijelaskan oleh file xml ini:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>Harry Potter and the Philosopher’s Stone</title>
<author>J. K. Rowling</author>
<year>1997</year>
</book>
Komputer juga dengan mudah memahami format ini. Kedua, karena data disimpan dalam format teks sederhana, tidak akan ada masalah kompatibilitas saat mentransfernya dari satu komputer ke komputer lain. Penting untuk dipahami bahwa
XML bukanlah kode yang dapat dieksekusi, melainkan bahasa deskripsi data . Setelah Anda mendeskripsikan data menggunakan XML, Anda perlu menulis kode (misalnya di Java) yang dapat mengirim/menerima/memproses data ini.
Bagaimana cara kerja XML?
Komponen utamanya adalah tag: ini adalah hal-hal yang ada dalam tanda kurung sudut:
<book>
</book>
Ada tag pembuka dan penutup. Penutup memiliki simbol tambahan - “
/
”, hal ini dapat dilihat pada contoh di atas. Setiap tag pembuka harus memiliki tag penutup yang sesuai. Mereka menunjukkan di mana deskripsi setiap elemen dalam file dimulai dan diakhiri. Tag dapat disarangkan! Dalam contoh buku kita, tag
<book> memiliki 3 subtag -
<title> ,
<author> dan
<year> . Ini tidak terbatas pada satu tingkat: subtag dapat memiliki subtagnya sendiri, dll. Desain ini disebut pohon tag. Mari kita lihat pohonnya menggunakan contoh file XML dengan deskripsi dealer mobil:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
<car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</car>
<car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">20000.00</price>
</car>
<car category="sport">
<title lang="en">Ferrari 360 Spider</title>
<year>2018</year>
<price currency="US dollar">150000.00</price>
</car>
</carstore>
Di sini kita memiliki tag tingkat atas -
<carstore> . Ini juga disebut "root" - tag root. <carstore> memiliki satu tag anak, <car>. <car>, pada gilirannya, juga memiliki 3 tag turunannya sendiri - <model>, <year> dan <price>. Setiap tag dapat memiliki atribut – informasi penting tambahan. Dalam contoh kita, tag <model> memiliki atribut “lang” - bahasa yang digunakan untuk menulis nama model:
<model lang="en">Scania R 770</model>
Dengan cara ini kita dapat menunjukkan bahwa judul tersebut ditulis dalam bahasa Inggris. Tag <price> kami memiliki atribut “currency”.
<price currency="US dollar">150000.00</price>
Dengan cara ini kami dapat menunjukkan bahwa harga mobil tersebut dalam dolar AS. Dengan demikian,
XML memiliki sintaksis yang "mendeskripsikan dirinya sendiri" . Anda dapat menambahkan informasi apa pun yang Anda perlukan untuk mendeskripsikan data. Anda juga dapat menambahkan baris di awal file yang menunjukkan versi XML dan pengkodean data yang ditulis. Ini disebut "
prolog " dan terlihat seperti ini:
<?xml version="1.0" encoding="UTF-8"?>
Kami menggunakan pengkodean XML versi 1.0 dan UTF-8. Ini tidak perlu, tetapi ini bisa berguna jika, misalnya, Anda menggunakan teks dalam bahasa berbeda di file Anda. Kami telah menyebutkan bahwa XML adalah singkatan dari “extensible markup Language,” tapi apa yang dimaksud dengan “extensible”? Artinya, ini sangat cocok untuk membuat versi baru dari objek dan file Anda. Misalnya kita ingin showroom mobil kita mulai menjual sepeda motor juga! Pada saat yang sama, dalam program ini kita perlu mendukung kedua versi <carstore> - baik yang lama (tanpa sepeda motor) maupun yang baru. Ini versi lama kami:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
<car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</car>
<car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">20000.00</price>
</car>
<car category="sport">
<title lang="en">Ferrari 360 Spider</title>
<year>2018</year>
<price currency="US dollar">150000.00</price>
</car>
</carstore>
Dan inilah yang baru dan diperluas:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
<car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</car>
<car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">20000.00</price>
</car>
<car category="sport">
<title lang="en">Ferrari 360 Spider</title>
<year>2018</year>
<price currency="US dollar">150000.00</price>
</car>
<motorcycle>
<title lang="en">Yamaha YZF-R6</title>
<year>2018</year>
<price currency="Russian Ruble">1000000.00</price>
<owner>Vasia</owner>
</motorcycle>
<motorcycle>
<title lang="en">Harley Davidson Sportster 1200</title>
<year>2011</year>
<price currency="Euro">15000.00</price>
<owner>Petia</owner>
</motorcycle>
</carstore>
Jadi dengan mudah dan sederhana kami menambahkan deskripsi sepeda motor ke file kami :) Pada saat yang sama, kami sama sekali tidak perlu menyetel tag anak yang sama untuk sepeda motor seperti untuk mobil. Harap diperhatikan bahwa sepeda motor, tidak seperti mobil, memiliki elemen <pemilik> - pemiliknya. Hal ini tidak akan menghalangi komputer (atau seseorang) untuk membaca data.
Perbedaan antara XML dan HTML
Kami telah mengatakan bahwa XML dan HTML sangat mirip tampilannya. Oleh karena itu, sangat penting untuk mengetahui perbedaannya. Pertama, mereka digunakan untuk tujuan yang berbeda.
HTML - untuk menandai halaman web. Misalnya, jika Anda perlu membuat situs web, menggunakan HTML Anda dapat menentukan: “Menunya harus ada di pojok kanan atas. Seharusnya ada tombol ini dan itu.” Dengan kata lain, tujuan HTML adalah untuk menampilkan data.
XML - untuk menyimpan dan mengirimkan informasi dalam bentuk yang nyaman bagi manusia dan komputer. Format ini tidak berisi instruksi apa pun tentang bagaimana data ini harus ditampilkan: format ini bergantung pada kode program itu sendiri. Kedua, mereka memiliki perbedaan teknis utama. Tag HTML sudah ditentukan sebelumnya. Dengan kata lain, untuk membuat judul (misalnya, tulisan besar di awal halaman), hanya tag <h1></h1> yang digunakan dalam HTML (untuk judul yang lebih kecil - <h2></h2>, < h3></h3>). Anda tidak akan bisa membuat heading dalam HTML menggunakan tag dengan judul berbeda. XML tidak menggunakan tag yang telah ditentukan sebelumnya. Anda dapat memberi tag nama apa pun yang Anda inginkan - <header>, <title>, <idontknow2121>.
Resolusi konflik
Kebebasan yang diberikan XML juga dapat menimbulkan beberapa masalah. Misalnya, entitas yang sama (misalnya mobil) dapat digunakan oleh suatu program untuk tujuan yang berbeda. Misalnya, kami memiliki file XML yang menjelaskan mesin. Namun, programmer kami tidak sepakat sebelumnya. Dan sekarang, selain data dari mobil asli, xml kami juga menyertakan data dari model mainan! Apalagi mereka memiliki atribut yang sama. Program kami menerima file XML berikut. Bagaimana cara membedakan mobil asli dari model mainannya?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
<car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</car>
<car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">100.00</price>
</car>
</carstore>
Awalan dan namespace akan membantu kita di sini. Untuk memisahkan mobil mainan dari yang asli dalam program kami (dan, secara umum, mainan apa pun dari prototipe aslinya), kami memperkenalkan dua awalan - "nyata" dan "mainan".
<real:car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">100.00</price>
</toy:car>
Sekarang program kita akan dapat membedakan entitas! Apapun yang memiliki awalan mainan akan diklasifikasikan sebagai mainan :) Namun, kita belum selesai. Untuk menggunakan prefiks, kita perlu mendaftarkan masing-masing prefiks sebagai namespace. Sebenarnya, “daftar” adalah kata yang kuat :) Anda hanya perlu memberikan nama unik untuk masing-masingnya. Ini seperti kelas: kelas memiliki nama pendek (
Cat
) dan nama lengkap dengan semua paketnya (
zoo.animals.Cat
)
Untuk membuat ruang nama unik, biasanya digunakan URI . Terkadang alamat Internet diganti di sini, yang menjelaskan secara rinci fungsi dan tujuan namespace ini. Namun ini tidak harus berupa alamat Internet yang valid. Seringkali, proyek hanya menggunakan string mirip URI yang membantu melacak hierarki namespace. Berikut ini contohnya:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
<model lang="en">Scania R 770</model>
<year>2005</year>
<price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
<title lang="en">Ford Focus</title>
<year>2012</year>
<price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Tentu saja, tidak ada situs di Internet dengan alamat
http://testproject.developersgroup1.companyname/department2/namespaces/real Tetapi ada informasi berguna: grup pengembang "developersgroup1" dari departemen "department2" bertanggung jawab untuk membuat ruang nama "asli". Jika Anda perlu menambahkan nama baru, atau mendiskusikan kemungkinan konflik dengan nama tersebut, kami tahu ke mana harus berpaling. Terkadang alamat Internet asli dengan deskripsi namespace ini digunakan sebagai nama unik untuk namespace tersebut. Misalnya, jika itu adalah perusahaan besar dan proyeknya akan digunakan oleh jutaan orang di seluruh dunia. Namun hal ini tidak selalu dilakukan: ada diskusi tentang masalah ini di
Stackoverflow . Pada prinsipnya, persyaratan untuk menggunakan URI sebagai nama namespace tidaklah ketat: Anda cukup menggunakan string acak. Opsi ini juga bisa digunakan:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Namun ada sejumlah keuntungan menggunakan URI. Anda dapat membaca lebih lanjut tentang ini
di sini .
Standar XML Inti
Standar XML adalah sekumpulan ekstensi yang menambahkan fungsionalitas tambahan ke file xml. XML memiliki banyak standar, tetapi kita hanya akan melihat standar yang paling penting dan mencari tahu apa yang diizinkan oleh
AJAX , salah satu standar XML paling terkenal, untuk dilakukan. Ini memungkinkan Anda mengubah konten halaman web tanpa memuat ulang! Terdengar keren? :) Anda dapat mencoba teknologi ini secara langsung
di sini .
XSLT - memungkinkan Anda mengonversi teks XML ke format lain. Misalnya, dengan menggunakan XSLT, Anda dapat mengubah XML menjadi HTML! Tujuan XML, seperti yang telah kami katakan, adalah untuk mendeskripsikan data, bukan untuk menampilkannya. Namun dengan menggunakan XSLT kita dapat melewati batasan ini!
Berikut adalah kotak pasir dengan contoh yang berfungsi, di mana Anda dapat melihat sendiri cara kerjanya :)
XML DOM - memungkinkan Anda mendapatkan, mengubah, menambah atau menghapus elemen individual dari file XML. Berikut ini contoh kecil cara kerjanya. Kami memiliki file books.xml:
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
Ada dua buku di dalamnya. Buku memiliki elemen seperti judul - <judul>. Dan di sini kita bisa menggunakan JavaScript untuk mendapatkan semua judul buku dari file XML kita dan menampilkan judul pertama ke konsol:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "books.xml", true);
xhttp.send();
function myFunction(xml) {
var xmlDoc = xml.responseXML;
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>
</body>
</html>
Sekali lagi, saya sarankan melihat cara kerja contoh ini menggunakan
kotak pasir :)
DTD (“definisi tipe dokumen”) - memungkinkan Anda menentukan daftar elemen yang diizinkan untuk beberapa entitas dalam file XML. Misalnya, kami sedang mengerjakan situs web toko buku, dan semua tim pengembangan telah sepakat bahwa untuk elemen buku, hanya atribut judul, penulis, dan tahun yang harus ditentukan dalam file XML. Tapi bagaimana kita bisa melindungi diri kita dari kurangnya perhatian? Sangat mudah!
<?xml version="1.0"?>
<!DOCTYPE book [
<!ELEMENT book (title,author,year)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
]>
<book>
<title>The Lord of The Rings</title>
<author>John R.R. Tolkien</author>
<year>1954</year>
</book>
Di sini kita telah mendefinisikan daftar atribut yang valid untuk <book>. Coba tambahkan elemen baru di sana dan Anda akan langsung mendapatkan error!
<book>
<title>The Lord of The Rings</title>
<author>John R.R. Tolkien</author>
<year>1954</year>
<mainhero>Frodo Baggins</mainhero>
</book>
Kesalahan! “Elemen mainhero tidak diperbolehkan di sini” Ada banyak standar XML lainnya. Anda dapat mengenal masing-masingnya dan mencoba menggali lebih dalam kode di
situs web WC3 (bagian “Standar XML Penting”). Dan secara umum, jika Anda memerlukan informasi tentang XML, Anda dapat menemukan hampir semuanya di sana :) Baiklah, kuliah kita telah berakhir. Saatnya kembali ke tugas! :) Sampai jumpa!
GO TO FULL VERSION