Blog webdeveloperski Patryk yarpo Jar

XML – format wymiany danych w Ajaksie

Autor wiadomości Czerwiec 5, 2011

XML jest bardzo czytelnym dla człowieka i prostym w nauce formatem. Nazwa pochodzi od „Extensible Markup Language” - rozszerzalny język znaczników. Służy do opisywania zawartości dokumentów elektronicznych. Jego olbrzymią zaletą jest fakt, że nawet osoba niemająca na co dzień styczności z programowaniem, powinna w miarę szybko zrozumieć informacje nim zawarte. Podstawowymi składnikami dokumentu XML są: elementy oraz atrybuty.

Zasady XML

Prostota XML pozwala opisać zasady jego tworzenia w niewielkim zbiorze punktów:

  1. Podstawowym budulcem jest element (tworzący znaczniki/tagi):
    <nazwa-elementu>treść</nazwa-elementu>
  2. Element może zawierać: kolejny element, treść, atrybut lub ich kombinację.
    • Treść poprzedzona jest znacznikiem początkowym
      <nazwa-elementu>
    • Za treścią występuje znacznik końcowy
      </nazwa-elementu>
  3. Element może być pusty (nie zawierać treści, innych elementów, ani nie posiadać atrybutów). Posiada wtedy składnię:
    <nazwa-elementu></nazwa-elementu>

    albo:

    <nazwa-elementu/>
  4. Jeżeli element nie jest pusty i nie jest zamknięty, to element ten jest nieprawidłowy. Co za tym idzie cały dokument XML jest niepoprawny.
  5. W nazwach elementów małe i duże litery są rozróżnialne, znacznik <a> jest czym innym niż znacznik <A>.
  6. Kolejność zamykania znaczników (elementów) jest odwrotna do kolejności otwierania:
    <a><b><c>treść</c></b></a>
  7. Zasady tworzenia nazw elementów:
    1. nazwy elementów mogą zawierać litery, cyfry i inne znaki
    2. nazwy elementów nie mogą zaczynać się od cyfry, myślnika ani kropki
    3. nazwy nie mogą rozpoczynać się od „xml” („XML”, „xmL” itp.)
    4. nazwy nie mogą zawierać spacji
  8. Dodatkowe informacje o elemencie mogą zostać przekazane za pomocą atrybutów.
  9. Atrybuty umieszcza się w znacznikach początkowych lub w znaczniku elementu pustego.
  10. Atrybuty mają składnię:
    <element atrybut='wartość' />
  11. Wartość atrybutu musi być otoczona przez cudzysłów albo apostrofy. Każdy atrybut musi mieć przypisaną wartość (choćby pusty ciąg znaków atrybut='').
  12. Ograniczenia nałożone na nazwy atrybutów są takie same jak przy nazwach elementów.

Wykorzystanie w Ajaksie

Być może wydaje się, że istnieje sporo zasad rządzących tym formatem. Sądzę jednak, że wystarczy prosty przykład kodu XML, aby przekonać się, iż wszystko jest logiczne i składne:

<ludzie>
    <pracownicy>
        <kierownik dzial='finanse'>
            <imie>Stefan</imie>
            <nazwisko>Kowalski</nazwisko>
        </kierownik>
        <kierownik dzial='hr' />
        <programista dzial='startup'>
            <imie>Jan</imie>
            <nazwisko>Nowak</nazwisko>
        </programista>
    </pracownicy>
    <klienci>
        <klient>
            <nazwa>Firma S.A</nazwa>
        </klient>
    <klienci>
</ludzie>

Jak widać w powyższym kodzie posiadamy strukturę drzewiastą z dwoma gałęziami. W gałęzi `pracownicy' nie posiadamy informacji o kierowniku działu „hr” - jest to znacznik pusty.
Kod HTML/ JS

W tym przykładzie skorzystam z kodu XML z poprzedniego listingu, umieszczając go w pliku 'ludzie.xml'.

function testAjax()
{
    var ajaxClient = new XMLHttpRequest();
    ajaxClient.open('POST', 'ludzie.xml');
    ajaxClient.setRequestHeader("Content-Type", "text/xml");
    ajaxClient.onreadystatechange = function()
    {
        if (4 === this.readyState &amp;&amp; 200 === this.status)
        {
            alert(this.responseXML.
                getElementsByTagName('kierownik')[0].
                getElementsByTagName('imie')[0].
                firstChild.nodeValue);
        }
    }
    ajaxClient.send(null);
}

Co się dzieje w kodzie?

Po pierwsze, wysyłamy dodatkowy nagłówek – 'Content-type', który informuje jakiego typu danych oczekujemy w odpowiedzi.

Po drugie zamiast `XMLHttpRequest.responseText' (jak to miało miejsce w przypadku odbierania danych tekstowych lub JSON) wykorzystujemy pole `XMLHttpRequest.responseXML' i co się z tym wiąże musimy także operować na interfejsie modelu DOM zwróconego obiektu XML. Operowanie natywnie na modelu DOM nie jest ani intuicyjne, ani wygodne.

Już dzisiaj istnieją gotowe biblioteki znacznie ułatwiające operowanie na danych w XML, choćby ObjTree.

W przyszłości być może coś zmieni się wtej kwestii, dzięki E4X:

Co dalej?

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.