John Squirrels
Antas
San Francisco

XML sa Java

Nai-publish sa grupo
Hi! Ngayon ay magpapakilala kami ng 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 gawaing nauugnay sa XML. Sa pagpapaunlad ng Java, ang format na ito ay ginagamit halos sa pangkalahatan (aalamin natin kung bakit sa ibaba), kaya't inirerekumenda ko na huwag mong mababaw na suriin ang araling ito, sa halip ay magkaroon ng masusing pag-unawa sa lahat at pag-aralan din ang mga karagdagang literatura/link :) Ito tiyak na hindi mag-aaksaya ng oras. Kaya, magsimula tayo sa madaling bagay: ang "ano" at ang "bakit"!

Ano ang Java XML?

Ang XML ay kumakatawan sa eXtensible Markup Language. Maaaring pamilyar ka na sa isang markup language — narinig mo na ba ang HTML, na ginagamit upang lumikha ng mga web page :) Ang Ano ang XML?  - 1HTML at XML ay may parehong 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 mo ng XML?

Ang XML ay orihinal na naimbento upang mas maginhawang mag-imbak at magpadala ng data, kabilang ang sa pamamagitan ng Internet. Ito ay may ilang mga pakinabang na makakatulong sa iyong makamit ito. Una, ito ay madaling basahin ng isang tao at isang 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 isang computer ang format na ito. Pangalawa, dahil nakaimbak ang data bilang plain text, walang magiging problema sa compatibility kapag inilipat namin ito mula sa isang computer patungo sa isa pa. Mahalagang maunawaan na ang XML ay hindi maipapatupad na code — ito ay isang wika sa 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 nakabalangkas ang XML?

Ang pangunahing bahagi ay mga tag: ito ang mga bagay sa mga anggulong bracket:
<book>
</book>
May mga opening tag at closing tag. Ang pansarang tag ay may karagdagang simbolo (" / "), gaya ng makikita sa halimbawa sa itaas. Ang bawat pambungad na tag ay dapat na may pansarang tag. Ipinapakita ng mga ito kung saan nagsisimula at nagtatapos ang paglalarawan ng bawat elemento sa file. Maaaring ilagay ang mga tag! Sa aming halimbawa ng aklat, ang tag na <book> ay may 3 nested na tag: <title>, <author>, at <year>. Hindi ito limitado sa isang antas ng nesting: maaaring magkaroon ng sariling nested tag ang mga nested tag, atbp. Ang istrukturang ito ay tinatawag na tag tree. Tingnan natin ang punong ito gamit ang isang sample na XML file na naglalarawan sa 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 mayroon kaming top-level na tag: <carstore>. Tinatawag din itong root element. Ang <carstore> ay may isang child tag: <car>. Ang <car>, sa turn, ay mayroon ding 3 child tag: <model>, <year> at <price>. Ang bawat tag ay maaaring magkaroon ng mga katangian, na naglalaman ng karagdagang mahalagang impormasyon. Sa aming halimbawa, ang tag na <model> ay may katangiang "lang", na nagsasaad ng wikang ginamit upang itala ang pangalan ng modelo:
<model lang="en">Scania R 770</model>
Dito ipinapahiwatig namin na ang pangalan ay nakasulat sa Ingles. Ang aming tag na <price> ay may katangiang "currency."
<price currency="US dollar">150000.00</price>
Dito ipinapahiwatig namin na ang presyo ng kotse ay ibinibigay sa US dollars. Kaya, ang XML ay may "self-describing" syntax. Maaari kang magdagdag ng anumang impormasyon na kailangan mo upang ilarawan ang data. Bilang karagdagan, sa tuktok ng file, maaari kang magdagdag ng isang linya na nagpapahiwatig ng bersyon ng XML at ang pag-encode na ginamit upang isulat 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 magamit kung, halimbawa, ang iyong file ay gumagamit ng teksto sa iba't ibang wika. Nabanggit namin na ang XML ay nangangahulugang "eXtensible Markup Language", ngunit ano ang ibig sabihin ng "extensible"? Nangangahulugan ito na perpekto ito para sa paglikha ng mga bagong bersyon ng iyong mga bagay at file. Halimbawa, ipagpalagay na gusto din naming magsimulang magbenta ng mga motorsiklo sa aming dealership ng kotse! Sabi nga, kailangan nating suportahan ng ating programa ang parehong bersyon ng <carstore>: 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 bagong pinalawak:
<?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>
Ganyan kadali at kasimple ang magdagdag ng paglalarawan ng mga motorsiklo sa aming file :) Higit pa rito, talagang hindi namin kailangang magkaroon ng parehong mga child tag para sa mga motorsiklo gaya ng para sa mga kotse. Pakitandaan na ang mga motorsiklo, hindi tulad ng mga kotse, ay may elementong <owner>. Hindi nito pinipigilan ang computer (o tao) na basahin ang data.

Mga pagkakaiba sa pagitan ng XML at HTML

Nasabi na namin na ang XML at HTML ay halos magkapareho sa hitsura. Dahil dito, napakahalagang malaman kung paano sila naiiba. Una, ginagamit ang mga ito para sa iba't ibang layunin. Ang HTML ay para sa pagmamarka ng mga web page. Halimbawa, habang gumagawa ng isang website, maaari mong gamitin ang HTML upang tukuyin ang: "Ang menu ay dapat nasa kanang sulok sa itaas. Dapat itong may ganito at ganoong mga pindutan". Sa madaling salita, ang trabaho ng HTML ay magpakita ng data. Ang XML ay 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 indikasyon kung paano dapat ipakita ang data na ito: depende iyon sa code ng program na nagbabasa nito. Pangalawa, may malaking pagkakaiba sa teknikal. Ang mga HTML tag ay paunang natukoy. Sa madaling salita, ang paggawa ng HTML header (halimbawa, isang malaking caption sa itaas ng page) ay gumagamit lamang ng <h1></h1> mga tag (<h2></h2> at <h3></h3> ay ginagamit para sa mas maliliit na header). Hindi ka makakagawa ng mga HTML header gamit ang iba pang mga tag. 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 maaaring humantong sa ilang mga problema. Halimbawa, ang isa at 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 kotse. Gayunpaman, hindi naabot ng aming mga programmer ang isang naunang kasunduan sa kanilang mga sarili. At ngayon, bilang karagdagan sa data tungkol sa mga totoong sasakyan, maaari kaming makakita ng data tungkol sa mga laruang sasakyan sa aming XML! Bukod dito, mayroon silang parehong mga katangian. Sabihin nating nagbabasa ang aming programa sa naturang XML file. Paano natin nakikilala ang isang tunay na kotse mula sa isang laruang 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">100.00</price>
   </car>
</carstore>
Dito makakatulong sa amin ang mga prefix at namespace. Upang makilala ang mga laruang kotse mula sa mga tunay sa aming programa (at sa katunayan ang anumang mga laruan mula sa kanilang mga tunay na katapat), 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 ay magagawa na ng aming programa na makilala ang iba't ibang entity! Lahat ng may prefix ng laruan ay ituturing na mga laruan :) Gayunpaman, hindi pa tayo tapos. Upang gumamit ng mga prefix, kailangan nating irehistro ang bawat isa sa kanila bilang isang namespace. Sa totoo lang, ang "register" ay isang malakas na salita :) Kailangan lang nating 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 ganap na kwalipikadong pangalan na kinabibilangan ng lahat ng mga pakete ( zoo.animals.Cat). Karaniwang ginagamit ang URI upang lumikha ng natatanging pangalan ng namespace. Minsan ito ay ginagawa gamit ang isang Internet address, kung saan inilalarawan ang mga function ng namespace na ito. 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 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 website sa "http://testproject.developersgroup1.companyname/department2/namespaces/real" Ngunit naglalaman ang string na ito ng kapaki-pakinabang na impormasyon: ang mga developer ng Group 1 sa Department 2 ay may pananagutan sa paglikha ng "real" namespace . Kung kailangan naming magpakilala ng mga bagong pangalan o talakayin ang mga posibleng salungatan, malalaman namin kung saan kami tutungo. Minsan ang mga developer ay gumagamit ng isang tunay na mapaglarawang web address bilang isang natatanging pangalan ng namespace. Halimbawa, maaaring ito ang kaso para sa isang malaking kumpanya na ang proyekto ay gagamitin ng milyun-milyong tao sa buong mundo. Ngunit tiyak na hindi ito palaging ginagawa: Ang Stack Overflow ay may talakayan sa isyung ito. Sa pangkalahatan, walang mahigpit na pangangailangan na gumamit ng mga URI bilang mga pangalan ng namespace: maaari ka ring gumamit ng mga random na string. Ang pagpipiliang ito ay gagana rin:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Iyon ay sinabi, ang paggamit ng isang URI ay may ilang mga pakinabang. Maaari mong basahin ang higit pa tungkol dito dito mismo .

Mga pangunahing pamantayan ng 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 na ginagawa nilang posible ang AJAX, na isa sa mga pinakatanyag na pamantayan ng XML. Hinahayaan ka nitong baguhin ang mga nilalaman ng isang web page nang hindi ito nire-reload! Hinahayaan ka ng XSLT na i-convert ang XML text sa ibang mga format. Halimbawa, maaari mong gamitin ang XSLT upang i-convert ang XML sa HTML! Tulad ng sinabi namin, ang layunin ng XML ay upang ilarawan ang data, hindi upang ipakita ito. Ngunit sa XSLT malalagpasan natin ang limitasyong ito! Hinahayaan ka ng XML DOM na kunin, baguhin, idagdag, o tanggalin ang 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>
Mayroon itong dalawang libro. Ang mga aklat ay may elementong <title>. Dito maaari naming gamitin ang JavaScript upang makuha ang lahat ng mga pamagat ng aklat mula sa aming XML file at i-print ang una 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>
Hinahayaan ka ng DTD ("kahulugan ng uri ng dokumento") na tukuyin ang isang listahan ng mga pinapayagang elemento para sa isang entity sa isang XML file. Halimbawa, ipagpalagay na nagtatrabaho kami sa isang website ng bookstore at ang lahat ng mga development team ay sumasang-ayon na ang pamagat, may-akda, at mga katangian ng taon lamang ang dapat na tukuyin para sa mga elemento ng aklat sa mga XML file. Ngunit paano natin pinoprotektahan ang ating sarili mula sa kawalang-ingat? 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 gawing pamilyar ang iyong sarili sa bawat isa sa kanila at subukang maghukay ng mas malalim sa code. Gayon pa man, kung kailangan mo ng impormasyon sa XML, mahahanap mo ang halos lahat doon :) At kasama nito, ang aming aralin ay nagtatapos. Oras na para bumalik sa mga gawain! :) Hanggang sa muli!
Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito