XML

XML

XML -  Extensible Markup Language - Rozszerzalny język znaczników jest językiem formalnym służącym do opisu innych języków opisujących dane.

Spis treści

     1 Czym XML nie jest
          1.1 XML nie jest językiem programowania
          1.2 W XML nie można programować
          1.3 XML nie jest panaceum na wszystkie problemy
     2 Wady XML
          2.1 XML jest powolny
          2.2 XML jest opasły
          2.3 XML jest trudny
          2.4 Uszkodzony XML nie może być odczytany automatycznie
     3 Zalety XML
          3.1 XML jest zawsze odczytywalny
          3.2 XML na jasno określoną składnię
          3.3 XML jest łatwy do przetworzenia
     4 Podstawowe pojęcia związane z XML
          4.1 Dokument XML
          4.2 Znacznik XML i zawartość dokumentu
          4.3 Tagi XML
          4.4 Atrybut XML
          4.5 Encja XML
          4.6 Deklaracja XML
          4.7 Komentarz XML
          4.8 Procesor XML
          4.9 Kodowanie domyślne i sekwencja ucieczkowa
          4.10 Wersja XML
     5 Dokument XML jako nośnik danych
     6 Prosty dokument XML
     7 Przestrzenie nazw XML
     8 Podsumowanie


Czym XML nie jest


Jeżeli chcemy zrozumieć czym XML jest należy najpierw jasno powiedzieć czym nie jest.

XML nie jest językiem programowania


Pomimo tego co można znaleźć w internecie XML nie jest językiem programowania. Nie jest nawet językiem w potocznym (w IT) tego słowa znaczeniu. XML jest meta językiem, czyli językiem służącym do opisu innych języków.

W XML nie można programować


Wynika to z poprzedniego punktu. W XLM nie programujemy, bo nie jest to język programowania. Możemy wykorzystywać  dokumenty XML w naszych programach w celu przesyłania danych, ich opisu lub składowania.

XML nie jest panaceum na wszystkie problemy


Jak mówią projektanci jeżeli twój problem nie może być rozwiązany za pomocą XML należy użyć jeszcze więcej XML. Niestety nie tędy droga. XML nie jest rozwiązaniem wszystkich problemów projektowych. Posiada duży narzut danych i jest stosunkowo powolny.

Wady XML


Prawidłowe użycie XML jest możliwe tylko wtedy gdy poznamy wszystkie jego wady. Jeżeli pomimo to chcemy użyć XML to oznacza, że będzie to dobry wybór.

XML jest powolny


Nawet najszybsze narzędzia do obsługi XML są stosunkowo powolne w porównaniu z obróbką dokumentów skompresowanych. Wynika to z samej natury standardu. Dokumenty XML mogą być przetwarzane na kilka różnych sposobów, ale każdy z nich wymusza na narzędziu tworzenie rozbudowanej hierarchii obiektów, przy przetwarzaniu obiektowym w oparciu o DOM, lub utrzymywaniu całej masy kursorów przy przetwarzaniu zdarzeniowym opartym o StAX. Nawet najszybszy model SAX ma wadę jaką jest "jednokierunkowość" przetwarzania.

XML jest opasły


XML jest rozwiązaniem "human readable". Oznacza, to, że poza danymi w postaci nieskompresowanej muszą być przechowywane znaczniki też w postaci nieskompresowanej. Powoduje to duży narzut ilości danych, który jest szczególnie widoczny przy przetwarzaniu małej ich ilości. Znaczniki mogą stanowić nawet 80% wielkości dokumentu.

XML jest trudny


Choć wydaje się to dziwne, bo XML miał być w założeniu prosta technologią, to XML jest jedną z najbardziej skomplikowanych technologii w całym IT. Całość zagadnień związanych z XML można podzielić na dwie grupy:
  1. podstawy - czyli rzeczy bardzo proste takie jak definiowanie elementów i atrybutów.
  2. wiadomości bardzo zaawansowane - czyli w praktyce cała reszta.

Znaczna część użytkowników technologii XML nie wchodzi poza pierwsza grupę zagadnień. Nie korzystają z takich elementów jak przestrzenie nazw, transformacje XSLT, opis dokumentu za pomocą  DTD, XSD lub RELAX NG czy arkusze stylów XSL. Jeżeli do tego dołożymy jeszcze zagadnienia związane z poruszaniem się po dokumencie za pomocą XPath oraz język zapytań XQuery to bardzo łatwo stwierdzić, że XML jest skomplikowany.

Uszkodzony XML nie może być odczytany automatycznie


Uszkodzony dokument XML nie może zostać odczytany przez automat. Dokumenty nie mają też danych naprawczych tak jak na przykład pliki rar.

Zanim jednak do końca zrezygnujemy z XML należy zapoznać się z jego zaletami.

Zalety XML


XML jest zawsze odczytywalny


Największą zaletą dokumentu XML jest "human readable", czyli nieskompresowany zapis danych i meta informacji. Pozwala to na wydobycie nawet z poważnie uszkodzonego pliku informacji. Jest to szczególnie ważne w przypadku dokumentów, które podlegają okresowej archiwizacji. Oczywiście nie można tego zrobić automatycznie, ale w przeciwieństwie do plików binarnych człowiek może zawsze odczytać plik za pomocą najprostszego edytora tekstu np. vi, czy notepad.

XML na jasno określoną składnię


Dokument XML zazwyczaj posiada definicję w postaci pliku DTD lub XSD. Dzięki tej definicji można jasno określić czy plik ma prawidłową strukturę. Dzięki temu można używać XML do opisywania i składowania danych. Dodatkowo pozwala to na określanie pewnych właściwości dokumentu tylko na podstawie występowania określonych tagów.

XML jest łatwy do przetworzenia


Drzewiasta struktura dokumentu XML pozwala na przetwarzanie go na kilka sposobów.
Po pierwsze można przejść przez dokument traktując go jak iterator - źródło zdarzeń. Taki model jest ujęty w postaci Simple API for XML - SAX. Przyjmuje on, że w trakcie czytania strumienia występują zdarzenia (ang. event) takie jak początek dokumentu, jego koniec, początek i koniec elementu itd. SAX jest bardzo szybki, nie pochłania zasobów takich jak pamięć. Niestety iterator jest jednokierunkowy.
Po drugie można przetwarzać dokument najpierw budując jego model obiektowy. Taki model nazywa się Document Object Model - DOM. W podejściu tym dokument jest najpierw wczytywany, zazwyczaj za pomocą SAX, i tworzony jest jego model obiektowy. Klient używa już drzewa obiektów. Ze względu na swoją naturę jest to najpopularniejszy sposób przetwarzania w językach obiektowych takich jak Java, C#, C++, JavaScript. DOM jest intuicyjny, ale bardzo powolny, a w przypadku dużych obiektów wyjątkowo zasobożerny.
Trzecim podejściem jest wykorzystywany w języku Java StAX. Jest to model oparty o przetwarzanie strumieniowe. Istnieje w nim pojęcie kursora, który pozwala na poruszanie się po dokumencie. Jest to próba pogodzenia dwóch poprzednich podejść.

Podstawowe pojęcia związane z XML


Czas na przypatrzenie się podstawowym pojęciom, które będą nam towarzyszyć przy pracy z dokumentem XML.

Dokument XML


Dokumentem XML nazywamy plik, którego zawartość jest zgodna ze specyfikacją XML.
W jednym pliku może znajdować się maksymalnie jeden dokument. Dokument składa się z ciągu znaków, które co do zasady zapisane są one za pomocą kodowania Unicode. Znaki tworzą znaczniki i treść dokumentu.

Znacznik XML i zawartość dokumentu


Znacznik XML jest to ciąg znaków zaczynający się od "<" i kończący ">" (nazywany w tym przypadku tagiem) albo zaczynający się od "&" i kończący ";" (nazywany w tym przypadku encją).
Wszystkie znaki które nie są znacznikami są zawartością dokumentu.

Tagi XML


Tagiem nazywamy strukturę logiczną reprezentowaną przez ciąg znaków zaczynających się od znacznika początkowego w postaci <nazwa_znacznika> i zakończonego znacznikiem kończącym w postaci <nazwa_znacznika> albo tak zwanego pustego elementu znacznika w postaci <nazwa_znacznika />.
Tag XML jest podstawowym budulcem dokumentów. Najprostszy dokument XML składa się z pojedynczego pustego znacznika:
<?xml version="1.0" encoding="UTF-8" ?>
<tag/>

Tag może zawierać atrybuty.

Atrybut XML


Jest to ciąg znaków reprezentujących nazwa_atrybutu="Wartość atrybutu", występuje on po nazwie taga, ale przed znakiem > w znaczniku początkowym lub pustym elemencie.

Encja XML


Jest to specyficzny znacznik XML mający różnorodne zastosowania. Zazwyczaj jest stosowany do uproszczenia zapisu ciągów znaków lub ułatwienia zapisu znaków spoza alfabetu np. &copyright; dla znaku ©. Znaczenie encji uzależnione jest od jej definicji w dtd lub xsd.

Deklaracja XML


Jest to nieobowiązkowy element, który może wystąpić na samym początku dokumentu i ma postać:
<?xml version="WERSJA XML" encoding="KODOWANIE DOKUMENTU" ?>


Komentarz XML


Komentarzem jest ciąg znaków umieszczony pomiędzy . Komentarz jest ignorowany przez procesor XML.

Procesor XML


Jest to program, który na potrafi interpretować dokument XML i na tej podstawie wykonać pewne zadania. Przykładem tego typu programu jest przeglądarka internetowa.

Kodowanie domyślne i sekwencja ucieczkowa


Dokument XML bez deklaracji jest co do zasady traktowany jako dokument kodowany w UTF-8. Specyfikacja XML definiuje też trzy sekwencje ucieczkowe dla znaków < - &gt;, > - &lt; i & - &amp;. Znaki te są jedynymi stałymi elementami składni XML (można je rozumieć jako znaki sterujące procesora XML) i nie mogą pojawiać się w treści dokumentu.

Wersja XML


XML występuje w dwóch wersjach. Wersja 1.0 jest najpopularniejsza i zalecana przez W3C do użytku. Wersja 1.1 powstała w wyniku zmian w standardzie UNICODE. Dla zwykłego użytkownika zmiany nie są zauważalne.

Dokument XML jako nośnik danych


XML nie jest językiem programowania, ale jest meta językiem pozwalającym na definiowanie języków do opisu danych. Dane mogą być dowolne. Jedynym ograniczeniem jest tu tylko wyobraźnia autora. W praktyce należy rozpatrzyć wszystkie za i przeciw zanim wykorzystamy format XML do obsługi danych. Ważnym czynnikiem przy dokonywaniu wyboru jest rodzaj danych. Jeżeli są to dane tekstowe lub dane, które powinna być możliwość odczytania przez człowieka za pomocą najprostszych narzędzi to dane te są dobrym kandydatem do zapisu w postaci XML. Jeżeli jednak dane to na przykład muzyka, film Full-HD, dane bitowe, które nie są w swojej naturalnej postaci zdatne do odczytu przez człowieka to użycie XML jest pozbawione sensu. Wprowadzamy duży narzut w postaci elementów dokumentu, nie zyskując nic w zamian.
Dokumenty XML sprawdzają się też jeżeli nie chcemy tworzyć nowego protokołu komunikacyjnego,m a chcemy wykorzystać na przykład TCP/IP i potrzebujemy uniwersalnego nośnika danych. Zaletą XML w tym przypadku jest możliwość tworzenia "kopert", na dane, które to koperty można łatwo obsługiwać w różnych językach.

Prosty dokument XML


Już wcześniej przedstawiłem najprostszy dokument XML. Nie jest on w żaden sposób funkcjonalny. Stwórzmy zatem prosty dokument, który będzie przechowywał informacje o pracownikach.
<?xml version="1.0" encoding="UTF-8" ?>
<pracownicy data="2009-11-27">
   <pracownik id="1">
      <imie>Jan</imie>
      <nazwisko>Kowalski</nazwisko>
      <stanowisko>Prezes</stanowisko>
      <pensja waluta="PLN" kwota="10000" />
   </pracownik>
   <pracownik id="2">
      <imie>Janusz</imie>
      <nazwisko>Iksiński</nazwisko>
      <stanowisko>robotnik</stanowisko>
      <pensja waluta="PLN" kwota="1500" />
   </pracownik>
   <pracownik id="3">
      <imie>Anna</imie>
      <nazwisko>Blondi</nazwisko>
      <stanowisko>Asystentka prezesa</stanowisko>
      <pensja waluta="PLN" kwota="3000" />
   </pracownik>
</pracownicy>

Dokument ten zawiera w pierwszej linii deklarację XML. Następnie następuje główny element dokumentu. Jest nim znacznik <pracownicy>. Posiada on atrybut data, który może wskazywać na przykład na datę wygenerowania dokumentu. Element ten nazywany jest korzeniem dokumentu. Zawiera on trzy elementy <pracownik>, które opisują pracownika. Element <pensja> zawiera dwa atrybuty waluta do przechowywania informacji o walucie i kwota przechowujący kwotę. Zasady zawierania się znaczników, ich kolejność i możliwe wartości w przypadku atrybutów są zapisane w DTD lub w XSD.

Przestrzenie nazw XML


XML jest rozszerzalny. Oznacza to, że można w ramach jednego dokumentu XML przechowywać znaczniki pochodzące z różnych definicji XSD. Wymaga to zastosowania odpowiedniej przestrzeni nazw. Tematyka przestrzeni nazw jest skomplikowana i dokładniej omawiana w artykule o XSD.
Przestrzeń nazw jest definiowana w dokumencie, a używa się jej poprzedzając nazwę znacznika lub atrybutu nazwą przestrzeni:
<root>
 
<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
 
<f:table xmlns:f="http://www.example/fortune">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
 
</root>


Podsumowanie


XML jest tematyką skomplikowaną. Nie można umieścić nawet w dużym artykule wszystkich zagadnień związanych z tą technologią. Dlatego też zachęcam do poszukiwań artykułów i czytania książek poświęconych tej tematyce.