JavaRush /Java Blogu /Random-AZ /Java-da XML: bu nədir?

Java-da XML: bu nədir?

Qrupda dərc edilmişdir
Salam! Bu gün biz XML adlı başqa bir məlumat formatı ilə tanış olacağıq. Bu çox vacib mövzudur. Həqiqi Java proqramları üzərində işləyərkən, demək olar ki, XML ilə bağlı problemlərlə qarşılaşacaqsınız. Bu format Java inkişafında demək olar ki, hər yerdə istifadə olunur (biz bunun səbəbini aşağıda öyrənəcəyik), ona görə də sizə mühazirəni “diaqonal” deyil, hər şeyi hərtərəfli başa düşməyi və eyni zamanda əlavə ədəbiyyatı/linkləri öyrənməyi tövsiyə edirəm :) Bu vaxt mütləq boşa getməyəcək. Beləliklə, sadə olanlardan başlayaq - "nə" və "niyə"!

XML nədir?

XML genişlənən işarələmə dilini ifadə edir. Siz artıq işarələmə dillərindən biri ilə tanış ola bilərsiniz: veb səhifələr yaratmaq üçün istifadə olunan HTML haqqında eşitmisiniz :) XML nədir - 1HTML və XML hətta görünüşcə oxşardır:
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>
Başqa sözlə, XML verilənləri təsvir etmək üçün bir dildir.

Niyə XML lazımdır?

XML əvvəlcə məlumatların, o cümlədən İnternet üzərindən daha rahat saxlanması və ötürülməsi üçün icad edilmişdir. Bu vəzifənin öhdəsindən uğurla gəlməyə imkan verən bir sıra üstünlüklərə malikdir. Birincisi, həm insanlar, həm də kompüterlər tərəfindən asanlıqla oxunur. Düşünürəm ki, bu xml faylının nəyi təsvir etdiyini asanlıqla başa düşə bilərsiniz:
<?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>
Kompüter də bu formatı asanlıqla başa düşür. İkincisi, verilənlər sadə mətn formatında saxlandığından, onu bir kompüterdən digərinə köçürərkən heç bir uyğunluq problemi olmayacaq. XML-in icra edilə bilən kod deyil, verilənlərin təsviri dili olduğunu başa düşmək vacibdir . XML-dən istifadə edərək məlumatları təsvir etdikdən sonra bu məlumatları göndərə/qəbul edə/emal edə bilən kod yazmalısınız (məsələn, Java-da).

XML necə işləyir?

Onun əsas komponenti etiketlərdir: bunlar bucaqlı mötərizədə olan şeylərdir:
<book>
</book>
Açılış və bağlanma etiketləri var. Bağlamanın əlavə simvolu var - “ /”, bunu yuxarıdakı nümunədə görmək olar. Hər bir açılış etiketi müvafiq bağlama etiketinə malik olmalıdır. Onlar fayldakı hər bir elementin təsvirinin harada başladığını və bitdiyini göstərir. Teqlər yuvalana bilər! Kitab nümunəmizdə <book> teqinin 3 alt teqi var - <title> , <author><year> . Bu, bir səviyyə ilə məhdudlaşmır: alt etiketlərin öz alt etiketləri ola bilər və s. Bu dizayn teq ağacı adlanır. Bir avtomobil satıcısının təsviri ilə XML faylı nümunəsindən istifadə edərək ağaca baxaq:
<?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>
Burada yüksək səviyyəli etiketimiz var - <carstore> . Buna "kök" - kök etiketi də deyilir. <carstore>-un bir uşaq etiketi var, <car>. <car> da öz növbəsində 3 uşaq teqinə malikdir - <model>, <year> və <price>. Hər bir etiketin atributları ola bilər - əlavə vacib məlumatlar. Bizim nümunəmizdə <model> teqinin “lang” atributu var - modelin adının yazıldığı dil:
<model lang="en">Scania R 770</model>
Bu yolla başlığın ingiliscə yazıldığını göstərə bilərik. Bizim <price> teqimiz "valyuta" atributuna malikdir.
<price currency="US dollar">150000.00</price>
Bu yolla avtomobilin qiymətinin ABŞ dollarında olduğunu göstərə bilərik. Beləliklə, XML-in "özünü təsvir edən" sintaksisi var . Verilənləri təsvir etmək üçün lazım olan hər hansı məlumatı əlavə edə bilərsiniz. Siz həmçinin faylın əvvəlinə XML versiyasını və verilənlərin yazıldığı kodlaşdırmanı göstərən sətir əlavə edə bilərsiniz. Bu " proloq " adlanır və belə görünür:
<?xml version="1.0" encoding="UTF-8"?>
Biz XML versiyası 1.0 və UTF-8 kodlaşdırmasından istifadə edirik. Bu lazım deyil, lakin, məsələn, faylınızda müxtəlif dillərdə mətn istifadə etsəniz, faydalı ola bilər. Qeyd etdik ki, XML “genişlənən işarələmə dili” deməkdir, lakin “genişlənən” nə deməkdir? Bu o deməkdir ki, o, obyektlərinizin və fayllarınızın yeni versiyalarını yaratmaq üçün mükəmməl uyğun gəlir. Məsələn, biz istəyirik ki, bizim avtomobil salonumuz da motosiklet satışına başlasın! Eyni zamanda, proqramda biz <carstore>-un hər iki versiyasını - həm köhnəsini (motosiklsiz), həm də yenisini dəstəkləməliyik. Budur köhnə versiyamız:
<?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>
Və burada yeni, genişləndirilmişdir:
<?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>
Beləliklə, biz asanlıqla və sadəcə olaraq faylımıza motosikletlərin təsvirini əlavə etdik :) Eyni zamanda, avtomobillər üçün olduğu kimi motosikletlər üçün də eyni uşaq etiketlərini təyin etməyə qətiyyən ehtiyac yoxdur. Nəzərə alın ki, motosikletlərdə avtomobillərdən fərqli olaraq <sahibi> elementi var - sahibi. Bu, kompüterin (və ya insanın) məlumatları oxumasına mane olmayacaq.

XML və HTML arasındakı fərqlər

Artıq dedik ki, XML və HTML zahiri cəhətdən çox oxşardır. Buna görə də, onların necə fərqləndiyini bilmək çox vacibdir. Birincisi, onlar müxtəlif məqsədlər üçün istifadə olunur. HTML - veb səhifələri işarələmək üçün. Məsələn, HTML-dən istifadə edərək veb-sayt yaratmaq lazımdırsa, qeyd edə bilərsiniz: “Menyu yuxarı sağ küncdə olmalıdır. Onun filan düymələri olmalıdır”. Başqa sözlə, HTML-nin məqsədi verilənləri göstərməkdir. XML - məlumatı insanlar və kompüterlər üçün əlverişli formada saxlamaq və ötürmək üçün . Bu formatda bu məlumatların necə göstəriləcəyi ilə bağlı heç bir təlimat yoxdur: bu, proqramın kodundan asılıdır. İkincisi, onların əsas texniki fərqi var. HTML teqləri əvvəlcədən müəyyən edilmişdir. Başqa sözlə, başlıq yaratmaq üçün (məsələn, səhifənin əvvəlində böyük yazı) HTML-də yalnız <h1></h1> teqlərindən istifadə olunur (kiçik başlıqlar üçün - <h2></h2>, < h3></h3>). Siz müxtəlif başlıqlı teqlərdən istifadə edərək HTML-də başlıqlar yarada bilməyəcəksiniz. XML əvvəlcədən təyin edilmiş teqlərdən istifadə etmir. Teqlərə istədiyiniz adları verə bilərsiniz - <header>, <title>, <idontknow2121>.

Münaqişənin həlli

XML-in təmin etdiyi azadlıq da bəzi problemlərə səbəb ola bilər. Məsələn, eyni obyekt (məsələn, avtomobil) proqram tərəfindən müxtəlif məqsədlər üçün istifadə edilə bilər. Məsələn, maşınları təsvir edən XML faylımız var. Lakin proqramçılarımız əvvəlcədən öz aralarında razılığa gəlməyiblər. İndi isə bizim xml-imiz real avtomobillərin məlumatlarına əlavə olaraq oyuncaq modellərinin məlumatlarını da ehtiva edir! Üstəlik, onlar eyni xüsusiyyətlərə malikdirlər. Proqramımız aşağıdakı XML faylını alır. Əsl avtomobili oyuncaq modelindən necə ayırd edə bilərik?
<?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>
Prefikslər və ad boşluqları burada bizə kömək edəcək. Proqramımızda oyuncaq avtomobilləri həqiqi avtomobillərdən ayırmaq üçün (və ümumiyyətlə, hər hansı bir oyuncaq şeyləri onların real prototiplərindən) ayırmaq üçün iki prefiksi təqdim edirik - "real" və "oyuncaq".
<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>
İndi proqramımız varlıqları ayırd edə biləcək! Oyuncaq prefiksi olan hər şey oyuncaqlar kimi təsnif ediləcək :) Lakin, biz hələ bitirməmişik. Prefikslərdən istifadə etmək üçün onların hər birini ad sahəsi kimi qeydiyyatdan keçirməliyik. Bəli, əslində “qeydiyyatdan keçmək” güclü sözdür :) Sadəcə hər biri üçün unikal ad tapmaq lazımdır. Bu, siniflərdə olduğu kimidir: sinfin qısa adı ( Cat) və bütün paketləri olan tam adı ( zoo.animals.Cat) var . Unikal ad boşluqları yaratmaq üçün adətən URI istifadə olunur . Bəzən İnternet ünvanı burada əvəz olunur, burada bu ad sahəsinin funksiyaları və məqsədi ətraflı təsvir olunur. Lakin bu, etibarlı İnternet ünvanı olmamalıdır. Çox vaxt layihələr sadəcə ad boşluqlarının iyerarxiyasını izləməyə kömək edən URI kimi sətirlərdən istifadə edir. Budur bir nümunə:
<?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>
Əlbəttə ki, İnternetdə http://testproject.developersgroup1.companyname/department2/namespaces/real ünvanında heç bir sayt yoxdur, lakin faydalı məlumatlar var: "department2" departamentindən olan "developersgroup1" tərtibatçı qrupu yaratmaq üçün məsuliyyət daşıyır. "real" ad sahəsi. Yeni adlar əlavə etmək və ya onlarla mümkün münaqişələri müzakirə etmək lazımdırsa, hara müraciət edəcəyimizi bilirik. Bəzən bu ad sahəsinin təsviri ilə real İnternet ünvanı ad sahəsi üçün unikal ad kimi istifadə olunur. Məsələn, əgər bu, böyük bir şirkətdirsə və onun layihəsi dünyada milyonlarla insan tərəfindən istifadə olunacaq. Ancaq bu həmişə edilmir: Stackoverflow -da bu məsələnin müzakirəsi var . Prinsipcə, ad boşluqları üçün adlar kimi URI-lərdən istifadə tələbi ciddi deyil: sadəcə təsadüfi sətirlərdən istifadə edə bilərsiniz. Bu seçim də işləyəcək:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Lakin URI-lərdən istifadə etməyin bir sıra üstünlükləri var. Bu barədə daha ətraflı burada oxuya bilərsiniz .

Əsas XML Standartları

XML standartları xml fayllarına əlavə funksionallıq əlavə edən genişlənmələr toplusudur. XML-in çoxlu standartları var, lakin biz yalnız ən vaciblərinə baxacağıq və onların ən məşhur XML standartlarından biri olan AJAX-a nə etməyə icazə verdiyini öyrənəcəyik. Bu, veb-səhifənin məzmununu yenidən yükləmədən dəyişməyə imkan verir! Gözəl səslənir? :) Bu texnologiyanı burada şəxsən sınaqdan keçirə bilərsiniz . XSLT - XML ​​mətnini başqa formatlara çevirməyə imkan verir. Məsələn, XSLT istifadə edərək, XML-i HTML-yə çevirə bilərsiniz! XML-in məqsədi, artıq dediyimiz kimi, məlumatları göstərmək deyil, təsvir etməkdir. Lakin XSLT istifadə edərək biz bu məhdudiyyəti keçə bilərik! Budur, iş nümunəsi olan bir sandbox, burada necə işlədiyini özünüz görə bilərsiniz :) XML DOM - XML ​​faylından fərdi elementləri əldə etməyə, dəyişdirməyə, əlavə etməyə və ya silməyə imkan verir. Bunun necə işlədiyinə dair kiçik bir nümunə. Bizim books.xml faylımız var:
<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>
İçində iki kitab var. Kitabların başlıq kimi elementi var - <title>. Və burada biz XML faylımızdan bütün kitab başlıqlarını əldə etmək üçün JavaScript-dən istifadə edə bilərik və onlardan birincisini konsola çıxara bilərik:
<!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>
Yenə də bu nümunənin sandboxdan istifadə edərək necə işlədiyini görməyi məsləhət görürəm :) DTD (“sənəd növünün tərifi”) – XML faylında bəzi obyektlər üçün icazə verilən elementlərin siyahısını müəyyən etməyə imkan verir. Məsələn, biz kitab mağazası veb saytı üzərində işləyirik və bütün inkişaf qrupları razılaşdılar ki, kitab elementi üçün XML fayllarında yalnız başlıq, müəllif və il atributları göstərilməlidir. Bəs özümüzü diqqətsizlikdən necə qoruya bilərik? Çox asan!
<?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>
Burada biz <book> üçün etibarlı atributların siyahısını müəyyən etdik. Oraya yeni element əlavə etməyə çalışın və dərhal xəta alacaqsınız!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Xəta! “Burada əsas qəhrəman elementinə icazə verilmir” Bir çox başqa XML standartları var. Onların hər biri ilə tanış ola və WC3 saytında kodu daha dərindən öyrənməyə cəhd edə bilərsiniz (“Vacib XML Standartları” bölməsi). Və ümumiyyətlə, XML haqqında məlumat lazımdırsa, demək olar ki, hər şeyi orada tapa bilərsiniz :) Yaxşı, mühazirəmiz başa çatdı. Tapşırıqlara qayıtmağın vaxtı gəldi! :) Görüşənədək!
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION