JavaRush /Java Blog /Random-TK /Java-da XML: Bu näme?

Java-da XML: Bu näme?

Toparda çap edildi
Salam! Bu gün XML atly başga bir maglumat formaty bilen tanyşarys. Bu gaty möhüm mowzuk. Hakyky Java programmalarynda işläniňizde, XML bilen baglanyşykly kynçylyklara duçar bolarsyňyz. Bu format Java ösüşiniň hemme ýerinde diýen ýaly ulanylýar (aşakda näme üçindigini anyklarys), şonuň üçin leksiýany “diagonally” däl-de, okamagy maslahat berýärin, ýöne hemme zada gowy düşüniň we şol bir wagtyň özünde goşmaça edebiýat / baglanyşyklary öwreniň :) Bu wagt hökman biderek bolmaz. Şeýlelik bilen, ýönekeýlerden başlalyň - “näme” we “näme üçin”!

XML näme?

XML “eXtensible Markup Language” diýmekdir. Bellenen dilleriň biri bilen eýýäm tanyş bolmagyňyz mümkin: web sahypalaryny döretmek üçin ulanylýan HTML hakda eşitdiňiz :) XML näme - 1HTML we XML daşky görnüşi bilen birmeňzeş:
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>
Başgaça aýdylanda, XML maglumatlary beýan etmek üçin dil.

Näme üçin XML gerek?

XML başda maglumatlary has amatly saklamak we geçirmek üçin, şol sanda internet arkaly oýlanyp tapyldy. Bu meseläni üstünlikli çözmäge mümkinçilik berýän birnäçe artykmaçlygy bar. Birinjiden, adamlar we kompýuterler tarapyndan okamak aňsat. Bu xml faýlyň düşündirişine aňsatlyk bilen düşünip bilersiňiz diýip pikir edýärin:
<?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>
Kompýuter hem bu formata aňsatlyk bilen düşünýär. Ikinjiden, maglumatlar ýönekeý tekst görnüşinde saklanylýandygy sebäpli, ony bir kompýuterden beýlekisine geçireniňizde hiç hili ylalaşyk meselesi bolmaz. XML-iň ýerine ýetirip boljak kody däl-de, maglumatlary düşündirmek dilidigine düşünmek möhümdir . Maglumatlary XML ulanyp düşündireniňizden soň, bu maglumatlary iberip / alyp / işläp bilýän kod ýazmaly (mysal üçin Java-da).

XML nähili işleýär?

Onuň esasy komponenti bellikler: burç ýaýlaryndaky zatlar:
<book>
</book>
Açmak we ýapmak bellikleri bar. Ingapylýan adamyň goşmaça nyşany bar - “ /”, muny ýokardaky mysalda görmek bolýar. Her açylyş belliginde degişli ýapylyş belligi bolmaly. Faýldaky her elementiň beýanynyň nireden başlanýandygyny we gutarýandygyny görkezýär. Bellikler ýerleşdirilip bilner! Kitap mysalymyzda, <book> belliginde 3 sany subtag bar - <title> , <author> we <year> . Bu diňe bir dereje bilen çäklenmeýär: subtaglaryň öz subtaglary we ş.m. bolup biler. Bu dizaýna bellik agajy diýilýär. Awtoulag satyjysynyň beýany bolan XML faýlynyň mysaly bilen agaja seredeliň:
<?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>
Bu ýerde iň ýokary derejeli belligimiz bar - <carstore> . Oňa “kök” - kök belligi hem diýilýär. <carstore> -da <car> atly bir çaga belligi bar. <car>, öz gezeginde, 3 sany çaga belligi bar - <model>, <year> we <price>. Her belligiň atributlary bolup biler - goşmaça möhüm maglumatlar. Mysal üçin, <model> belliginde “lang” atributy bar - modeliň adynyň ýazylan dili:
<model lang="en">Scania R 770</model>
Şeýlelik bilen, adyň iňlis dilinde ýazylandygyny görkezip bileris. <Bahasy> belligimizde “walýuta” aýratynlygy bar.
<price currency="US dollar">150000.00</price>
Şeýlelik bilen, awtoulagyň bahasynyň ABŞ-nyň dollarynda bolandygyny görkezip bileris. Şeýlelikde, XML-de "özüni suratlandyrýan" sintaksis bar . Maglumatlary suratlandyrmak üçin zerur maglumatlary goşup bilersiňiz. Şeýle hem, faýlyň başynda XML wersiýasyny we maglumatlaryň ýazylan kodlamasyny görkezýän setir goşup bilersiňiz. " Prolog " diýilýär we şuňa meňzeýär:
<?xml version="1.0" encoding="UTF-8"?>
XML 1.0 wersiýasy we UTF-8 kodlamagy ulanýarys. Bu hökman däl, ýöne meselem, faýlyňyzda dürli dillerde tekst ulansaňyz peýdaly bolup biler. XML-iň “giňelip bilýän bellik dilini” aňladýandygyny belledik, ýöne “giňelip bilýän” diýmek näme? Bu, obýektleriňiziň we faýllaryňyzyň täze wersiýalaryny döretmek üçin gaty laýykdygyny aňladýar. Mysal üçin, awtoulag sergi otagymyzda motosikl satyp başlamagyny isleýäris! Şol bir wagtyň özünde, programmada <carstore> -yň ikisiniň hem köne (motosiklsiz) we täze görnüşini goldamaly. Ine, köne wersiýamyz:
<?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>
Ine, täze, giňeldilen:
<?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>
Şeýle aňsat we ýönekeý motosiklleriň beýanyny faýlymyza goşduk :) Şol bir wagtyň özünde, motosikller üçin awtoulaglar ýaly çaga belliklerini goýmak hökman däl. Motosiklleriň awtoulaglardan tapawutlylykda <eýesi> elementiniň bardygyny ýadyňyzdan çykarmaň. Bu, kompýuteriň (ýa-da bir adamyň) maglumatlary okamagynyň öňüni almaz.

XML bilen HTML arasyndaky tapawutlar

XML we HTML görnüşleriniň gaty meňzeşdigini eýýäm aýdypdyk. Şonuň üçin olaryň nähili tapawutlanýandygyny bilmek gaty möhümdir. Ilki bilen dürli maksat bilen ulanylýar. HTML - web sahypalaryny bellemek üçin. Mysal üçin, HTML ulanyp, web sahypasyny döretmeli bolsaňyz, kesgitläp bilersiňiz: “Menýu ýokarky sag burçda bolmaly. Şeýle we şeýle düwmeler bolmaly ". Başgaça aýdylanda, HTML-iň maksady maglumatlary görkezmek. XML - maglumatlary adamlar we kompýuterler üçin amatly görnüşde saklamak we geçirmek üçin . Bu formatda bu maglumatlary nädip görkezmelidigi barada görkezmeler ýok: bu programmanyň koduna bagly. Ikinjiden, olaryň esasy tehniki tapawudy bar. HTML bellikleri öňünden kesgitlenendir. Başgaça aýdylanda, sözbaşy döretmek üçin (mysal üçin, sahypanyň başyndaky uly ýazgy) HTML-de diňe <h1> </h1> bellikleri ulanylýar (kiçi sözbaşylar üçin - <h2> </h2>, < h3> </h3>). Dürli atlar bilen bellikleri ulanyp, HTML-de sözbaşy döredip bilmersiňiz. XML öňünden kesgitlenen bellikleri ulanmaýar. Belliklere islän atlaryňyzy berip bilersiňiz - <header>, <title>, <idontknow2121>.

Dawa-jenjeli çözmek

XML-iň berýän erkinligi käbir problemalara sebäp bolup biler. Mysal üçin, şol bir gurama (mysal üçin, awtoulag) programma tarapyndan dürli maksatlar üçin ulanylyp bilner. Mysal üçin, maşynlary suratlandyrýan XML faýlymyz bar. Şeýle-de bolsa, programmistlerimiz öz aralarynda öňünden ylalaşmadylar. Indi, hakyky awtoulaglardan alnan maglumatlardan başga-da, xml-de oýunjak modellerinden maglumatlar hem bar! Mundan başga-da, şol bir häsiýetler bar. Programmamyz aşakdaky XML faýly alýar. Oýnawaç modelinden hakyky ulagy nädip aýdyp bileris?
<?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>
Bu ýerde prefiksler we at giňişlikleri bize kömek eder. Oýnawaç awtoulaglaryny programmamyzdaky hakyky awtoulaglardan aýyrmak üçin (we umuman aýdylanda, islendik oýunjak zatlary hakyky prototiplerinden) aýyrmak üçin iki sany prefiksi - “hakyky” we “oýunjak” girizýäris.
<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>
Indi programmamyz subýektleri tapawutlandyryp biler! Oýnawaç prefiksi bolan islendik zat oýunjak hökmünde toparlara bölüner :) Şeýle-de bolsa, entek gutarmadyk. Prefiksleri ulanmak üçin olaryň hersini at giňişligi hökmünde hasaba almaly. Aslynda, "registrasiýa" güýçli söz :) Diňe olaryň hersi üçin özboluşly bir at tapmaly. Synplardaky ýaly: synpyň gysga ady ( Cat) we ähli paketler bilen doly ady bar ( zoo.animals.Cat) Üýtgeşik at giňişliklerini döretmek üçin adatça URI ulanylýar . Käwagt bu at giňişliginiň funksiýalary we maksady jikme-jik beýan edilýän bu ýerde internet salgysy çalşylýar. Thisöne munuň dogry internet salgysy bolmaly däl. Taslamalar köplenç at giňişliginiň iýerarhiýasyny yzarlamaga kömek edýän URI ýaly setirleri ulanýarlar. Ine bir mysal:
<?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>
Elbetde, internetde http: //testproject.developersgroup1.companyname/department2/namespaces/real salgysynda sahypa ýok , ýöne peýdaly maglumatlar bar: “bölüm2” bölüminden “işläp düzüjiler topary” dörediji topary döretmek üçin jogapkärdir “hakyky” at giňişligi. Täze atlar goşmak ýa-da olar bilen bolup biljek gapma-garşylyklary ara alyp maslahatlaşmak zerur bolsa, nirä ýüz tutmalydygymyzy bilýäris. Käwagt bu at giňişliginiň beýany bolan hakyky internet salgysy, at giňişliginiň özboluşly ady hökmünde ulanylýar. Mysal üçin, uly bir kompaniýa bolsa we bu taslamany dünýädäki millionlarça adam ulanar. Emma bu hemişe edilmeýär: “Stackoverflow” -da bu mesele barada çekişme bar . Aslynda, URI-leri at giňişligi üçin at hökmünde ulanmak talaby berk däl: diňe tötänleýin setirleri ulanyp bilersiňiz. Bu opsiýa hem işlär:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Emma URI-leri ulanmagyň birnäçe artykmaçlygy bar. Bu hakda has giňişleýin maglumaty şu ýerden okap bilersiňiz .

Esasy XML ülňüleri

XML ülňüleri, xml faýllaryna goşmaça funksiýa goşýan giňeltmeler toplumydyr. XML-iň köp standartlary bar, ýöne iň möhümlerine seredip , iň meşhur XML standartlaryndan biri bolan AJAX-yň näme etmegine rugsat bereris . Web sahypasynyň mazmunyny täzeden ýüklemän üýtgetmäge mümkinçilik berýär! Gowy sesler? :) Bu tehnologiýany şu ýerde şahsy synap bilersiňiz . XSLT - XML ​​tekstini beýleki formatlara öwürmäge mümkinçilik berýär. Mysal üçin, XSLT ulanyp, XML-ni HTML-e öwrüp bilersiňiz! XML-iň maksady, öňem aýdyşymyz ýaly, maglumatlary görkezmek däl-de, beýan etmekdir. Xöne XSLT ulanyp, bu çäklendirmäni geçip bileris! Ine, işleýän mysaly bolan sandyk gutusy, onuň nähili işleýändigini özüňiz görüp bilersiňiz :) XML DOM - XML ​​faýlyndan aýratyn elementleri almaga, üýtgetmäge, goşmaga ýa-da aýyrmaga mümkinçilik berýär. Ine, onuň işleýşiniň kiçijik bir mysaly. Bizde book.xml faýly bar:
<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>
Onda iki kitap bar. Kitaplaryň ady - <title> ýaly element bar. Bu ýerde, XML faýlymyzdan kitap atlarynyň hemmesini almak we birinjisini konsola çykarmak üçin JavaScript ulanyp bileris:
<!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>
Againene-de, bu mysalyň sandyk gutusy bilen nähili işleýändigini görmegi maslahat berýärin :) DTD (“resminama görnüşiniň kesgitlemesi”) - XML ​​faýlyndaky käbir guramalar üçin rugsat berlen elementleriň sanawyny kesgitlemäge mümkinçilik berýär. Mysal üçin, kitap dükanynyň web sahypasynda işleýäris we ähli ösüş toparlary kitap elementi üçin XML faýllarynda diňe adyň, awtoryň we ýyl atributlarynyň görkezilmelidigi barada ylalaşdylar. Ourselvesöne özümizi biperwaýlykdan nädip gorap bileris? Örän aňsat!
<?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>
Bu ýerde <book> üçin dogry atributlaryň sanawyny kesgitledik. Şol ýerde täze element goşmaga synanyşyň we derrew ýalňyşlyk alarsyňyz!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Roralňyşlyk! “Element mainhero bu ýerde rugsat berilmeýär” Beýleki köp XML standartlary bar. Olaryň her biri bilen tanşyp, WC3 web sahypasyndaky kody has çuňňur öwrenmäge synanyşyp bilersiňiz (“Möhüm XML standartlary” bölümi). Umuman aýdanyňda, XML hakda maglumat gerek bolsa, hemme zady diýen ýaly tapyp bilersiňiz :) Hawa, leksiýamyz gutardy. Wezipelere gaýdyp gelmegiň wagty geldi! :) Görüşýänçäk!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION