JavaRush /Java блогы /Random-KK /Java тіліндегі XML: бұл не?

Java тіліндегі XML: бұл не?

Топта жарияланған
Сәлеметсіз бе! Бүгін біз 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>
Компьютер де бұл форматты оңай түсінеді. Екіншіден, деректер қарапайым мәтіндік пішімде сақталатындықтан, оны бір компьютерден екіншісіне тасымалдау кезінде үйлесімділік мәселесі болмайды. XML орындалатын code емес, деректерді сипаттау тілі екенін түсіну маңызды . XML көмегімен деректерді сипаттағаннан кейін осы деректерді жібере/қабылдайтын/өңдей алатын codeты (мысалы, Java тілінде) жазуыңыз қажет.

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>. <car>, өз кезегінде, сонымен қатар өзінің 3 еншілес тегтері бар - <model>, <year> және <price>. Әрбір тегте атрибуттар болуы мүмкін - қосымша маңызды ақпарат. Біздің мысалда <model> тегінде “lang” атрибуты бар – модель атауы жазылған тіл:
<model lang="en">Scania R 770</model>
Осылайша тақырыптың ағылшын тілінде жазылғанын көрсете аламыз. Біздің <price> тегінде «валюта» атрибуты бар.
<price currency="US dollar">150000.00</price>
Осылайша біз автомобиль бағасының АҚШ долларында екенін көрсете аламыз. Осылайша, XML-де «өзін-өзі сипаттайтын» синтаксис бар . Деректерді сипаттау үшін қажет кез келген ақпаратты қосуға болады. Сондай-ақ, файлдың басына XML нұсқасын және деректер жазылған codeтауды көрсететін жолды қосуға болады. Ол « пролог » деп аталады және келесідей көрінеді:
<?xml version="1.0" encoding="UTF-8"?>
Біз XML 1.0 нұсқасын және UTF-8 codeтауын қолданамыз. Бұл қажет емес, бірақ, мысалы, файлыңызда әртүрлі тілдердегі мәтінді пайдалансаңыз, пайдалы болуы мүмкін. XML «кеңейтілетін белгілеу тілі» дегенді білдіретінін айттық, бірақ «кеңейтілетін» нені білдіреді? Бұл сіздің нысандарыңыз бен файлдарыңыздың жаңа нұсқаларын жасау үшін өте қолайлы екенін білдіреді. Мысалы, біз автосалонымыздың да мотоциклдерді сата бастағанын қалаймыз! Сонымен бірге, бағдарламада біз <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>
</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ына байланысты. Екіншіден, олардың негізгі техникалық айырмашылығы бар. HTML тегтері алдын ала анықталған. Басқаша айтқанда, тақырып құру үшін (мысалы, беттің басындағы үлкен жазу) HTML тілінде тек <h1></h1> тегтері қолданылады (кішірек тақырыптар үшін - <h2></h2>, < h3></h3>). Сіз әртүрлі тақырыптары бар тегтерді пайдаланып HTML тілінде тақырыптар жасай алмайсыз. XML алдын ала анықталған тегтерді пайдаланбайды. Tagтерге өзіңіз қалаған атауларды бере аласыз - <header>, <title>, <idontknow2121>.

Қақтығысты шешу

XML қамтамасыз ететін еркіндік кейбір мәселелерге әкелуі мүмкін. Мысалы, бір нысанды (мысалы, автокөлікті) бағдарлама әртүрлі мақсаттарда пайдалана алады. Мысалы, бізде машиналарды сипаттайтын 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>
Енді біздің бағдарлама нысандарды ажырата алады! Ойыншық префиксі бар кез келген нәрсе ойыншықтар ретінде жіктеледі :) Дегенмен, біз әлі аяқталған жоқпыз. Префикстерді пайдалану үшін олардың әрқайсысын аттар кеңістігі ретінде тіркеуіміз керек. Ал, шын мәнінде, «тіркелу» күшті сөз :) Тек олардың әрқайсысына бірегей атау ойлап табу керек. Бұл сыныптардағы сияқты: сыныптың қысқа аты ( 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 мекен-жайы бойынша сайт жоқ . Бірақ пайдалы ақпарат бар: құруға «департамент2» бөлімінің «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 («құжат түрінің анықтамасы») - 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