XML - ćwiczenia 1 - podstawy XML

Co to jest XML?

XML to sposób zapisywania danych wraz z ich strukturą w dokumentach tekstowych.
XML to standard, opisany w rekomendacji W3C, oparty o standard SGML.
XML to model dokumentu jako drzewa z węzłami - elementami i liśćmi - polami tesktowymi (dalej opisany dokładniej).
XML to język, czyli zbiór dopuszczalnych ciągów znaków. Literami są tu znaki Unicode. Rekomendacja zawiera m.in. gramatykę, która, wraz z pewnymi własnościami opisanymi słownie, definiuje język XML.
XML to metajęzyk, czyli klasa języków zwanych zastosowaniami XML. Są nimi np. XML Schema, XSLT, WML, XHTML, SVG. Do definiowania zastosowań XML służy DTD (Document Type Definition) - część standardu XML, są także osobne standardy służące temu celowi z zalecanym przez W3C XML Schema na czele.

XML z wyglądu jest bardzo podobny do HTML-a, ale XML nie jest językiem do tworzenia stron WWW! Może mieć pośrednio takie zastosowanie, ale to nie jest jego główna rola.
Dokumenty i dane są zapisywane w formacie XML w celu ich przechowywania i przesyłania. Są duże możliwości prezentacji danych zapisanych w XML, ale sam w sobie XML nie jest sposobem prezentacji.

Z danych zapisanych w postaci XML można korzystać w programach, używając bogatych bibliotek do parsowania, przetwarzania i zapisywania XML.
Dane zapisane w XML można dość łatwo przekształcać do innych formatów tekstowych, np. w celu ich prezentacji. Służy temu m.in. standard XSLT.

Dokument XML

Dokument XML można interpretować na różnych poziomach abstrakcji. Dokument jest ciągiem znaków, jest ciągiem znaczników i tekstu, jest drzewem.

Na najwyższym poziomie abstrakcji dokument jest drzewem, w którym występują węzły elementów i węzły tekstowe. Węzły tekstowe są zawsze liśćmi. Element ma swoją nazwę, może posiadać dzieci. Wśród dzieci jednego węzła mogą występować elementy o takich samych nazwach. Elementy mogą posiadać atrybuty. Atrybut jest identyfikowany przez nazwę, jego wartością jest tekst. Jeden element nie może posiadać dwóch atrybutów o tej samej nazwie. W dokumencie istnieje dokładnie jeden element główny.
Opisane powyżej konstrukcje niosą właściwą treść dokumentu.

Istnieją dodatkowe typy węzłów, w których zapisywane są informacje nie będące właściwą treścią dokumentu, ale które powinny się w dokumencie znaleźć, są nimi komentarze i instrukcje przetwarzania. Instrukcje przetwarzania (processing instructions) zawierają dodaktowe informacje skierowane do programów odczytujących dany dokument. Instrukcje składają się z nazwy (adresat, target) oraz treści, istnieje konwencja zapisywania treści instrukcji tak, jak zapisuje się atrybuty i ich wartości w elementach, ale nie jest to wymagane przez rekomendację XML. Komentarze to komentarze :) Komentarze i instrukcje przetwarzania mogą występować w dokumencie także na zewnątrz elementu głównego.
Opisane dotąd typy węzłów występują w modelu dokumentu XML zdefiniowanym przez standard XPath, są uznawane za warstwę logiczną dokumentu XML.

Warstwa fizyczna dokumentu XML oparta jest o pojęcie encji. Encja to spójny ciąg znaków, jest to uogólnione pojęcie pliku (dane mogą pochodzić nie tylko z pliku, ale np. z innych aplikacji). W XML występuje 5 predefiniowanych encji, służących zapisywaniu w tekście dokumentu znaków specjalnych:
& - &
< - &lt;
> - &gt;
" - &quot;
' - &apos;
Inne encje mogą zostać zdefiniowane w DTD. W dokumencie mogą występować referencje do encji, np. &encja;. Program czytający XML powinien wstawić w to miejsce zawartość encji i ją sparsować.

Oprócz referencji do encji istnieją referencje do znaków, np. &#520; to odwołanie do znaku o kodzie Unicode 520. Podczas odczytywania dokumentu aplikacja powinna wstawić znak opisywany przez referencję do odpowiedniego węzła tekstowego lub wartości atrybutu. Sekcje CDATA pozwalają na zapisywanie znaków specjalnych bez stosowania referencji do znaków czy encji. Jedynym zabronionym w sekcji CDATA ciągiem znaków jest ]]>, który zawsze zamyka sekcję. Ten ciąg znaków jest także zabroniony w zawartości tekstowej dokumentu XML.

Na początku dokumentu może występować deklaracja XML, której głównym zadaniem jest obecnie określenie standardu kodowania użytego do zapisania dokumentu (a w przyszłości może służyć do rozróżnienia wersji standardu XML). Jeśli dokument jest zapisany w UTF-8 lub UTF-16, deklarację XML można pominąć.

Strukturę logiczną i fizyczną dokumentu zapisuje się w tekście za pomocą znaczników.
Poprawnym dokumentem XML jest np.:

<a/>

Poniższy przykład pokazuje sposób zapisywania poszczególnych konstrukcji:


<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE element_glowny SYSTEM "plik.dtd">
<!-- Tu może być komentarz lub instrukcja przetwarzania, ale nie zwykły tekst -->
<element_glowny>
  <?instrukcja parametr="wartość" ale można też tak?>
  <podelement atrybut='Wartość atrybutu' att="lub tak">
  Zawartość tekstowa <elem>i zanurzony element</elem>.
  <!-- Komentarze i instrukcje dozwolone -->
  </podelement>
  Zawartość tekstowa &encja; &#502;
  <![CDATA[5 < 5 + 1]]>
</element_glowny>
<!-- Tu może być komentarz lub instrukcja, ale nie zwykły tekst -->

Technika

Internet Explorer parsuje podany dokument XML i wyświetla go jako drzewo. Podobnie robi pod Linuksem przeglądarka konqueror, jeśli wybierze się polecenie "Show DOM tree". Z pewnością da się coś takiego zrobić też pod Mozillą, ale nie sprawdzałem.

Pod Linuksem działa program xmllint, walidujący dokumenty XML.
Następujące wywołanie:
xmllint --valid -noout plik.xml
sprawdzi poprawność pliku nie wypisując go na ekran.

Do walidowania dokumentów XML można też wykorzystać program przykładowy wchodzący w skład Xalana.
Kompiluje się go poleceniem:
javac Validate.java.
Aby sprawdzić poprawność strukturalną (a przy okazji też składniową) pliku plik.xml należy wywołać:
java Validate plik.xml

Zadania

  1. Parsowanie różnych dokumentów i próbowanie różnych konstrukcji składniowych.
  2. Modelowanie struktury wiadomości e-mail i stworzenie przykładowego dokumentu (bez zapisywania DTD).