JavaRush /Java Blog /Random-TL /XML sa Java: Ano ito?

XML sa Java: Ano ito?

Nai-publish sa grupo
Kamusta! Ngayon ay makikilala natin ang isa pang format ng data na tinatawag na XML. Ito ay isang napakahalagang paksa. Kapag nagtatrabaho sa mga totoong Java application, halos tiyak na makakatagpo ka ng mga problemang nauugnay sa XML. Ang format na ito ay ginagamit halos lahat ng dako sa Java development (alamin natin kung bakit eksakto sa ibaba), kaya inirerekomenda ko na basahin mo ang lecture hindi "diagonal", ngunit unawain ang lahat ng lubusan at sa parehong oras ay pag-aralan ang mga karagdagang literatura/link :) Ito tiyak na hindi masasayang ang oras. Kaya, magsimula tayo sa mga simple - "ano" at "bakit"!

Ano ang XML?

Ang XML ay kumakatawan sa eXtensible Markup Language. Maaaring pamilyar ka na sa isa sa mga markup na wika: narinig mo na ang HTML, na ginagamit upang lumikha ng mga web page :) Ang Ano ang XML - 1HTML at XML ay magkapareho sa hitsura:
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>
Sa madaling salita, ang XML ay isang wika para sa paglalarawan ng data.

Bakit kailangan ang XML?

Ang XML ay orihinal na naimbento para sa mas maginhawang pag-iimbak at paghahatid ng data, kabilang ang sa Internet. Ito ay may isang bilang ng mga pakinabang na nagbibigay-daan ito upang matagumpay na makayanan ang gawaing ito. Una, ito ay madaling basahin ng parehong mga tao at mga computer. Sa tingin ko madali mong mauunawaan kung ano ang inilalarawan ng xml file na ito:
<?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>
Madali ring naiintindihan ng computer ang format na ito. Pangalawa, dahil ang data ay naka-imbak sa isang simpleng format ng teksto, hindi magkakaroon ng mga isyu sa pagiging tugma kapag inililipat ito mula sa isang computer patungo sa isa pa. Mahalagang maunawaan na ang XML ay hindi executable na code, ngunit isang wika ng paglalarawan ng data . Pagkatapos mong ilarawan ang data gamit ang XML, kailangan mong magsulat ng code (halimbawa, sa Java) na maaaring magpadala/makatanggap/magproseso ng data na ito.

Paano gumagana ang XML?

Ang pangunahing bahagi nito ay mga tag: ito ang mga bagay sa mga anggulong bracket:
<book>
</book>
May mga opening at closing tag. Ang pagsasara ay may karagdagang simbolo - " /", makikita ito sa halimbawa sa itaas. Ang bawat pambungad na tag ay dapat may katumbas na pansarang tag. Ipinapakita ng mga ito kung saan nagsisimula at nagtatapos ang paglalarawan ng bawat elemento sa file. Maaaring ma-nest ang mga tag! Sa aming halimbawa ng aklat, ang tag na <book> ay may 3 subtag - <title> , <author> at <year> . Hindi ito limitado sa isang antas: maaaring magkaroon ng sariling mga subtag ang mga subtag, atbp. Ang disenyong ito ay tinatawag na tag tree. Tingnan natin ang puno gamit ang halimbawa ng isang XML file na may paglalarawan ng isang dealership ng kotse:
<?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>
Narito kami ay may pinakamataas na antas na tag - <carstore> . Tinatawag din itong "ugat" - root tag. Ang <carstore> ay may isang child tag, <car>. Ang <car>, sa turn, ay mayroon ding 3 sa sarili nitong child tag - <model>, <year> at <price>. Ang bawat tag ay maaaring magkaroon ng mga katangian - karagdagang mahalagang impormasyon. Sa aming halimbawa, ang tag na <model> ay may attribute na "lang" - ang wika kung saan nakasulat ang pangalan ng modelo:
<model lang="en">Scania R 770</model>
Sa paraang ito maipahiwatig natin na ang pamagat ay nakasulat sa Ingles. Ang aming tag na <price> ay may attribute na "currency."
<price currency="US dollar">150000.00</price>
Sa ganitong paraan maaari naming ipahiwatig na ang presyo para sa kotse ay nasa US dollars. Kaya, ang XML ay may "self-describing" syntax . Maaari kang magdagdag ng anumang impormasyon na kailangan mo upang ilarawan ang data. Maaari ka ring magdagdag ng linya sa simula ng file na nagpapahiwatig ng bersyon ng XML at ang pag-encode kung saan nakasulat ang data. Ito ay tinatawag na " prolog " at ganito ang hitsura:
<?xml version="1.0" encoding="UTF-8"?>
Gumagamit kami ng XML version 1.0 at UTF-8 encoding. Hindi ito kinakailangan, ngunit maaari itong maging kapaki-pakinabang kung, halimbawa, gumamit ka ng teksto sa iba't ibang mga wika sa iyong file. Nabanggit namin na ang XML ay nangangahulugang "extensible markup language," ngunit ano ang ibig sabihin ng "extensible"? Nangangahulugan ito na ito ay ganap na angkop para sa paglikha ng mga bagong bersyon ng iyong mga bagay at file. Halimbawa, gusto naming magsimulang magbenta rin ng mga motorsiklo ang aming showroom ng kotse! Kasabay nito, sa programa kailangan nating suportahan ang parehong bersyon ng <carstore> - pareho ang luma (walang motorsiklo) at ang bago. Narito ang aming lumang bersyon:
<?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>
At narito ang bago, pinalawak na isa:
<?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>
Napakadali at simpleng idinagdag namin ang paglalarawan ng mga motorsiklo sa aming file :) Kasabay nito, talagang hindi namin kailangang itakda ang parehong mga tag ng bata para sa mga motorsiklo tulad ng para sa mga kotse. Pakitandaan na ang mga motorsiklo, hindi tulad ng mga kotse, ay may elementong <owner> - ang may-ari. Hindi nito pipigilan ang isang computer (o alinman sa isang tao) mula sa pagbabasa ng data.

Mga pagkakaiba sa pagitan ng XML at HTML

Nasabi na namin na ang XML at HTML ay halos magkapareho sa hitsura. Samakatuwid, napakahalagang malaman kung paano sila naiiba. Una, ginagamit ang mga ito para sa iba't ibang layunin. HTML - para sa pagmamarka ng mga web page. Halimbawa, kung kailangan mong gumawa ng website, gamit ang HTML maaari mong tukuyin ang: “Ang menu ay dapat nasa kanang sulok sa itaas. Dapat ay may ganito at ganoong mga pindutan." Sa madaling salita, ang layunin ng HTML ay magpakita ng data. XML - para sa pag-iimbak at pagpapadala ng impormasyon sa isang form na maginhawa para sa mga tao at mga computer. Ang format na ito ay hindi naglalaman ng anumang mga tagubilin kung paano dapat ipakita ang data na ito: depende ito sa code ng program mismo. Pangalawa, mayroon silang pangunahing pagkakaiba sa teknikal. Ang mga HTML tag ay paunang natukoy. Sa madaling salita, upang lumikha ng isang heading (halimbawa, isang malaking inskripsyon sa simula ng pahina), ang mga <h1></h1> tag lang ang ginagamit sa HTML (para sa mas maliliit na heading - <h2></h2>, < h3></h3>). Hindi ka makakagawa ng mga heading sa HTML gamit ang mga tag na may iba't ibang pamagat. Hindi gumagamit ang XML ng mga paunang natukoy na tag. Maaari mong bigyan ang mga tag ng anumang pangalan na gusto mo - <header>, <title>, <idontknow2121>.

Pag-ayos ng gulo

Ang kalayaang ibinibigay ng XML ay maaari ding humantong sa ilang problema. Halimbawa, ang parehong entity (halimbawa, isang kotse) ay maaaring gamitin ng isang programa para sa iba't ibang layunin. Halimbawa, mayroon kaming XML file na naglalarawan ng mga makina. Gayunpaman, ang aming mga programmer ay hindi sumang-ayon nang maaga. At ngayon, bilang karagdagan sa data mula sa mga totoong kotse, ang aming xml ay may kasamang data mula sa mga modelo ng laruan! Bukod dito, mayroon silang parehong mga katangian. Natatanggap ng aming programa ang sumusunod na XML file. Paano natin malalaman ang isang tunay na kotse mula sa isang modelo ng laruan?
<?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>
Ang mga prefix at namespace ay makakatulong sa amin dito. Upang paghiwalayin ang mga laruang kotse mula sa mga tunay sa aming programa (at, sa pangkalahatan, anumang mga laruang bagay mula sa kanilang mga tunay na prototype), ipinakilala namin ang dalawang prefix - "totoo" at "laruan".
<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>
Ngayon ang aming programa ay magagawang makilala sa pagitan ng mga entity! Anumang bagay na may prefix ng laruan ay mauuri bilang mga laruan :) Gayunpaman, hindi pa tayo tapos. Upang gumamit ng mga prefix, kailangan nating irehistro ang bawat isa sa kanila bilang isang namespace. Well, actually, ang "register" ay isang malakas na salita :) Kailangan mo lang makabuo ng isang natatanging pangalan para sa bawat isa sa kanila. Ito ay tulad ng sa mga klase: ang isang klase ay may maikling pangalan ( Cat) at isang buong pangalan kasama ang lahat ng mga pakete ( zoo.animals.Cat) Upang lumikha ng mga natatanging namespace, karaniwang ginagamit ang isang URI . Minsan ang Internet address ay pinapalitan dito, kung saan ang mga function at layunin ng namespace na ito ay inilarawan nang detalyado. Ngunit hindi ito kailangang maging wastong Internet address. Kadalasan, ang mga proyekto ay gumagamit lamang ng mga string na tulad ng URI na tumutulong sa pagsubaybay sa hierarchy ng mga namespace. Narito ang isang halimbawa:
<?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>
Siyempre, walang site sa Internet sa address na http://testproject.developersgroup1.companyname/department2/namespaces/real Ngunit mayroong kapaki-pakinabang na impormasyon: ang grupo ng developer na "developersgroup1" mula sa departamento ng "department2" ay responsable para sa paglikha ang "tunay" na namespace. Kung kailangan mong magdagdag ng mga bagong pangalan, o talakayin ang mga posibleng salungatan sa kanila, alam namin kung saan pupunta. Minsan ang isang tunay na Internet address na may paglalarawan ng namespace na ito ay ginagamit bilang isang natatanging pangalan para sa isang namespace. Halimbawa, kung ito ay isang malaking kumpanya at ang proyekto nito ay gagamitin ng milyun-milyong tao sa buong mundo. Ngunit hindi ito palaging ginagawa: may talakayan tungkol sa isyung ito sa Stackoverflow . Sa prinsipyo, ang pangangailangan na gumamit ng mga URI bilang mga pangalan para sa mga namespace ay hindi mahigpit: maaari ka lamang gumamit ng mga random na string. Ang pagpipiliang ito ay gagana rin:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Ngunit mayroong isang bilang ng mga pakinabang sa paggamit ng mga URI. Maaari mong basahin ang higit pa tungkol dito .

