spis treści.poprzedni.następny. Pabloware.com
 

Kurs języka XML

Pierwszy dokument XML

 

W tej części kursu przekonasz się, że przejście do XML-a z HTML-a, czy innego języka znacznikowego jest bardzo proste, a nawet jeżeli z HTML-em nie miałeś do tej pory zbyt wiele wspólnego, nadal XML okaże się łatwy w opanowaniu.

XML to język znaczników

W XML-u dane przechowywane są w sposób tekstowy, opisywane poprzez znaczniki, w obrębie których te dane się znajdują. Znacznik rozpoczyna lewy nawias kątowy (<), a kończy prawy (>). W uproszczeniu można przyjąć, że zestaw znaczników i ich zawartości tworzą dokument XML, będący najczęściej, ale niekoniecznie, plikiem. Pora na najbardziej chyba typowy przykład — Hello world, tym razem w XML-u:

<?xml version="1.0" standalone="yes"?>
<przykład>
  Witaj świecie!
</przykład>

Na początku znajduje się prolog dokumentu. W takim prologu umieszcza się zwykle deklaracje. Może to być standardowa deklaracja XML (pierwsza linia na listingu powyżej), czy np. deklaracja arkusza stylów. W linii drugiej rozpoczyna się element główny – absolutnie nieodłączna część każdego dokumentu XML. Ten nazywa się po prostu „przykład” (nazwę elementu głównego możemy oczywiście ustalić sami), a wewnątrz niego znajduje się treść „Witaj świecie!”. Można powiedzieć, że jest to jego zawartość tekstowa. Poniżej znajduje się lista tego wszystkiego, z czego może składać się dokument XML:

Elementy i atrybuty

W związku z tym, że naszła nas nieodparta ochota opisania wyżej wydrukowanej zawartości tekstowej, chcemy dodać do dokumentu właściwość o nazwie „typ”. Są dwie możliwości. Po pierwsze, można dodać podelement, po drugie można dodać atrybut. Oto wersja pierwsza:

<?xml version="1.0" standalone="yes"?>
<przykład>
  <typ>niezwykle oryginalny</typ>
  Witaj świecie!
</przykład>

I druga możliwość:

<?xml version="1.0" standalone="yes"?>
<przykład typ="niezwykle oryginalny">
  Witaj świecie!
</przykład>

Według mnie, w tym przypadku bardziej sensowny jest drugi wariant, a więc użycie atrybutu. W praktyce mógłbyś tworzyć aplikacje XML posługując się samymi tylko elementami, ale często uzasadnione będzie użycie właśnie atrybutów. Szczególnie, kiedy jakieś dane chcesz opisać. Jak taki atrybut wygląda już wiesz. Składa się z nazwy, znaku równości i ujętej w cudzysłów (pojedynczy, lub podwójny) wartości. Wartość ta NIE może składać się, podobnie jak tekstowa zawartość elementu, z nawiasów kątowych (tutaj można jednak użyć nawiasu zamykającego) no i oczywiście z cudzysłowów. Bezpośrednio nie możesz tam umieścić także znaku „&”. Dlaczego? Dowiesz się jeszcze w tym rozdziale.

Pamiętaj, że w przeciwieństwie do języka HTML, w XML-u wartości atrybutów musisz ujmować w cudzysłów. Jest tak dlatego, że programy odczytujące dokumenty XML (parsery) nie muszą znać ich struktury. W związku z tym składania dokumentów XML musi być bardziej precyzyjna, niż składnia SGML czy HTML.

Warto jeszcze wspomnieć o rzeczy dla HTML-owców nowej. O pustych elementach. W XML-u każdy niepusty element musi składać się z pary otwierającej i zamykającej. Przykładem jest główny element z listingu powyżej. Jeśli element nie zawiera żadnej zawartości, można oczywiście zastosować element otwierający i występujący bezpośrednio za nim zamykający, np.:

<Ala ma="kota"></Ala>

ale krótsze będzie użycie właśnie elementu pustego:

<Ala ma="kota"/>

Zwróć uwagę na znak „/” przed nawiasem zamykającym.

Skoro o parach znaczników mowa, to warto jeszcze wspomnieć, że w XML-u rozróżniana jest wielkość liter. Nieprawidłowy będzie więc kod: „<Ala></ala>”. Przy zamykaniu elementów pamiętaj także o zachowaniu struktury dokumentu. Błędne jest np. coś takiego: „<i><u>ąę</i></u>”, za to jak najbardziej poprawne jest: „<i><u>ąę</u></i>”. I to tyle.

Sekcje CDATA

Pozwalają włączyć do dokumentu tekst, który ma być zignorowany przez parser. Jedyne, co parser ma prawo z sekcją CDATA zrobić, to przekazać jej zawartość. Mogą one więc zawierać nawiasy kątowe i znaki ampersand, które w „zwykłej” zawartości tekstowej są niedozwolone:

<![CDATA[Hej! to & jest <właśnie> sekcja cdata.]]>

Jak widać powyżej, sekcję taką rozpoczyna ciąg „<![CDATA[”, a kończy „]]>”. Ten ostatni jest jedyną niedozwoloną zawartością sekcji. Kiedy parser ją spotka, będzie oczywiście „myślał”, że to koniec sekcji CDATA.

Instrukcje przetwarzania

Są pokrewne sekcjom CDATA, ale lepiej nadają się do „przemycania” w dokumentach XML np. skryptów. Funkcjonalność instrukcji przetwarzania jest tym większa, że pozwalają one na identyfikację swojej zawartości, po prostu poprzez nazwę. Nazwa ta występuje na samym początku, po znakach „<?” i funkcjonuje dokładnie tak samo, jak nazwa każdego elementu.

<?javascript alert("To jest <tylko> przykład."); ?>

<?php function printsum($a, $b) {
        echo $a + $b;
      }
?>

Instrukcja przetwarzania kończy się ciągiem „?>”. Zresztą, wspomniana na samym początku tego rozdziału deklaracja XML:

<?xml version="1.0" standalone="yes"?>

również jest instrukcją przetwarzania.

Komentarze

Pozwalają na dodanie uwag widocznych (zwykle) tylko w czasie edycji dokumentu. Oto przykład:

<!-- <bez> komentarza -->

Komentarz rozpoczyna ciąg „<!--” a kończy „-->”. Może on oczywiście zawierać zarówno nawiasy kątowe, jak i znaki ampersand.

Encje tekstowe

Encje te są czymś w rodzaju szablonów tekstu. Pozwalają uniknąć częstego wpisywania jakiegoś tekstu a tym samym także pomyłek. To również najlepszy sposób, na umieszczenie w kodzie „niedozwolonych znaków”:

<jakiś.tag> &lt; zostanie przez parser zastąpione lewym nawiasem kątowym </jakiś.tag>

Tak, zgadłeś! Ciąg „&lt;” oznacza znak „<”. Z kolei znak „>” to „&gt;”. Cudzysłów pojedynczy (') to „&apos;”,a podwójny (") to „&quot;”. Znak ampersand (&), to „&amp;”. Te pięć encji jest nazwanych predefiniowanymi. Inne znaki możesz cytować podając ich numer. Bądź to w postaci dziesiętnej, np. „&#80;” wstawi do kodu znak o numerze właśnie 80, bądź heksadecymalnej: „&#xF1;” wstawi znak numer 241.

Jeśli encji chciałbyś użyć do cytowania fragmentu tekstu, musisz „powiedzieć” parserowi, co dana encja oznacza. Wstawienie poniższego przykładu sprawi, że ilekroć wpiszesz w tekście ciąg „&adres;”, parser zamieni go na mój adres e-mail:

<!ENTITY adres "stroinski@pabloware.com">

Tak naprawdę, znacznik „!ENTITY” musi być wstawiony w DTD. Na razie tym się nie przejmuj, rzecz stanie się jasna, gdy poczytasz o Definicjach Typu Dokumentu.

Prolog

Prolog nie jest obowiązkową częścią dokumentu. Jeśli można go tam znaleźć, to na samym jego początku, jeszcze przed elementem głównym. Składa się z rozmaitych deklaracji (które, jak już wiesz, najczęściej są jednocześnie instrukcjami przetwarzania). Taką deklaracją jest np. wspomniana już standardowa deklaracja XML:

<?xml version="1.0"?>

Jedynym jej wymaganym atrybutem jest „version” — wersja, obecnie i być może już zawsze, będzie ona miała wartość „1.0”. Nieobowiązkowymi atrybutami są: „encoding” — kodowanie znaków (więcej na ten temat znajdziesz w następnym rozdziale) i „standalone”, który określa, czy dokument jest samodzielny (tzn., czy nie zawiera odwołań do źródeł zewnętrznych).

O innych deklaracjach dowiesz się, gdy będą omawiane związane z nimi zagadnienia.

Przykładowy dokument

Na koniec pokażę przykładowy dokument XML przechowujący dane osobowe. Będą tu używane elementy, atrybuty i jeden komentarz:

<!-- 
  Ten przykład zawiera tylko dwa rekordy, ale może mieć ich tyle, ile miejsca w pamięci :-)
-->
<ludzie>
  <człowiek dane="poprawne">
    <imie>Paweł</imie>
    <nazwisko>Stroiński</nazwisko>
    <poczta>stroinski@pabloware.com</poczta>
    <web>http://www.pabloware.com/</web>
  </człowiek>
  <człowiek dane="fikcyjne">
    <imie>Jan</imie>
    <nazwisko>Kowalski</nazwisko>
    <poczta>webmaster@kowalski.net</poczta>
    <web>http://www.kowalski.net</web>
  </człowiek>
</ludzie>

Poniżej ten sam dokument wyświetlony w prostym widoku drzewa:

[6950 bajtów]

Infox .edu 1.0 i plik ludzie.xml

 
spis treści.poprzedni.następny. Pabloware.com