JavaRush /Java блогу /Random-KY /Javaдагы XML: бул эмне?

Javaдагы XML: бул эмне?

Группада жарыяланган
Салам! Бүгүн биз XML деп аталган дагы бир маалымат форматы менен таанышабыз. Бул абдан маанилүү тема. Чыныгы Java тиркемелеринде иштегенде, сиз XML менен байланышкан көйгөйлөргө туш болосуз. Бул формат Java иштеп чыгуунун дээрлик бардык жеринде колдонулат (эмне үчүн ылдыйда так билебиз), андыктан мен лекцияны “диагоналдуу” эмес, баарын кылдат түшүнүп, ошол эле учурда кошумча адабияттарды/шилтемелерди окуп чыгууну сунуштайм :) Бул убакыт текке кетпейт. Ошентип, жөнөкөйлөрдөн баштайлы - "эмне" жана "эмне үчүн"!

XML деген эмне?

XML eXtensible Markup Language дегенди билдирет. Сиз белгилөө тилдеринин бири менен мурунтан эле тааныш болушуңуз мүмкүн: веб-баракчаларды түзүү үчүн колдонулган 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 алгач маалыматтарды ыңгайлуу сактоо жана берүү үчүн, анын ичинде Интернет аркылуу да ойлоп табылган. Бул милдетти ийгorктүү чечүүгө мүмкүндүк берген бир катар артыкчылыктарга ээ. Биринчиден, аны адамдар да, компьютерлер да окуу оңой. Бул 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>
Компьютер да бул форматты оңой түшүнөт. Экинчиден, маалыматтар жөнөкөй текст форматында сакталгандыктан, аны бир компьютерден экинчисине өткөрүүдө эч кандай шайкештик маселеси болбойт. XML аткарылуучу code эмес, маалыматтын сүрөттөмө тor экенин түшүнүү маанилүү . XML аркылуу берorштерди сүрөттөп бергенден кийин, сиз бул маалыматтарды жөнөтө/кабыл/иштей турган codeду (мисалы, Java тorнде) жазышыңыз керек.

XML кантип иштейт?

Анын негизги компоненти - тегдер: булар бурчтуу кашаадагы нерселер:
<book>
</book>
Ачуучу жана жабуу тегдери бар. Жабуучунун кошумча белгиси бар - “ /”, муну жогорудагы мисалдан көрүүгө болот. Ар бир ачуу теги тиешелүү жабуу теги болушу керек. Алар файлдагы ар бир элементтин сүрөттөлүшү кайда башталып, кайда аяктаарын көрсөтөт. 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>
Ушундай жол менен биз аталышы англис тorнде жазылганын көрсөтө алабыз. Биздин <price> теги "валюта" атрибутуна ээ.
<price currency="US dollar">150000.00</price>
Ушундай жол менен биз машинанын баасы АКШ долларында экенин көрсөтө алабыз. Ошентип, XML "өзүн-өзү сүрөттөгөн" синтаксиске ээ . Сиз маалыматтарды сүрөттөө үчүн керектүү маалыматты кошо аласыз. Ошондой эле файлдын башына XML versionсын жана маалыматтар жазылган codeдоону көрсөткөн сапты кошо аласыз. Ал " пролог " деп аталат жана мындай көрүнөт:
<?xml version="1.0" encoding="UTF-8"?>
Биз XML versionсын 1.0 жана UTF-8 codeдоосун колдонобуз. Бул зарыл эмес, бирок, мисалы, сиз файлыңызда ар кандай тилдердеги текстти колдонсоңуз, пайдалуу болушу мүмкүн. Биз XML "кеңейтүүчү белгилөө тorн" билдирет деп айттык, бирок "кеңейтүүчү" деген эмнени билдирет? Бул сиздин an objectтериңиздин жана файлдарыңыздын жаңы versionларын түзүү үчүн эң сонун ылайыктуу дегенди билдирет. Мисалы, биз автосалонубуздун мотоциклдерди да сата башташын каалайбыз! Ошол эле учурда, программада биз <carstore> эки versionсын - эскисин (мотоциклсиз) да, жаңысын да колдошубуз керек. Бул жерде биздин эски 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 - адамдарга жана компьютерлерге ыңгайлуу формада маалыматты сактоо жана берүү үчүн . Бул формат бул маалыматтарды кантип көрсөтүү керектиги боюнча эч кандай көрсөтмөлөрдү камтыbyte: бул программанын codeунан көз каранды. Экинчиден, алардын негизги техникалык айырмасы бар. HTML тэгдери алдын ала аныкталган. Башкача айтканда, рубрика түзүү үчүн (мисалы, беттин башындагы чоң жазуу) HTMLде <h1></h1> тегдери гана колдонулат (кичинекей аталыштар үчүн - <h2></h2>, < h3></h3>). Ар кандай аталыштагы тегдерди колдонуп, HTMLде рубрикаларды түзө албайсыз. XML алдын ала аныкталган тегдерди колдонбойт. Tagдерге каалаган аттарыңызды бере аласыз - <header>, <title>, <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 дареги боюнча сайт жок Бирок пайдалуу маалымат бар: "department2" бөлүмүнөн "developersgroup1" иштеп чыгуучу тобу түзүүгө жооптуу. "чыныгы" аттар мейкиндиги. Эгер сизге жаңы ысымдарды кошуу керек болсо, же алар менен мүмкүн болгон чыр-чатактарды талкуулоо керек болсо, биз кайда кайрылууну билебиз. Кээде бул аттар мейкиндигинин сүрөттөлүшү менен чыныгы Интернет дареги аттар мейкиндигинин уникалдуу аталышы катары колдонулат. Мисалы, ал чоң компания болсо жана анын долбоору дүйнө жүзү боюнча миллиондогон адамдар тарабынан колдонула турган болсо. Бирок бул дайыма эле боло бербейт: Stackoverflow боюнча бул маселени талкуулоо бар . Негизи, URIларды аттар мейкиндигине ат катары колдонуу талабы катуу эмес: жөн гана кокус саптарды колдоно аласыз. Бул параметр да иштейт:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Бирок URI колдонуунун бир катар артыкчылыктары бар. Бул тууралуу кененирээк бул жерден окуй аласыз .

Негизги XML стандарттары

XML стандарттары - бул xml файлдарына кошумча функцияларды кошкон кеңейтүүлөрдүн жыйындысы. XMLде көптөгөн стандарттар бар, бирок биз жөн гана эң маанилүүлөрүн карап чыгабыз жана алар эң белгилүү XML стандарттарынын бири болгон AJAXке эмне кылууга уруксат берерин билебиз. Бул веб-баракчанын мазмунун кайра жүктөбөй эле өзгөртүүгө мүмкүндүк берет! Сонун угулат? :) Сиз бул жерде бул технологияны сынап көрүүгө болот . 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>
Анын ичинде эки китеп бар. Китептердин аталышы сыяктуу элементи бар - <аталышы>. Жана бул жерде биз XML файлыбыздан бардык китеп аталыштарын алуу жана алардын биринчисин консолго чыгаруу үчүн JavaScript колдоно алабыз:
<!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 (“documentтин түрүн аныктоо”) – XML файлындагы кээ бир an object үчүн уруксат берилген элементтердин тизмесин аныктоого мүмкүндүк берет. Мисалы, биз китеп дүкөнүнүн веб-сайтында иштеп жатабыз жана бардык иштеп чыгуу топтору китеп элементи үчүн 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