Mga Pangunahing Pamantayan sa XML

Ang mga pamantayan ng XML ay isang hanay ng mga extension na nagdaragdag ng karagdagang paggana sa mga xml file. Maraming pamantayan ang XML, ngunit titingnan lang natin ang pinakamahalaga at malalaman kung ano ang pinapayagan nilang gawin ng AJAX , isa sa mga pinakasikat na pamantayan ng XML. Pinapayagan ka nitong baguhin ang nilalaman ng isang web page nang hindi ito nire-reload! Mukhang cool? :) Maaari mong subukan ang teknolohiyang ito nang personal dito . XSLT - nagpapahintulot sa iyo na i-convert ang XML na teksto sa iba pang mga format. Halimbawa, gamit ang XSLT, maaari mong baguhin ang XML sa HTML! Ang layunin ng XML, tulad ng nasabi na natin, ay upang ilarawan ang data, hindi upang ipakita ito. Ngunit gamit ang XSLT maaari nating lampasan ang limitasyong ito! Narito ang isang sandbox na may gumaganang halimbawa, kung saan makikita mo mismo kung paano ito gumagana :) XML DOM - nagbibigay-daan sa iyong kumuha, magbago, magdagdag o mag-alis ng mga indibidwal na elemento mula sa isang XML file. Narito ang isang maliit na halimbawa kung paano ito gumagana. Mayroon kaming books.xml file:
<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>
Mayroong dalawang libro sa loob nito. Ang mga aklat ay may elementong tulad ng pamagat - <title>. At dito maaari naming gamitin ang JavaScript upang makuha ang lahat ng mga pamagat ng libro mula sa aming XML file at i-output ang una sa mga ito sa console:
<!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>
Muli, inirerekumenda kong makita kung paano gumagana ang halimbawang ito gamit ang isang sandbox :) DTD (“pagtukoy sa uri ng dokumento”) - nagbibigay-daan sa iyong tukuyin ang isang listahan ng mga pinapayagang elemento para sa ilang entity sa isang XML file. Halimbawa, nagtatrabaho kami sa isang website ng bookstore, at lahat ng mga development team ay sumang-ayon na para sa elemento ng libro, tanging ang pamagat, may-akda, at mga katangian ng taon ang dapat na tukuyin sa mga XML file. Ngunit paano natin mapoprotektahan ang ating sarili mula sa kawalan ng pansin? Napakadaling!
<?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>
Dito ay tinukoy namin ang isang listahan ng mga wastong katangian para sa <book>. Subukang magdagdag ng bagong elemento doon at magkakaroon ka kaagad ng error!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Error! "Hindi pinapayagan ang Element mainhero dito" Marami pang XML na pamantayan. Maaari mong makilala ang bawat isa sa kanila at subukang maghukay ng mas malalim sa code sa website ng WC3 (seksyon na "Mahalagang Mga Pamantayan sa XML"). At sa pangkalahatan, kung kailangan mo ng impormasyon sa XML, mahahanap mo ang halos lahat doon :) Buweno, natapos na ang aming panayam. Oras na para bumalik sa mga gawain! :) See you!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION