CodeGym /Blog Java /rawak /XML dalam Java
John Squirrels
Tahap
San Francisco

XML dalam Java

Diterbitkan dalam kumpulan
Hai! Hari ini kami akan memperkenalkan satu lagi format data yang dipanggil XML. Ini adalah topik yang sangat penting. Apabila bekerja pada aplikasi Java sebenar, anda hampir pasti akan menghadapi tugas berkaitan XML. Dalam pembangunan Java, format ini digunakan hampir secara universal (kita akan mengetahui sebabnya di bawah), jadi saya mengesyorkan agar anda tidak menyemak pelajaran ini secara cetek, sebaliknya memperoleh pemahaman yang menyeluruh tentang segala-galanya dan juga mengkaji literatur/pautan tambahan :) Ini pasti tidak akan membuang masa. Jadi, mari kita mulakan dengan perkara mudah: "apa" dan "mengapa"!

Apakah Java XML?

XML adalah singkatan dari eXtensible Markup Language. Anda mungkin sudah biasa dengan bahasa penanda — pernahkah anda mendengar tentang HTML, yang digunakan untuk membuat halaman web :) Apakah XML?  - 1HTML dan XML juga mempunyai rupa 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 ialah bahasa untuk menerangkan data.

Mengapa anda memerlukan XML?

XML pada asalnya dicipta untuk menyimpan dan menghantar data dengan lebih mudah, termasuk melalui Internet. Ia mempunyai beberapa kelebihan yang membantu anda mencapai ini. Pertama, ia mudah dibaca oleh manusia dan komputer. Saya rasa anda boleh memahami dengan mudah apa yang diterangkan oleh fail 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 mudah memahami format ini. Kedua, memandangkan data disimpan sebagai teks biasa, tidak akan ada masalah keserasian apabila kami memindahkannya dari satu komputer ke komputer yang lain. Adalah penting untuk memahami bahawa XML bukan kod boleh laku — ia adalah bahasa penerangan data. Selepas anda menerangkan data menggunakan XML, anda perlu menulis kod (contohnya, dalam Java) yang boleh menghantar/menerima/memproses data ini.

Bagaimanakah XML berstruktur?

Komponen utama ialah tag: ini adalah perkara dalam kurungan sudut:

<book>
</book>
Terdapat tag pembuka dan tag penutup. Teg penutup mempunyai simbol tambahan (" / "), seperti yang boleh dilihat dalam contoh di atas. Setiap teg pembukaan mesti mempunyai teg penutup. Mereka menunjukkan di mana penerangan setiap elemen dalam fail bermula dan berakhir. Tag boleh bersarang! Dalam contoh buku kami, teg <book> mempunyai 3 teg bersarang: <title>, <author> dan <year>. Ini tidak terhad kepada satu tahap sarang: teg bersarang boleh mempunyai teg bersarang sendiri, dsb. Struktur ini dipanggil pokok teg. Mari lihat pokok ini menggunakan fail XML sampel yang menerangkan pengedar kereta:

<?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 mempunyai teg peringkat teratas: <carstore>. Ia juga dipanggil unsur akar. <carstore> mempunyai satu tag anak: <car>. <kereta>, seterusnya, juga mempunyai 3 tanda nama anak: <model>, <tahun> dan <harga>. Setiap teg boleh mempunyai atribut, yang mengandungi maklumat penting tambahan. Dalam contoh kami, teg <model> mempunyai atribut "lang", yang menunjukkan bahasa yang digunakan untuk merekodkan nama model:

<model lang="en">Scania R 770</model>
Di sini kami menunjukkan bahawa nama itu ditulis dalam bahasa Inggeris. Teg <price> kami mempunyai atribut "mata wang".

<price currency="US dollar">150000.00</price>
Di sini kami menunjukkan bahawa harga kereta diberikan dalam dolar AS. Oleh itu, XML mempunyai sintaks "memerihalkan diri". Anda boleh menambah sebarang maklumat yang anda perlukan untuk menerangkan data. Selain itu, di bahagian atas fail, anda boleh menambah baris yang menunjukkan versi XML dan pengekodan yang digunakan untuk menulis data. Ini dipanggil "prolog" dan ia kelihatan seperti ini:

<?xml version="1.0" encoding="UTF-8"?>
Kami menggunakan pengekodan XML versi 1.0 dan UTF-8. Ini tidak perlu, tetapi ia boleh berguna jika, sebagai contoh, fail anda menggunakan teks dalam bahasa yang berbeza. Kami menyebut bahawa XML bermaksud "Bahasa Penanda Boleh Diperluas", tetapi apakah maksud "boleh dilanjutkan"? Ini bermakna ia sesuai untuk mencipta versi baharu objek dan fail anda. Sebagai contoh, katakan kita ingin juga mula menjual motosikal di pengedar kereta kita! Walaupun begitu, kami memerlukan program kami perlu menyokong kedua-dua versi <carstore>: yang lama (tanpa motosikal) dan yang baharu. Inilah 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 dikembangkan:

<?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>
Begitulah mudah dan mudahnya untuk menambah penerangan motosikal pada fail kami :) Lebih-lebih lagi, kami sama sekali tidak perlu mempunyai tag anak yang sama untuk motosikal seperti untuk kereta. Sila ambil perhatian bahawa motosikal, tidak seperti kereta, mempunyai elemen <owner>. Ini tidak menghalang komputer (atau manusia) daripada membaca data.

Perbezaan antara XML dan HTML

Kami telah mengatakan bahawa XML dan HTML adalah sangat serupa dalam penampilan. Itu menjadikannya sangat penting untuk mengetahui perbezaannya. Pertama, ia digunakan untuk tujuan yang berbeza. HTML adalah untuk menanda halaman web. Sebagai contoh, semasa membuat tapak web, anda boleh menggunakan HTML untuk menentukan: "Menu hendaklah berada di sudut kanan atas. Ia sepatutnya mempunyai butang begini dan begitu". Dengan kata lain, tugas HTML adalah untuk memaparkan data. XML adalah untuk menyimpan dan menghantar maklumat dalam bentuk yang mudah untuk manusia dan komputer. Format ini tidak mengandungi sebarang petunjuk tentang cara data ini perlu dipaparkan: itu bergantung pada kod program yang membacanya. Kedua, terdapat perbezaan teknikal yang besar. Teg HTML dipratakrifkan. Dalam erti kata lain, mencipta pengepala HTML (contohnya, kapsyen besar di bahagian atas halaman) hanya menggunakan <h1></h1> teg (<h2></h2> dan <h3></h3> digunakan untuk pengepala yang lebih kecil). Anda tidak boleh membuat pengepala HTML menggunakan teg lain. XML tidak menggunakan teg yang dipratentukan. Anda boleh memberi tag sebarang nama yang anda mahu: <header>, <title>, <idontknow2121>.

Penyelesaian konflik

Kebebasan yang disediakan XML boleh membawa kepada beberapa masalah. Sebagai contoh, satu dan entiti yang sama (contohnya, kereta) boleh digunakan oleh program untuk tujuan yang berbeza. Sebagai contoh, kami mempunyai fail XML yang menerangkan kereta. Walau bagaimanapun, pengaturcara kami tidak mencapai persetujuan terlebih dahulu di antara mereka. Dan kini, sebagai tambahan kepada data tentang kereta sebenar, kami mungkin menemui data tentang kereta mainan dalam XML kami! Lebih-lebih lagi, mereka mempunyai sifat yang sama. Katakan program kami membaca dalam fail XML sedemikian. Bagaimanakah kita membezakan kereta sebenar daripada kereta mainan?

<?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>
Di sini awalan dan ruang nama akan membantu kami. Untuk membezakan kereta mainan daripada kereta sebenar dalam program kami (dan sememangnya mana-mana mainan daripada rakan sebenar mereka), kami memperkenalkan dua awalan: "sebenar" 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>
Kini program kami akan dapat membezakan antara entiti yang berbeza! Semua yang mempunyai awalan mainan akan dianggap sebagai mainan :) Walau bagaimanapun, kami belum selesai lagi. Untuk menggunakan awalan, kita perlu mendaftarkan setiap satu daripadanya sebagai ruang nama. Sebenarnya, "daftar" adalah perkataan yang kuat :) Kami hanya perlu menghasilkan nama yang unik untuk setiap daripada mereka. Ia seperti kelas: kelas mempunyai nama pendek ( Cat ) dan nama layak sepenuhnya yang merangkumi semua pakej ( zoo.animals.Cat). URI biasanya digunakan untuk mencipta nama ruang nama yang unik. Kadangkala ini dilakukan menggunakan alamat Internet, di mana fungsi ruang nama ini diterangkan. Tetapi ia tidak semestinya alamat Internet yang sah. Selalunya, projek hanya menggunakan rentetan seperti URI yang membantu menjejaki hierarki ruang nama. Berikut adalah contoh:

<?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>
Sudah tentu, tiada tapak web di "http://testproject.developersgroup1.companyname/department2/namespaces/real" Tetapi rentetan ini mengandungi maklumat berguna: pembangun Kumpulan 1 dalam Jabatan 2 bertanggungjawab untuk mencipta ruang nama "sebenar" . Jika kami perlu memperkenalkan nama baharu atau membincangkan kemungkinan konflik, kami akan tahu ke mana hendak beralih. Kadangkala pembangun menggunakan alamat web deskriptif sebenar sebagai nama ruang nama yang unik. Sebagai contoh, ini mungkin berlaku untuk sebuah syarikat besar yang projeknya akan digunakan oleh berjuta-juta orang di seluruh dunia. Tetapi ini sememangnya tidak selalu dilakukan: Stack Overflow mempunyai perbincangan mengenai isu ini. Secara umum, tidak ada keperluan ketat untuk menggunakan URI sebagai nama ruang nama: anda juga boleh menggunakan rentetan rawak. Pilihan ini juga akan berfungsi:

xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Yang berkata, menggunakan URI mempunyai beberapa kelebihan. Anda boleh membaca lebih lanjut mengenai perkara ini di sini .

Piawaian XML asas

Piawaian XML ialah satu set sambungan yang menambah fungsi tambahan pada fail XML. XML mempunyai banyak piawaian, tetapi kami hanya akan melihat piawaian yang paling penting dan mengetahui bahawa ia membolehkan AJAX, yang merupakan salah satu piawaian XML yang paling terkenal. Ia membolehkan anda menukar kandungan halaman web tanpa memuatkannya semula! XSLT membolehkan anda menukar teks XML kepada format lain. Sebagai contoh, anda boleh menggunakan XSLT untuk menukar XML kepada HTML! Seperti yang telah kami katakan, tujuan XML adalah untuk menerangkan data, bukan untuk memaparkannya. Tetapi dengan XSLT kita boleh mengatasi had ini! XML DOM membolehkan anda mendapatkan semula, mengubah suai, menambah atau memadam elemen individu daripada fail XML. Berikut ialah contoh kecil cara ini berfungsi. Kami mempunyai fail 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>
Ia mempunyai dua buah buku. Buku mempunyai elemen <title>. Di sini kita boleh menggunakan JavaScript untuk mendapatkan semua tajuk buku daripada fail XML kami dan mencetak yang 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>
DTD ("definisi jenis dokumen") membolehkan anda menentukan senarai elemen yang dibenarkan untuk entiti dalam fail XML. Sebagai contoh, katakan kami sedang mengusahakan tapak web kedai buku dan semua pasukan pembangunan bersetuju bahawa hanya atribut tajuk, pengarang dan tahun harus ditentukan untuk elemen buku dalam fail XML. Tetapi bagaimana kita melindungi diri kita daripada kecuaian? 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 kami telah menentukan senarai atribut yang sah untuk <book>. Cuba tambah elemen baharu di sana dan anda akan mendapat ralat dengan serta-merta!

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Ralat! "Elemen mainhero tidak dibenarkan di sini" Terdapat banyak piawaian XML yang lain. Anda boleh membiasakan diri dengan setiap daripada mereka dan cuba menggali lebih dalam ke dalam kod tersebut. Bagaimanapun, jika anda memerlukan maklumat tentang XML, anda boleh menemui hampir semua perkara di sana :) Dan dengan ini, pelajaran kami akan berakhir. Sudah tiba masanya untuk kembali kepada tugas! :) Sehingga lain kali!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION