CodeGym /Kurslar /JAVA 25 SELF /XML və namespace-lərin əsasları

XML və namespace-lərin əsasları

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. XML ilə tanışlıq

Bu gün JSON standart olsa da, Java dünyasında çoxlu legacy-kod var, buna görə bəzən XML ilə rastlaşa bilərsiniz. Ona görə də onun haqqında təsəvvürə malik olmaq faydalıdır. XML (eXtensible Markup Language) — strukturlu məlumatı saxlamaq və mübadilə etmək üçün mətn formatıdır. Onu tez-tez konfiqurasiyalar, proqramlararası mübadilə, məlumatın saxlanması və hətta obyektlərin seriyalaşdırılması üçün istifadə edirlər.

XML sənədinin strukturunun əsas elementləri:

Teqlər (elementlər):
<> arasındakı hər şey. Hər teq açılır (<tag>) və bağlanır (</tag>) və ya özünü bağlayan olur (<tag/>).

Atributlar:
Teqin daxilindəki əlavə parametrlər.
Nümunə: <user name="Vasya" age="25"/>

Mətn düyünləri:
Teqlər arasındakı mətn.
Nümunə: <greeting>Salam, dünya!</greeting>

Sadə XML sənədinin nümunəsi

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user name="Vasya" age="25">Salam!</user>
    <user name="Katya" age="30"/>
</users>

Burada:

  • <users> — kök element.
  • <user>nameage atributları olan element; birinci istifadəçinin mətn məzmunu var.

2. Açar anlayışlar

Proloq:
Faylın əvvəlindəki sətir XML versiyasını və kodlaşdırmanı göstərir.
Nümunə: <?xml version="1.0" encoding="UTF-8"?>

Elementlər:
XML-in əsas tikinti blokları.
Nümunə: <book>...</book>

Atributlar:
Açan teqin daxilindəki parametrlər.
Nümunə: <book title="Java" author="Ivanov"/>

Şərhlər:
HTML-də olduğu kimi, <!-- ... --> arasında yazılır.
Nümunə: <!-- Bu şərhdir -->

CDATA bölmələri:
XML kimi şərh olunmayacaq mətni daxil etməyə imkan verir (məsələn, <, & və s. işarələri ilə).
Nümunə:

<script><![CDATA[
    if (a < b && b > 0) { ... }
]]></script>

3. XML-də namespaces (ad məkanları) niyə lazımdır

Problem: adların konflikti

Böyük XML sənədlərində eyni adlı, lakin fərqli mənalı teqlər tez-tez rast gəlinir. Məsələn, sizdə HTML-in bir hissəsi kimi <table> və biznes-məntiqinizin (məsələn, verilənlər bazası) bir hissəsi kimi <table> ola bilər. Hansı teqin nə demək olduğunu necə başa düşmək olar?

Namespace olmadan:

<root>
    <table>
        <row>...</row>
    </table>
    <table>
        <column>...</column>
    </table>
</root>

Burada hansı <table> nəyə aid olduğu aydın deyil.

Həll: namespace-lər

Namespace (ad məkanı) — teqləri və atributları “işarələmək” və ad konfliktlərindən qaçmaq, müxtəlif teqlərin məna sahələrini dəqiq ayırmaq üsuludur.

  • Hər bir namespace — unikal URI-dir (adətən keçid kimi görünür, amma bu, sadəcə identifikatordur).
  • Müxtəlif namespace-lərə malik element və atributlar, adları üst-üstə düşsə belə, fərqli sayılır.

Üstünlüklər:

  • Müxtəlif standartlar və sxemlər arasında ad konfliktləri olmur.
  • Müxtəlif mənbələrdən olan məlumatları eyni sənəddə birləşdirmək mümkündür.
  • Hər teqin hansı “sözlüyə” aid olduğu aydın görünür.

4. Namespace-lərin istifadəsi: elan və tətbiq

Namespace necə elan edilir

Açan element teqində xüsusi xmlns (XML Namespace) atributu yazılır:

  • Prefikssiz: xmlns="URI" — bütün qapsanan elementlər üçün susmaya görə namespace elan edir.
  • Prefikslə: xmlns:prefix="URI" — teqlərdə istifadə olunacaq qısa ad (prefiks) ilə namespace elan edir.

Namespace-in elan edilməsi və istifadəsi nümunəsi

<root xmlns:h="http://www.w3.org/TR/html4/"
      xmlns:f="http://www.w3schools.com/furniture">
    <h:table>
        <h:tr>
            <h:td>Hüceyrə 1</h:td>
            <h:td>Hüceyrə 2</h:td>
        </h:tr>
    </h:table>
    <f:table>
        <f:name>Masa</f:name>
        <f:width>80</f:width>
        <f:length>120</f:length>
    </f:table>
</root>

Burada:

  • xmlns:h="..." — HTML cədvəli üçün h prefiksini elan edir.
  • xmlns:f="..." — mebel üçün f prefiksini elan edir.
  • <h:table><f:table> — adları eyni olsa belə, bunlar artıq müxtəlif elementlərdir.

Namespace-dən necə istifadə etmək olar

  • Elan: Kökdə və ya istənilən elementdə: xmlns:prefix="URI"
  • Tətbiq: Elementin və ya atributun adından əvvəl prefiks və iki nöqtə yazılır: <prefix:element>...</prefix:element>

Susmaya görə namespace

Sadəcə xmlns="URI" elan etsəniz, prefikssiz bütün elementlər həmin namespace-ə aid olacaq.

<books xmlns="http://example.com/books">
    <book>...</book>
</books>

5. Təcrübə: bir neçə namespace ilə sadə XML sənədinin yaradılması

Gəlin HTML və mebel üçün iki ad məkanından istifadə edilən bir XML nümunəsi yaradaq.

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:h="http://www.w3.org/TR/html4/"
      xmlns:f="http://www.w3schools.com/furniture">
    <h:table>
        <h:tr>
            <h:td>Hüceyrə 1</h:td>
            <h:td>Hüceyrə 2</h:td>
        </h:tr>
    </h:table>
    <f:table>
        <f:name>Masa</f:name>
        <f:width>80</f:width>
        <f:length>120</f:length>
    </f:table>
</root>

Burada nə baş verir:

  • Kök elementdə iki namespace elan olunub: hf.
  • h: prefiksi olan bütün elementlər HTML cədvəlinə aiddir.
  • f: prefiksi olan bütün elementlər mebelə aiddir.

6. Tipik səhvlər

Səhv 1: prefiksi elan etməyi unutmusunuz

<root>
    <h:table>...</h:table>
</root>

Nəticə: XML parseri bu xətanı verəcək: The prefix 'h' for element 'h:table' is not bound.

Səhv 2: namespace olmadan eyni adlar

<root>
    <table>...</table>
    <table>...</table>
</root>

Nəticə: Hansı <table>-in nəyə aid olduğunu ayırd etmək mümkün deyil.

Səhv 3: prefiksin yanlış istifadəsi

<root xmlns:h="http://www.w3.org/TR/html4/">
    <h:table>...</h:table>
    <f:table>...</f:table> <!-- Səhv: f prefiksi elan edilməyib -->
</root>

Nəticə: Parser xətası: The prefix 'f' for element 'f:table' is not bound.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION