JavaRush /Blog Java /Random-MS /XML dalam Java: Apakah itu?

XML dalam Java: Apakah itu?

Diterbitkan dalam kumpulan
hello! Hari ini kita akan berkenalan dengan format data lain yang dipanggil XML. Ini adalah topik yang sangat penting. Apabila bekerja pada aplikasi Java sebenar, anda hampir pasti akan menghadapi masalah berkaitan XML. Format ini digunakan hampir di mana-mana dalam pembangunan Java (kami akan mengetahui mengapa betul-betul di bawah), jadi saya mengesyorkan agar anda membaca kuliah bukan "menjuru", tetapi memahami segala-galanya dengan teliti dan pada masa yang sama mengkaji literatur/pautan tambahan :) Ini masa pasti tidak akan disia-siakan. Jadi, mari kita mulakan dengan yang mudah - "apa" dan "mengapa"!

Apakah XML?

XML adalah singkatan dari eXtensible Markup Language. Anda mungkin sudah biasa dengan salah satu bahasa penanda: anda pernah mendengar tentang HTML, yang digunakan untuk membuat halaman web :) Apakah XML - 1HTML dan XML adalah serupa dari segi rupa:
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 XML diperlukan?

XML pada asalnya dicipta untuk penyimpanan dan penghantaran data yang lebih mudah, termasuk melalui Internet. Ia mempunyai beberapa kelebihan yang membolehkannya berjaya mengatasi tugas 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 dalam format teks ringkas, tidak akan ada masalah keserasian apabila memindahkannya dari satu komputer ke komputer lain. Adalah penting untuk memahami bahawa XML bukan kod boleh laku, tetapi 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 berfungsi?

Komponen utamanya ialah tag: ini adalah perkara dalam kurungan sudut:
<book>
</book>
Terdapat tag pembuka dan penutup. Yang penutup mempunyai simbol tambahan - " /", ini boleh dilihat dalam contoh di atas. Setiap teg pembukaan mesti mempunyai teg penutup yang sepadan. Mereka menunjukkan di mana penerangan setiap elemen dalam fail bermula dan berakhir. Tag boleh bersarang! Dalam contoh buku kami, teg <book> mempunyai 3 subteg - <title> , <author> dan <year> . Ini tidak terhad kepada satu tahap: subteg boleh mempunyai subteg mereka sendiri, dsb. Reka bentuk ini dipanggil pokok teg. Mari lihat pokok menggunakan contoh fail XML dengan penerangan tentang 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 "root" - tag akar. <carstore> mempunyai satu tag anak, <car>. <kereta>, seterusnya, juga mempunyai 3 tag anak sendiri - <model>, <tahun> dan <harga>. Setiap teg boleh mempunyai atribut - maklumat penting tambahan. Dalam contoh kami, teg <model> mempunyai atribut "lang" - bahasa di mana nama model ditulis:
<model lang="en">Scania R 770</model>
Dengan cara ini kita boleh menunjukkan bahawa tajuk itu ditulis dalam bahasa Inggeris. Teg <price> kami mempunyai atribut "mata wang".
<price currency="US dollar">150000.00</price>
Dengan cara ini kita boleh menunjukkan bahawa harga untuk kereta itu adalah dalam dolar AS. Oleh itu, XML mempunyai sintaks "memerihalkan diri" . Anda boleh menambah sebarang maklumat yang anda perlukan untuk menerangkan data. Anda juga boleh menambah baris pada permulaan fail yang menunjukkan versi XML dan pengekodan di mana data ditulis. Ia dipanggil " prolog " dan 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, anda menggunakan teks dalam bahasa yang berbeza dalam fail anda. Kami menyebut bahawa XML bermaksud "bahasa penanda boleh diperluaskan", tetapi apakah maksud "boleh diperluaskan"? Ini bermakna ia sangat sesuai untuk mencipta versi baharu objek dan fail anda. Sebagai contoh, kami mahu bilik pameran kereta kami mula menjual motosikal juga! Pada masa yang sama, dalam program ini kita perlu menyokong kedua-dua versi <carstore> - kedua-dua versi 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 baharu dan diperluaskan:
<?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>
Dengan begitu mudah dan ringkas kami menambah penerangan motosikal pada fail kami :) Pada masa yang sama, kami sama sekali tidak perlu menetapkan tag anak yang sama untuk motosikal seperti untuk kereta. Sila ambil perhatian bahawa motosikal, tidak seperti kereta, mempunyai elemen <owner> - pemilik. Ini tidak akan menghalang komputer (atau seseorang sama ada) daripada membaca data.

Perbezaan antara XML dan HTML

Kami telah mengatakan bahawa XML dan HTML adalah sangat serupa dalam penampilan. Oleh itu, adalah sangat penting untuk mengetahui bagaimana mereka berbeza. Pertama, ia digunakan untuk tujuan yang berbeza. HTML - untuk menanda halaman web. Sebagai contoh, jika anda perlu membuat tapak web, menggunakan HTML anda boleh menentukan: “Menu hendaklah berada di penjuru kanan sebelah atas. Ia sepatutnya mempunyai butang ini dan itu. Dengan kata lain, tujuan HTML adalah untuk memaparkan data. XML - untuk menyimpan dan menghantar maklumat dalam bentuk yang mudah untuk manusia dan komputer. Format ini tidak mengandungi sebarang arahan tentang cara data ini perlu dipaparkan: ia bergantung pada kod program itu sendiri. Kedua, mereka mempunyai perbezaan teknikal utama. Teg HTML dipratakrifkan. Dalam erti kata lain, untuk membuat tajuk (contohnya, inskripsi besar pada permulaan halaman), hanya teg <h1></h1> digunakan dalam HTML (untuk tajuk yang lebih kecil - <h2></h2>, < h3></h3>). Anda tidak akan dapat membuat tajuk dalam HTML menggunakan teg dengan tajuk yang berbeza. XML tidak menggunakan teg yang dipratentukan. Anda boleh memberikan teg sebarang nama yang anda mahu - <header>, <title>, <idontknow2121>.

Penyelesaian konflik

Kebebasan yang disediakan oleh XML juga boleh membawa kepada beberapa masalah. Contohnya, entiti yang sama (contohnya, kereta) boleh digunakan oleh program untuk tujuan yang berbeza. Sebagai contoh, kami mempunyai fail XML yang menerangkan mesin. Walau bagaimanapun, pengaturcara kami tidak bersetuju sesama mereka terlebih dahulu. Dan kini, sebagai tambahan kepada data daripada kereta sebenar, xml kami juga termasuk data daripada model mainan! Lebih-lebih lagi, mereka mempunyai sifat yang sama. Program kami menerima fail XML berikut. Bagaimanakah kita boleh membezakan kereta sebenar daripada model 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>
Awalan dan ruang nama akan membantu kami di sini. Untuk memisahkan kereta mainan daripada kereta sebenar dalam program kami (dan secara amnya, apa-apa barang mainan daripada prototaip 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! Apa-apa sahaja dengan awalan mainan akan diklasifikasikan sebagai mainan :) Walau bagaimanapun, kami belum selesai lagi. Untuk menggunakan awalan, kita perlu mendaftarkan setiap satu daripadanya sebagai ruang nama. Sebenarnya, "daftar" ialah perkataan yang kuat :) Anda hanya perlu menghasilkan nama unik untuk setiap satu daripada mereka. Ia seperti kelas: kelas mempunyai nama pendek ( Cat) dan nama penuh dengan semua pakej ( zoo.animals.Cat) Untuk mencipta ruang nama yang unik, URI biasanya digunakan . Kadangkala alamat Internet digantikan di sini, di mana fungsi dan tujuan ruang nama ini diterangkan secara terperinci. Tetapi ini tidak semestinya alamat Internet yang sah. Selalunya, projek hanya menggunakan rentetan seperti URI yang membantu menjejaki hierarki ruang nama. Berikut ialah 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 di Internet di alamat http://testproject.developersgroup1.companyname/department2/namespaces/real Tetapi terdapat maklumat berguna: kumpulan pembangun "developersgroup1" dari jabatan "department2" bertanggungjawab untuk mencipta ruang nama "sebenar". Jika anda perlu menambah nama baharu atau membincangkan kemungkinan konflik dengan mereka, kami tahu ke mana hendak beralih. Kadangkala alamat Internet sebenar dengan penerangan ruang nama ini digunakan sebagai nama unik untuk ruang nama. Sebagai contoh, jika ia adalah sebuah syarikat besar dan projeknya akan digunakan oleh berjuta-juta orang di seluruh dunia. Tetapi ini tidak selalu dilakukan: terdapat perbincangan mengenai isu ini pada Stackoverflow . Pada dasarnya, keperluan untuk menggunakan URI sebagai nama untuk ruang nama tidak ketat: anda hanya boleh menggunakan rentetan rawak. Pilihan ini juga akan berfungsi:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Tetapi terdapat beberapa kelebihan untuk menggunakan URI. 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 yang paling penting dan mengetahui perkara yang mereka benarkan AJAX , salah satu piawaian XML yang paling terkenal, lakukan. Ia membolehkan anda menukar kandungan halaman web tanpa memuatkannya semula! Kedengaran sejuk? :) Anda boleh mencuba teknologi ini secara peribadi di sini . XSLT - membolehkan anda menukar teks XML kepada format lain. Contohnya, menggunakan XSLT, anda boleh menukar XML kepada HTML! Tujuan XML, seperti yang telah kami katakan, adalah untuk menerangkan data, bukan untuk memaparkannya. Tetapi menggunakan XSLT kita boleh memintas had ini! Berikut ialah kotak pasir dengan contoh yang berfungsi, di mana anda boleh melihat sendiri cara ia berfungsi :) XML DOM - membolehkan anda mendapatkan, menukar, menambah atau mengalih keluar elemen individu daripada fail XML. Berikut ialah contoh kecil cara ia 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>
Terdapat dua buah buku di dalamnya. Buku mempunyai unsur seperti tajuk - <tajuk>. Dan di sini kita boleh menggunakan JavaScript untuk mendapatkan semua tajuk buku daripada fail XML kami dan mengeluarkan yang pertama daripadanya 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 syorkan untuk melihat cara contoh ini berfungsi menggunakan kotak pasir :) DTD (“definisi jenis dokumen”) - membolehkan anda mentakrifkan senarai elemen yang dibenarkan untuk sesetengah entiti dalam fail XML. Contohnya, kami sedang mengusahakan tapak web kedai buku dan semua pasukan pembangunan telah bersetuju bahawa untuk elemen buku, hanya atribut tajuk, pengarang dan tahun harus dinyatakan dalam fail XML. Tetapi bagaimanakah kita boleh melindungi diri kita daripada ketidakpedulian? 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! "Wira utama elemen tidak dibenarkan di sini" Terdapat banyak piawaian XML yang lain. Anda boleh berkenalan dengan setiap daripada mereka dan cuba menggali lebih mendalam kod di tapak web WC3 (bahagian "Standard XML Penting"). Dan secara umum, jika anda memerlukan maklumat tentang XML, anda boleh menemui hampir semua perkara di sana :) Nah, kuliah kami telah berakhir. Sudah tiba masanya untuk kembali ke tugas! :) Jumpa anda!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION