JavaRush /Блоги Java /Random-TG /XML дар Java: Ин чист?

XML дар Java: Ин чист?

Дар гурӯҳ нашр шудааст
Салом! Имрӯз мо бо формати дигари додаҳо бо номи XML шинос мешавем. Ин як мавзӯи хеле муҳим аст. Ҳангоми кор дар барномаҳои воқеии Java, шумо қариб албатта бо мушкилоти марбут ба XML дучор мешавед. Ин формат тақрибан дар ҳама ҷо дар таҳияи Java истифода мешавад (чаро маҳз дар зер мефаҳмем), аз ин рӯ ман тавсия медиҳам, ки лексияро на “диагоналӣ” хонед, балки ҳама чизро бодиққат фаҳмед ва ҳамзамон адабиёти иловагӣ/пайвандҳоро омӯзед :) вакт бешубха бехуда намегузарад. Пас, биёед бо соддатаринҳо оғоз кунем - "чӣ" ва "чаро"!

XML чист?

XML барои забони васеъшавандаи аломатгузорӣ мебошад. Шояд шумо аллакай бо яке аз забонҳои аломатгузорӣ ошно бошед: шумо дар бораи HTML шунидаед, ки барои сохтани саҳифаҳои веб истифода мешавад :) XML чист - 1HTML ва XML ҳатто аз рӯи намуди зоҳирӣ монанданд:
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>
Ба ибораи дигар, XML забонест барои тавсифи додаҳо.

Чаро XML лозим аст?

XML дар ибтидо барои қулайтар нигоҳдорӣ ва интиқоли маълумот, аз ҷумла тавассути Интернет ихтироъ шуда буд. Вай як катор афзалиятхое дорад, ки ба вай барои бомуваффакият аз ухдаи ин вазифа имконият медиханд. Аввалан, онро ҳам одамон ва ҳам компютер хондан осон аст. Ман фикр мекунам, ки шумо метавонед ба осонӣ фаҳмед, ки ин файли xml чӣ тавсиф мекунад:
<?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>
Компютер инчунин ин форматро ба осонӣ дарк мекунад. Сониян, азбаски маълумот дар формати оддии матн нигоҳ дошта мешавад, ҳангоми интиқоли он аз як компютер ба компютери дигар ягон мушкorи мутобиқат ба вуҷуд намеояд. Фаҳмидани он муҳим аст, ки XML рамзи иҷрошаванда нест, балки забони тавсифи додаҳо мебошад . Пас аз тавсифи маълумот бо истифода аз XML, шумо бояд code нависед (масалан, дар Java), ки метавонад ин маълумотро ирсол/қабул/коркард кунад.

XML чӣ гуна кор мекунад?

Ҷузъи асосии он тегҳо мебошад: инҳо чизҳое ҳастанд, ки дар қавсҳои кунҷӣ ҳастанд:
<book>
</book>
Tagҳои кушода ва пӯшида мавҷуданд. Дар пӯшида аломати иловагӣ дорад - “ /”, инро дар мисоли боло дидан мумкин аст. Ҳар як теги кушода бояд теги пӯшидаи мувофиқ дошта бошад. Онҳо нишон медиҳанд, ки тавсифи ҳар як унсури файл дар куҷо оғоз ва анҷом меёбад. Tagҳо метавонанд ҷойгир карда шаванд! Дар мисоли китоби мо теги <book> 3 зертег дорад - <title> , <author> ва <year> . Ин бо як сатҳ маҳдуд намешавад: зертегҳо метавонанд зертегҳои худро дошта бошанд ва ғайра. Ин тарҳ дарахти тег номида мешавад. Биёед бо истифода аз мисоли файли XML бо тавсифи фурӯшгоҳи мошин дарахтро бубинем:
<?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>
Дар ин ҷо мо теги сатҳи боло дорем - <carstore> . Онро "реша" - теги реша низ меноманд. <carstore> дорои як теги кӯдакона, <car>. <мошин>, дар навбати худ, инчунин 3 тегҳои кӯдаконаи худро дорад - <модел>, <сол> ва <нарх>. Ҳар як тег метавонад атрибутҳо дошта бошад - маълумоти иловагии муҳим. Дар мисоли мо теги <model> дорои атрибути "lang" - забонест, ки номи модел дар он навишта шудааст:
<model lang="en">Scania R 770</model>
Бо ин роҳ мо метавонем нишон диҳем, ки сарлавҳа ба забони англисӣ навишта шудааст. Tagи <price>-и мо дорои атрибути "валюта" мебошад.
<price currency="US dollar">150000.00</price>
Бо ин роҳ мо метавонем нишон диҳем, ки нархи мошин бо доллари ИМА аст. Ҳамин тариқ, XML дорои синтаксиси "худ тавсифкунанда" мебошад . Шумо метавонед ҳама гуна маълумотеро, ки барои тавсифи маълумот лозим аст, илова кунед. Шумо инчунин метавонед дар аввали файл сатреро илова кунед, ки versionи XML ва рамзгузориро, ки дар он маълумот навишта шудааст, нишон медиҳад. Он " пролог " номида мешавад ва чунин менамояд:
<?xml version="1.0" encoding="UTF-8"?>
Мо versionи XML 1.0 ва рамзгузории UTF-8-ро истифода мебарем. Ин шарт нест, аммо он метавонад муфид бошад, агар масалан, шумо дар файли худ матнро бо забонҳои гуногун истифода баред. Мо қайд кардем, ки XML маънои "забони тамғагузории васеъшаванда" -ро дорад, аммо "васеъшаванда" чӣ маъно дорад? Ин маънои онро дорад, ки он барои эҷоди versionҳои нави an objectҳо ва файлҳои шумо комилан мувофиқ аст. Масалан, мо мехоҳем, ки толори автомобorи мо низ ба фурӯши мотоциклҳо шурӯъ кунад! Дар баробари ин, дар барнома мо бояд ҳарду versionи <carstore> - ҳам кӯҳна (бе мотоцикл) ва навро дастгирӣ кунем. Ин аст versionи кӯҳнаи мо:
<?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>
Ва ин аст нав, васеъшуда:
<?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>
Ҳамин тавр, мо ба осонӣ ва содда тавсифи мотосиклҳоро ба файли худ илова кардем :) Ҳамзамон, ба мо комилан лозим нест, ки ҳамон тегҳои кӯдаконаро барои мотосиклҳо мисли мошинҳо муқаррар кунем. Лутфан таваҷҷӯҳ намоед, ки мотосиклҳо, бар хилофи мошинҳо, дорои унсури <соҳиб> - соҳиби. Ин ба компютер (ё шахсе) аз хондани маълумот монеъ намешавад.

Тафовут дар байни XML ва HTML

Мо аллакай гуфта будем, ки XML ва HTML аз ҷиҳати намуди зоҳирӣ ба ҳам монанданд. Аз ин рӯ, донистани он ки онҳо чӣ гуна фарқ мекунанд, хеле муҳим аст. Аввалан, онҳо барои мақсадҳои гуногун истифода мешаванд. HTML - барои қайд кардани саҳифаҳои веб. Масалан, агар ба шумо лозим ояд, ки вебсайт эҷод кунед, бо истифода аз HTML шумо метавонед инҳоро муайян кунед: “Меню бояд дар кунҷи рости боло бошад. Он бояд фалон тугма дошта бошад». Ба ибораи дигар, ҳадафи HTML намоиш додани маълумот аст. XML - барои нигоҳдорӣ ва интиқоли иттилоот дар шакле, ки барои одамон ва компютерҳо мувофиқ аст. Ин формат ягон дастур дар бораи чӣ гуна нишон додани ин маълумотро дар бар намегирад: он аз codeи худи барнома вобаста аст. Дуюм, онҳо фарқияти асосии техникӣ доранд. Tagҳои HTML пешакӣ муайян карда мешаванд. Ба ибораи дигар, барои сохтани сарлавҳа (масалан, навиштаҷоти калон дар аввали саҳифа) дар HTML танҳо тегҳои <h1></h1> истифода мешаванд (барои сарлавҳаҳои хурдтар - <h2></h2>, < h3></h3>). Шумо наметавонед дар HTML бо истифода аз тегҳои дорои унвонҳои гуногун сарлавҳаҳо эҷод кунед. XML барчаспҳои пешакӣ муайяншударо истифода намебарад. Шумо метавонед ба барчаспҳои дилхоҳатон номҳои дилхоҳ диҳед - <сарлавҳа>, <сарлавҳа>, <idontknow2121>.

Ҳалли низоъ

Озодие, ки XML медиҳад, метавонад ба баъзе мушкилот оварда расонад. Масалан, як an object (масалан, мошин) метавонад аз ҷониби барнома барои мақсадҳои гуногун истифода шавад. Масалан, мо файли XML дорем, ки мошинҳоро тавсиф мекунад. Аммо барномасозони мо пешакӣ байни худ розӣ нашуданд. Ва ҳоло, ба ғайр аз маълумот аз мошинҳои воқеӣ, xml мо инчунин маълумотро аз моделҳои бозичаҳо дар бар мегирад! Илова бар ин, онҳо дорои хосиятҳои якхела мебошанд. Барномаи мо файли XML-и зеринро мегирад. Чӣ тавр мо метавонем мошини ҳақиқиро аз модели бозича фарқ кунем?
<?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>
Дар ин ҷо префиксҳо ва фазои номҳо ба мо кӯмак хоҳанд кард. Барои ҷудо кардани мошинҳои бозича аз мошинҳои воқеӣ дар барномаи мо (ва дар маҷмӯъ, ҳама чизҳои бозича аз прототипҳои воқеии онҳо) мо ду префиксро ҷорӣ мекунем - "воқеӣ" ва "бозича".
<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>
Акнун барномаи мо метавонад байни an objectҳоро фарқ кунад! Ҳама чиз бо префикси бозича ҳамчун бозича тасниф карда мешавад :) Аммо, мо ҳанӯз ба итмом нарасидем. Барои истифодаи префиксҳо, мо бояд ҳар яки онҳоро ҳамчун фазои ном сабт кунем. Хуб, воқеан, "регистр" калимаи қавӣ аст :) Ба шумо танҳо лозим аст, ки барои ҳар яки онҳо номи беназире пайдо кунед. Мисли синфҳо: синф дорои номи кӯтоҳ ( Cat) ва номи пурра бо ҳамаи бастаҳо ( zoo.animals.Cat) Барои эҷоди фазои номҳои беназир одатан URI истифода мешавад . Баъзан суроғаи интернетӣ дар ин ҷо иваз карда мешавад, ки дар он вазифаҳо ва ҳадафҳои ин фазои ном ба таври муфассал тавсиф карда мешаванд. Аммо ин набояд суроғаи дурусти интернет бошад. Аксар вақт, лоиҳаҳо танҳо сатрҳои ба URI монандро истифода мебаранд, ки барои пайгирии иерархияи фазоҳои номҳо кӯмак мекунанд. Инак як мисол:
<?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>
Албатта, дар Интернет ягон сайт дар суроғаи http://testproject.developersgroup1.companyname/department2/namespaces/real вуҷуд надорад Аммо маълумоти муфид вуҷуд дорад: гурӯҳи таҳиягарони "developersgroup1" аз шӯъбаи "department2" барои эҷоди он масъул аст. фазои номи "воқеӣ". Агар ба шумо лозим ояд, ки номҳои нав илова кунед ё ихтилофоти эҳтимолиро бо онҳо муҳокима кунед, мо медонем, ки ба куҷо муроҷиат кунем. Баъзан суроғаи воқеии интернетӣ бо тавсифи ин фазои ном ҳамчун номи беназир барои фазои ном истифода мешавад. Масалан, агар он як ширкати калон бошад ва лоиҳаи он аз ҷониби миллионҳо одамон дар саросари ҷаҳон истифода мешавад. Аммо ин на ҳамеша анҷом дода мешавад: муҳокимаи ин масъала дар Stackoverflow вуҷуд дорад . Аслан, талаботи истифодаи URI-ҳо ҳамчун номҳо барои фазоҳои номҳо сахт нест: шумо метавонед танҳо сатрҳои тасодуфиро истифода баред. Ин вариант низ кор хоҳад кард:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Аммо як қатор бартариҳои истифодаи URI вуҷуд дорад. Шумо метавонед бештар дар бораи ин дар ин ҷо бихонед .

Стандартҳои асосии XML

Стандартҳои XML маҷмӯи васеъшавӣ мебошанд, ки ба файлҳои xml функсияҳои иловагӣ илова мекунанд. XML стандартҳои зиёде дорад, аммо мо танҳо муҳимтаринҳоро дида мебароем ва мефаҳмем, ки онҳо ба AJAX , яке аз маъмултарин стандартҳои XML имкон медиҳанд, ки чӣ кор кунанд. Он ба шумо имкон медиҳад, ки мундариҷаи саҳифаи вебро бидуни боркунии он тағир диҳед! Хуб садо медиҳад? :) Шумо метавонед ин технологияро шахсан дар ин ҷо санҷед . XSLT - ба шумо имкон медиҳад, ки матни XML-ро ба форматҳои дигар табдил диҳед. Масалан, бо истифода аз XSLT, шумо метавонед XML-ро ба HTML табдил диҳед! Мақсади XML, тавре ки мо аллакай гуфта будем, тавсифи маълумот аст, на намоиш додани он. Аммо бо истифода аз XSLT мо метавонем ин маҳдудиятро убур кунем! Ин аст қуттии қум бо мисоли корӣ, ки дар он шумо метавонед худатон бубинед, ки он чӣ гуна кор мекунад :) XML DOM - ба шумо имкон медиҳад, ки унсурҳои инфиродӣ аз файли XML гиред, тағир диҳед, илова кунед ё нест кунед. Ин як мисоли хурди он аст, ки чӣ тавр кор мекунад. Мо файли 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>
Дар он ду китоб мавҷуд аст. Китобҳо чунин унсур доранд, ба монанди унвон - <унвон>. Ва дар ин ҷо мо метавонем JavaScript-ро истифода барем, то ҳамаи унвонҳои китобро аз файли XML-и худ гирем ва аввалини онҳоро ба консол бароварем:
<!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 ("таърифи навъи ҳуҷҷат") - ба шумо имкон медиҳад, ки рӯйхати унсурҳои иҷозатдодашударо барои баъзе an objectҳо дар файли XML муайян кунед. Масалан, мо дар як вебсайти дӯкони китоб кор карда истодаем ва ҳамаи гурӯҳҳои таҳиякунанда ба мувофиқа расиданд, ки барои унсури китоб бояд дар файлҳои XML танҳо унвон, муаллиф ва атрибутҳои сол нишон дода шаванд. Аммо чӣ гуна мо худро аз беэҳтиётӣ муҳофизат карда метавонем? Хеле осон!
<?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>
Дар ин ҷо мо рӯйхати атрибутҳои дурустро барои <китоб> муайян кардем. Кӯшиш кунед, ки дар он ҷо як унсури нав илова кунед ва шумо фавран хато хоҳед гирифт!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Хатогӣ! "Дар ин ҷо қаҳрамони асосӣ иҷозат дода намешавад" Бисёр стандартҳои дигари XML мавҷуданд. Шумо метавонед бо ҳар яки онҳо шинос шавед ва кӯшиш кунед, ки codeро дар вебсайти WC3 амиқтар кобед (қисмати "Стандартҳои муҳими XML"). Ва умуман, агар ба шумо дар бораи XML маълумот лозим бошад, шумо метавонед қариб ҳама чизро дар он ҷо пайдо кунед :) Хуб, лексияи мо ба охир расид. Вақти он расидааст, ки ба вазифаҳо баргардем! :) То дидор!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION