XML już niemal dekadę temu okrzyknięto królem Sieci. Choć intronizacja przebiega powoli i raczej po cichu, nie ma od niej odwrotu, zatem warto poznać najbardziej elementarne zasady tego języka.
XML już niemal dekadę temu okrzyknięto królem Sieci. Choć intronizacja przebiega powoli i raczej po cichu, nie ma od niej odwrotu, zatem warto poznać najbardziej elementarne zasady tego języka.
Artykuł nie aspiruje do roli podręcznika ani nawet warsztatu - jego celem jest pokazanie pewnej ścieżki krytycznej, streszczenia najprostszych zagadnień wiążących się z budowaniem dokumentu XML. Pomijamy w nim wiele szczegółowych zagadnień technicznych omawianych w podręcznikach - książki poświęcone językowi XML mają zwykle kilkaset stron.
Aby zrozumieć sens XML, trzeba wyjść w naturalny sposób od HTML - powszechnie znanego języka tworzenia stron internetowych - bo właśnie jego ograniczenia i niedostatki wydają się przyczyną istotnych reform, które zapoczątkowano w połowie lat 90.
Początki
HTML rozwijał się od początku lat 90. i składał się zawsze z zamkniętego, choć sukcesywnie poszerzanego w kolejnych specyfikacjach zestawu znaczników, zdefiniowanego przez World Wide Web Consortium - zestaw ten był zresztą również nieformalnie poszerzany przez producentów przeglądarek, którzy własne wyobrażenie o potrzebach WWW implementowali w swoich programach, powodując niekiedy spore zamieszanie, gdyż znaczniki takie były przez jedne przeglądarki interpretowane, a przez inne ignorowane.
Aby znacznik został wyświetlony w odpowiedni sposób, w przeglądarkę muszą być wbudowane reguły przetwarzania, które powodują, że z jednej strony jest on interpretowany zgodnie ze swoim charakterem, np. znacznik akapitu <p> lub tytułu <h1>, z drugiej zaś specyficznie formatowany, np. Times 10 pkt dla akapitu czy Arial 16 pkt dla tytułu. Charakterystyczną cechą HTML jest właśnie to ścisłe powiązanie struktury (pewnej hierarchii elementów) dokumentu, w którym występują tytuły, akapity, wykazy itd., z ich formatowaniem, czyli wizualizacją.
Inną charakterystyczną cechą funkcjonowania HTML w WWW jest duża tolerancja dla nie w pełni poprawnego zapisu znaczników. Przeglądarki tolerują niezamykanie znaczników czy stosowanie w nich małych i wielkich liter. Ma to zarówno zalety - wiele niepoprawnie napisanych stron może być bez kłopotów wyświetlonych w przeglądarce - jak i wady, bo toleruje niechlujstwo i brak poszanowania dla eleganckiego formalnie zapisu. Próbą odejścia od złych nawyków jest wprowadzenie języka XHTML, który do pewnego stopnia dyscyplinuje autorów stron, ale nie jest jeszcze powszechnie akceptowany przez webmasterów.
Wróćmy teraz do informacji, że język HTML jest zamkniętym językiem znaczników. Wyobraźmy sobie, że autor dokumentu HTML wpisuje w nim przykładowy znacznik:
<zwierzę> </zwierzę>

Dokument napisany w języku MathML, oglądany w Firefoksie.Co się stanie w przeglądarce internetowej? Nic. Przeglądarka zignoruje po prostu taki znacznik, gdyż nie jest on częścią języka HTML - jej wewnętrzny mechanizm renderingu nie przewiduje podobnego elementu. A przecież właśnie tego rodzaju znaczniki są powszechnie spotykane w dokumentach XML. Jasno z tego wynika, że nie da się wyposażyć przeglądarki w interpretację wszystkich możliwych znaczników, bo wyrazów będących znacznikami można napisać dowolnie wiele.
I tu właśnie dochodzimy do kluczowej sprawy - autor piszący dokument XML musi jednocześnie zdefiniować sposób, w jaki przeglądarka zinterpretuje tego rodzaju "dziwne" znaczniki. Krótko mówiąc, musi powiedzieć przeglądarce, że znacznik <zwierzę> </zwierzę> pełni określoną funkcję w dokumencie i ma być wyświetlony w określony sposób. Musi zaprojektować "gramatykę" języka.
Wynika z tego, że XML nie jest językiem, w którym bezpośrednio piszemy dokumenty, lecz językiem do sporządzania własnych języków, które są przez przeglądarkę lub inny program kliencki przetwarzane i wyświetlane zgodnie z podanymi regułami. Takich języków może być dowolnie wiele - wiele przyjęto jako standard, a najlepszym przykładem jest choćby język kanałów informacyjnych RSS, które są już powszechnie obecne w Internecie.
Inne przykłady to język MathML do tworzenia dokumentów matematycznych, CheML do budowania dokumentów z wzorami chemicznymi, SMIL do integrowania multimediów, SVG do
grafiki wektorowej, GedML do danych genealogicznych, MusicML do notacji muzycznej, AML do danych astronomicznych. Są też języki do biznesu i wielu innych zastosowań. Liczba ich stale rośnie - są ich już setki - gdyż taka forma przetwarzania danych została uznana za najlepszą metodę wymiany informacji w Internecie. Co ciekawe, każda osoba wyposażona w odpowiednią wiedzę może usiąść przy komputerze i od zera opracować własny język, który zawładnie jakąś dziedziną danych, bo nie wymaga to, poza pomysłem i pracą, żadnego specjalnego oprzyrządowania. Jednym słowem, buława marszałkowska tkwi w tornistrze każdego zdolnego webmastera.
Konstrukcja

Hierarchia danych XML w przeglądarce internetowej.Aby uchronić się przed bałaganiarskim sposobem zapisu, typowym dla HTML, zasady budowania dokumentów XML są precyzyjnie określone i nie ma tu miejsca na jakiekolwiek uchybienia. To bardzo ważna zasada, gdyż XML jest przede wszystkim narzędziem do wymiany informacji między maszynami, która musi być bezbłędna - trudno sobie wyobrazić, aby narzędzie do wymiany danych finansowych między firmami mogło prowadzić do jakichkolwiek przekłamań i nieporozumień spowodowanych niechlujnością zapisu.
Dokument XML w "surowej" postaci jest pewną hierarchią danych. Chcąc na przykład umieścić w dokumencie usystematyzowane informacje o państwach europejskich (nazwa, stolica, powierzchnia, ludność), możemy utworzyć plik z rozszerzeniem .xml, w którym pierwszy wiersz jest deklaracją dokumentu i użytej strony kodowej, po nim następuje pusty wiersz, natomiast pozostałe opisują w hierarchiczny sposób poszczególne rekordy naszej bazy.
Znacznik <państwa_europejskie> jest koniecznym (pojedynczym) elementem głównym dokumentu.
Znacznik <państwo> jest ogólnym pojemnikiem na dane niższego szczebla o poszczególnych państwach.
Znaczniki <nazwa>, <stolica> itd. zawierają konkretne dane o państwach.
Zauważ od razu, że wszystkie znaczniki są zamknięte, a więc składają się z części otwierającej, np. <nazwa>, i zamykającej, </nazwa>. Pamiętaj też, że XML rozróżnia wielkość liter, czyli poprawny jest znacznik <stolica> </stolica>, a niepoprawny jest <STOLICA> </stolica>.
<?xml version="1.0" encoding=" utf-8" standalone="yes" ?>
<państwa_europejskie>
<państwo>
<nazwa>Polska</nazwa>
<stolica>Warszawa</stolica>
<powierzchnia>312 tys. km 2.</powierzchnia>
<ludność>38 mln</ludność>
</państwo>
<państwo>
<nazwa>Czechy</nazwa>
<stolica>Praga</stolica>
<powierzchnia>79 tys. km 2.</powierzchnia>
<ludność>10,2 mln</ludność>
</państwo>
<państwo>
<nazwa>Niemcy</nazwa>
<stolica>Berlin</stolica>
<powierzchnia>349 tys. km 2.</powierzchnia>
<ludność>82 mln</ludność>
</państwo>
</państwa_europejskie>
Rezultat wczytania takiego pliku do przeglądarki internetowej jest następujący:
Plik taki nie zawiera, oczywiście, żadnej gramatyki języka ani informacji o sposobie wyświetlania danych. Jest tylko hierarchiczną bazą informacji.
Zauważ od razu, że przy wyświetlonych w przeglądarce znacznikach stopnia wyższego niż najniższy w hierarchii widnieją znaki minus (-). Oznacza to, że są węzłami. Gdy klikniesz taki minus, znacznik zostanie zwinięty i pojawi się przy nim znak plus (+), co oznacza, że można go ponownie rozwinąć kliknięciem.
Atrybuty
Warto jeszcze dodać, że w elementach możemy też stosować atrybuty, które dodatkowo precyzują informacje. Wartości atrybutów są umieszczane w cudzysłowach, co jest warunkiem poprawności składniowej dokumentu (o poprawności mówimy szerzej w punkcie "Poprawność składniowa i strukturalna").
Atrybuty w elementach XML pełnią taką funkcję, jak atrybuty w poleceniach HTML. Dla porównania, w języku HTML można zastosować znacznik:
<font size=4 color=red>
Znacznik <font> ma tutaj dwa atrybuty określające wielkość i kolor czcionki.
W dokumencie XML możemy napisać:
<język rodzaj="sztuczny" rok_powstania="1887">Esperanto</ język>
Tutaj także mamy dwa atrybuty - rodzaj języka i rok jego powstania.
W podanym już przykładzie moglibyśmy np. rozdzielić informacje o nazwie państwa na nazwę w języku polskim i nazwę w języku oryginału. Możemy zastosować dwa oddzielne znaczniki <nazwa_polska> i <nazwa_oryginalna>, ale możemy też użyć tego samego znacznika <nazwa>, ale z odmiennymi atrybutami, np.
<nazwa język="polski"> Czechy</nazwa>
<nazwa język="oryginalny" >cŠesko</nazwa>