CodeGym /Blog Jawa /Acak /XML ing Jawa
John Squirrels
tingkat
San Francisco

XML ing Jawa

Diterbitake ing grup
Hi! Dina iki kita bakal ngenalake format data liyane sing diarani XML. Iki minangka topik sing penting banget. Nalika nggarap aplikasi Java nyata, sampeyan mesthi bakal nemoni tugas sing ana gandhengane karo XML. Ing pangembangan Jawa, format iki digunakake meh universal (kita bakal ngerteni apa sebabe ing ngisor iki), mula aku menehi saran supaya sampeyan ora nyemak pelajaran iki kanthi entheng, nanging entuk pangerten sing lengkap babagan kabeh lan uga sinau literatur / tautan tambahan :) mesthi ora bakal mbuwang wektu. Dadi, ayo miwiti kanthi gampang: "apa" lan "kenapa"!

Apa Java XML?

XML singkatan saka eXtensible Markup Language. Sampeyan bisa uga wis kenal karo basa markup — apa sampeyan krungu babagan HTML, sing digunakake kanggo nggawe kaca web :) Apa XML?  - 1HTML lan XML malah nduweni tampilan sing padha:
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>
Ing tembung liyane, XML minangka basa kanggo njlèntrèhaké data.

Napa sampeyan butuh XML?

XML wiwitane diciptakake kanggo nyimpen lan ngirim data luwih gampang, kalebu liwat Internet. Nduwe sawetara kaluwihan sing mbantu sampeyan entuk iki. Kaping pisanan, gampang diwaca dening manungsa lan komputer. Aku sampeyan bisa kanthi gampang ngerti apa sing digambarake ing file XML iki:

<?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 uga gampang ngerti format iki. Kapindho, amarga data disimpen minangka teks biasa, ora bakal ana masalah kompatibilitas nalika ditransfer saka komputer menyang komputer liyane. Penting kanggo mangerteni yen XML dudu kode eksekusi — iku basa deskripsi data. Sawise sampeyan njlèntrèhaké data nggunakake XML, sampeyan kudu nulis kode (contone, ing Jawa) sing bisa ngirim / nampa / ngolah data iki.

Kepiye struktur XML?

Komponen utama yaiku tag: iki minangka barang ing kurung sudut:

<book>
</book>
Ana tag pambuka lan tag tutup. Tag penutup nduweni simbol tambahan (" / "), kaya sing bisa dideleng ing conto ing ndhuwur. Saben tag pambuka kudu duwe tag penutup. Dheweke nuduhake ing ngendi katrangan saben unsur ing file kasebut diwiwiti lan rampung. Tag bisa dipasang! Ing conto buku kita, tag <book> nduweni 3 tag sing disambungake: <title>, <author>, lan <year>. Iki ora mung siji tingkat nesting: nested tags bisa duwe nested tags dhewe, etc. Struktur iki diarani tag tree. Ayo deleng wit iki nggunakake file XML sampel sing nggambarake 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>
Ing kene kita duwe tag tingkat paling dhuwur: <carstore>. Iki uga disebut unsur ROOT. <carstore> duwe tag anak siji: <car>. <mobil>, uga duwe 3 tag anak: <model>, <taun> lan <rega>. Saben tag bisa duwe atribut, sing ngemot informasi penting tambahan. Ing conto kita, tag <model> nduweni atribut "lang", sing nuduhake basa sing digunakake kanggo ngrekam jeneng model:

<model lang="en">Scania R 770</model>
Ing kene kita nuduhake yen jeneng kasebut ditulis ing basa Inggris. Tag <price> kita duwe atribut "currency".

<price currency="US dollar">150000.00</price>
Ing kene kita nuduhake yen rega mobil kasebut diwenehake ing dolar AS. Mangkono, XML duwe sintaks "nggambarake dhewe". Sampeyan bisa nambah informasi sing perlu kanggo njlèntrèhaké data. Kajaba iku, ing sisih ndhuwur file, sampeyan bisa nambah baris sing nuduhake versi XML lan enkoding sing digunakake kanggo nulis data. Iki diarani "prolog" lan katon kaya iki:

<?xml version="1.0" encoding="UTF-8"?>
Kita nggunakake XML versi 1.0 lan enkoding UTF-8. Iki ora perlu, nanging bisa migunani yen, contone, file sampeyan nggunakake teks ing macem-macem basa. Kita nyatakake yen XML tegese "Basa Markup eXtensible", nanging apa tegese "extensible"? Iki tegese iku sampurna kanggo nggawe versi anyar saka obyek lan file. Contone, umpamane kita uga pengin miwiti adol motor ing dealer mobil! Sing jarene, kita butuh program kita kudu ndhukung loro versi <carstore>: sing lawas (tanpa motor) lan sing anyar. Iki versi lawas kita:

<?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>
Lan iki sing ditambahi anyar:

<?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>
Semono uga gampang lan gampang kanggo nambah katrangan babagan sepedha motor ing file kita :) Apa maneh, kita pancen ora kudu duwe tag bocah sing padha kanggo motor lan mobil. Elinga yen sepeda motor, ora kaya mobil, duwe unsur <pemilik>. Iki ora nyegah komputer (utawa manungsa) saka maca data.

Bedane antarane XML lan HTML

Kita wis ujar manawa XML lan HTML meh padha karo tampilan. Sing nggawe penting banget kanggo ngerti kepiye bedane. Kaping pisanan, padha digunakake kanggo macem-macem tujuan. HTML kanggo menehi tandha kaca web. Contone, nalika nggawe situs web, sampeyan bisa nggunakake HTML kanggo nemtokake: "Menu kudu ana ing pojok tengen ndhuwur. Sampeyan kudu duwe tombol kuwi lan kuwi ". Ing tembung liya, tugas HTML yaiku nampilake data. XML kanggo nyimpen lan ngirim informasi ing wangun trep kanggo manungsa lan komputer. Format iki ora ngemot indikasi babagan carane data iki kudu ditampilake: sing gumantung saka kode program sing maca. Kapindho, ana prabédan teknis utama. Tag HTML wis ditemtokake. Ing tembung liya, nggawe header HTML (contone, caption gedhe ing sisih ndhuwur kaca) mung nggunakake <h1></h1> tags (<h2></h2> lan <h3></h3> digunakake kanggo header cilik). Sampeyan ora bisa nggawe header HTML nggunakake tag liyane. XML ora nggunakake tag sing wis ditemtokake. Sampeyan bisa menehi tag jeneng apa wae sing dikarepake: <header>, <title>, <idontknow2121>.

Resolusi konflik

Kebebasan sing diwenehake XML bisa nyebabake sawetara masalah. Contone, siji lan entitas sing padha (contone, mobil) bisa digunakake dening program kanggo macem-macem tujuan. Contone, kita duwe file XML sing nggambarake mobil. Nanging, programer kita ora entuk persetujuan sadurunge. Lan saiki, saliyane data babagan mobil nyata, kita bisa nemokake data babagan mobil dolanan ing XML kita! Kajaba iku, padha duwe atribut sing padha. Dadi program kita maca ing file XML kasebut. Kepiye carane mbedakake mobil asli saka mobil dolanan?

<?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>
Ing kene prefiks lan namespace bakal mbantu kita. Kanggo mbedakake mobil dolanan saka sing nyata ing program kita (lan pancen dolanan apa wae saka mitra nyata), kita ngenalake rong awalan: "nyata" lan "dolanan".

<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>
Saiki program kita bakal bisa mbedakake antarane entitas sing beda-beda! Kabeh sing duwe awalan dolanan bakal dianggep minangka dolanan :) Nanging, kita durung rampung. Kanggo nggunakake ater-ater, kita kudu ndhaptar saben-saben minangka ruang jeneng. Bener, "ndhaftar" iku tembung sing kuwat :) Kita mung kudu nggawe jeneng unik kanggo saben wong. Iku kaya karo kelas: kelas duwe jeneng cendhak ( Cat ) lan jeneng qualified lengkap sing kalebu kabeh paket ( zoo.animals.Cat). URI biasane digunakake kanggo nggawe jeneng spasi jeneng unik. Kadhangkala iki ditindakake kanthi nggunakake alamat Internet, ing ngendi fungsi ruang jeneng iki diterangake. Nanging ora kudu alamat Internet sing bener. Asring banget, proyek mung nggunakake senar kaya URI sing mbantu nglacak hirarki namespace. Punika conto:

<?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>
Mesthi, ora ana situs web ing "http://testproject.developersgroup1.companyname/department2/namespaces/real" Nanging senar iki ngemot informasi sing migunani: pangembang Grup 1 ing Departemen 2 tanggung jawab kanggo nggawe ruang jeneng "nyata" . Yen kita kudu ngenalake jeneng anyar utawa ngrembug kemungkinan konflik, kita bakal ngerti kepiye arah. Kadhangkala pangembang nggunakake alamat web deskriptif nyata minangka jeneng ruang jeneng sing unik. Contone, iki bisa uga kedadeyan kanggo perusahaan gedhe sing proyeke bakal digunakake dening mayuta-yuta wong ing saindenging jagad. Nanging iki mesthi ora mesthi ditindakake: Stack Overflow duwe diskusi babagan masalah iki. Umumé, ora ana syarat sing ketat kanggo nggunakake URI minangka jeneng ruang jeneng: sampeyan uga bisa nggunakake string acak. Opsi iki uga bisa digunakake:

xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Sing jarene, nggunakake URI duwe sawetara kaluwihan. Sampeyan bisa maca liyane babagan iki tengen kene .

Standar XML dhasar

Standar XML minangka set ekstensi sing nambah fungsi ekstra menyang file XML. XML wis akèh standar, nanging kita mung bakal katon ing paling penting lan mangerteni sing padha nggawe AJAX bisa, kang siji saka standar XML paling misuwur. Ngidini sampeyan ngganti isi kaca web tanpa ngisi maneh! XSLT ngidini sampeyan ngowahi teks XML menyang format liyane. Contone, sampeyan bisa nggunakake XSLT kanggo ngowahi XML menyang HTML! Kaya sing wis dingerteni, tujuan XML yaiku kanggo njlèntrèhaké data, dudu kanggo nampilake. Nanging kanthi XSLT kita bisa ngatasi watesan iki! XML DOM ngijini sampeyan njupuk, ngowahi, nambah, utawa mbusak unsur individu saka file XML. Iki minangka conto cilik babagan cara kerjane. Kita duwe 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>
Wis rong buku. Buku nduweni unsur <title>. Ing kene kita bisa nggunakake JavaScript kanggo njupuk kabeh judhul buku saka file XML lan nyithak sing pertama menyang 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 jinis dokumen") ngidini sampeyan nemtokake dhaptar unsur sing diidini kanggo entitas ing file XML. Contone, umpamane kita nggarap situs web toko buku lan kabeh tim pangembangan setuju yen mung judhul, penulis, lan atribut taun sing kudu ditemtokake kanggo unsur buku ing file XML. Nanging kepiye carane nglindhungi awake dhewe saka kecerobohan? Gampang banget!

<?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>
Ing kene kita wis nemtokake dhaptar atribut sing valid kanggo <buku>. Coba tambahake unsur anyar ing kana lan sampeyan bakal entuk kesalahan!

<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 ora diidini ing kene" Ana akeh standar XML liyane. Sampeyan bisa familiarize dhewe karo saben wong lan nyoba kanggo dig deeper menyang kode. Oalah, yen sampeyan butuh informasi babagan XML, sampeyan bisa nemokake meh kabeh ana :) Lan kanthi iki, pelajaran kita rampung. Wektu kanggo bali menyang tugas! :) Nganti wektu sabanjure!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION