8.1. Zápis XML dokumentu

Každý XML dokument začíná XML prologem. Ten minimálně obsahuje identifikaci dokumentu (XML deklaraci). Verze XML je vždy 1.0 a encoding udává použité kódování češtiny. XML deklarace musí být uvedena vždy, ale existuje jedna výjimka - pokud je celý dokument napsán v UTF-8 nebo UTF-16 můžeme ji vynechat.

ikona
<?xml version='1.0' encoding='utf-8'?>

Dále XML dokument obsahuje definici typu dokumentu (DTD), která poskytuje gramatiku dokumentu. Gramatikou rozumějme seznam značek, entit, atributů a vztahů mezi nimi.

ikona
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
          "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">

Typ dokumentu je uvozen DOCTYPE a definuje kořenový prvek, což je element, který v sobě obsahuje celý XML dokument. Každý XML dokument totiž musí být tvořen jedním elementem, do kterého se všechny ostatní zanořují. V našem případě je tímto kořenovým prvkem element book.

Za kořenovým elementem následuje veřejný identifikátor gramatiky pro XML dokument. Ten je pro danou gramatikou jednoznačný a dvě různé gramatiky by neměly mít stejný veřejný identifikátor. Dále je uveden identifikátor systémový které obsahuje URL kde se DTD nachází.

Elementy

Každý XML dokument tvoří vzájemně zanořené elementy. Tyto elementy se v textu vyznačují značkami, neboli tagy. Tagy se zapisují mezi znaky < a >. Tagy jsou buď párové, tzn. že text je uvozen počátečním tagem a koncovým tagem (např. <para>text<para> a nebo nepárové. Nepárové neobalují žádný konkrétní text a lze je zapsat zkráceně jedním tagem <xref linkend="test" />.

Při psaní XML dokumentu se do sebe elementy přirozeně zanořují, je však nezbytné dbát na jejich správné ukončování a zanořování. Prvky se nesmí „křížit“, např. konstrukce <strong>Ukázkový <em>text</strong></em> je očividně špatně. Také je třeba dát pozor na velikost písmen, neboť XML rozlišuje mezi velkými a malými písmeny.

Tagy mohou obsahovat atributy, které se uvádějí dovnitř elementu ve tvaru parametr="hodnota", např. <emphasis role="bold">text<emphasis>. Uvozovky kolem hodnoty atributu jsou povinné! Pokud hodnota atributu má uvnitř obsahovat uvozovky, můžeme ji uvodit apostrofy ('). Atributů může být libovolný počet a oddělují se tzv. „bílým znakem“, což je mezera, odřádkování nebo tabulátor.

Znakové entity

Některé znaky nelze do dokumentu přímo zapsat, neboť mají přímý význam při samotném značkování. Např. znak „<“ nelze do textu zapsat jen tak a musíme ho proto zapsat jako entitu &lt;. Entita vždy začíná znakem & a končí ;. Seznam použitelných entit je definován v DTD dokumentu. Většinou existují vždy jakési nejčastěji používané znakové entity a pokud DTD sami vytváříme, můžeme si nadefinovat libovolné vlastní.

XML obecně rozeznává pouze pět bezpečných entit, které máte k dispozici vždy nezávisle na tom co je v DTD. Jedná se o &amp;, &lt;, &gt;, &apos; a &quot;.

Pomocí entit můžema také vkládat znaky Unicode. Ty jsou zapsané číslem v šestnáctkové soustavě a uvozené symbolem #, např. &#x00A0;

Procesní instrukce

Procesní instrukce jsou uvozeny do <? … ?> a slouží pro předávání informací XML procesoru, zpracovávajícímu dokument. Je již na něm zda je nějak využije či nikoliv.V DocBooku s procesní instrukce občas využívají a to zejména pro určení formátování některých konstrukcí.

ikona
<?dbhtml list-presentation="table"?>
<?dbfo list-presentation="list"?>

Seznam těchto procesních instrukcí, použitelných pro DocBook je obsažen v dokumentaci ke XSL stylům od Normana Walshe. (Instrukce existují ve verzích pro generování HTML (dbhtml i FO dbfo, respektive PDF). Krátká zmínka o procesních instrukcích je také na konci 8. kapitoly publikace [Sta-05]

Komentáře

Vše, co uzavřeme do „<!--“ a „-->“ bude považováno za komentář a bude ignorováno. Komentář může obsahovat cokoliv, kromě -- a komentáře tudíž nemohou být vnořené. Taktéž není možno vložit komentář do tagu a není možno je napat před XML deklaraci.

Sekce CDATA

Pokud potřebujeme vložit větší kus textu, který obsahuje znaky se speciálním významem, je nepohodlné je převádět na entity. Typickým příkladem je vkládání zdrojových kódů. K tomuto účelu slouží sekce CDATA, ve které je veškerý obsah interpretován tak jak je zapsán. Může obsahovat cokoliv, kromě uzavíracího symbolu ]]>.

ikona
<![CDATA[
 cout<<"Hello world"<<endl;
]]>

Validace dokumentu

O XML dokumentu, který splňuje všechna výše uvedená pravidla můžeme říci že je „správně vytvořený“(well-formed). My bychom měli tvořit jenom takové dokumenty.

Jestli dokument odpovídá svojí gramatice, definované v DTD nám zajistí proces zvaný validace. Tu umí provádět některé XML procesory, které XML dokument zpracují a porovnají jeho strukturu vůči DTD. Případné odchylky označí za chybu a vypíší na výstup. Nejpoužívanějším validátorem pro XML je program xmllint.

ikona
Zásady tvorby validních XML dokumentů

  1. Na začátku dokumentu musí být uvedena XML deklarace a definice jeho typu (DTD).

  2. Elementy obsahující data musí být vždy uvozeny mezi počáteční a koncovou značku.

  3. Elementy neobsahující data a používající jednu značku musí končit />

  4. Dokument obsahuje pouze jeden kořenový element, ve kterém jsou zanořeny všechny ostatní elementy.

  5. Elementy mohou být zanořeny, nesmějí se však překrývat.

  6. Hodnoty atributů musí být uzavřeny v uvozovkách nebo apostrofech.

  7. Speciální znaky (>, &, …) uvádíme jako entity.

  8. Bezpečných entit existuje jenom pět. Existenci jiných entit ověřte v DTD.