XML pro web aneb od teorie k praxi - 3.díl

Tento díl by měl přinést odpověď na otázku, jaké další prvky, kromě elementů, jejich atributů a textu, může XML dokument obsahovat. Také se začneme zabývat validitou XML dokumentu a nakousneme téma DTD.

Značkování a znaková data

Pro začátek si definujme 2 pojmy, kterých bude použito v dalším výkladu. Značkování (markup) se vyskytuje ve formě počátečních, koncových a prázdných tagů, či XML deklarace. Ke značkování se dále řadí prvky, které jsou vysvětleny dále, tj. komentáře, procesní instrukce a sekce CDATA. Termínem znaková data (character data) se označuje to, co není zahrnuto do značkování - to jsme minule nazývali textem. Nejjednodušeji to lze ukázat na příkladu.

<název>XML pro web aneb od teorie k praxi, 2.díl</název>

<název> a </název> je markup, kdežto XML pro web aneb od teorie k praxi, 2.díl je character data.

Nyní se podívejte na poněkud upravený příklad XML dokumentu z minulého dílu. Barevně jsou odlišeny nové prvky.


<?xml version=`1.0`?>
<článek>
	<!-- toto je komentář, použití je stejné, jako v HTML...-->
	<název>XML pro web aneb od teorie k praxi, 2.díl</název>
	<autor>
	<?php
	if(!$autor && $input>0) {
		echo `...(autor nebyl zadán)...`;
	} else {
		echo $autor;
	}
	?>
	</autor>
	<info typ="seriál" díl="2." periodicita="jednou týdně" />
	<domek název="Programování">
		<kategorie název="WAP / XML" />
	</domek>
	<příklad>
		<![CDATA[Příklad prázdného elementu v XML: <kategorie název="WAP / XML" />...]]>
	</příklad>
</článek>

Komentáře

Komentáře jistě znají všichni, kdo pracují s HTML.

<!-- toto je komentář, použití je stejné, jako v HTML...-->

Komentář začíná znaky <!-- a je ukončen znaky -->. Může se vyskytovat kdekoliv v XML dokumentu, ovšem nikoliv "uvnitř" dalšího značkování - tj. umístění komentáře např. v počátečním tagu elementu, nebo v XML deklaraci vám neprojde. Uvnitř textu komentáře si můžete psát, co vás napadne (...téměř), bez problémů projdou i jakékoliv tagy, jelikož obsahu komentářů není XML procesorem interpretován jako character data. Je asi vcelku jasné, že nesmíte použít sekvenci znaků vyhrazenou pro ukončení komentáře. Kromě toho ovšem, z důvodu kompatibility se SGML, nesmíte použít ani dvě pomlčky za sebou (--).

Procesní instrukce

Procesní instrukce (Processing Instructions, nebo zkráceně PI) je způsob, jak do XML dokumentu začlenit příkazy pro zpracování určitou aplikací. Zpravidla se jedná o příkazy nějakého programovacího jazyka. V příkladu je použita procesní instrukce jazyka PHP:

<?php
	if(!$autor && $input>0) {
		echo `...(autor nebyl zadán)...`;
	} else {
		echo $autor;
	}
?>

Jak vidíte, jedná se tutéž metodu, jakou se dnes běžně vkládají PHP příkazy do HTML stránky, která je na serveru zpracovávána PHP interpreterem (taková stránka se identifikuje nejčastěji pomocí přípony .php). Procesní instrukce začíná sekvencí znaků <? a bezprostředně za ní následuje identifikátor aplikace (Processing Instruction Target), pro kterou je obsah procesní instrukce určen. Procesní instrukce je zakončena sekvencí znaků ?>. Někdo si možná již všiml formální podobnosti procesní instrukce a XML deklarace - aby nedocházelo ke konfliktním situacím, názvy identifikátorů "xml" (v libovolné kombinaci malých a velkých písmen) jsou vyhrazena. Obsah procesní instrukce není považován za character data, takže použití znaků <>& nedělá žádnou neplechu.

Sekce CDATA

Pokud potřebujeme do XML dokumentu začlenit text, ve kterém je hojně použito znaků, které by za normálních okolností byly interpetovány XML procesorem jako markup, máme dvě možnosti. První možností je použití předdefinovaných entit (viz. minulý díl), kterými nahradíme všechny nebezpečné znaky. Druhou možností je ponechat všechny znaky tak, jak jsou, a celý blok textu uzavřít do sekce CDATA.

<![CDATA[Příklad prázdného elementu v XML: <kategorie název="WAP / XML" />...]]>

Sekce CDATA začíná sekvencí znaků <![CDATA[ a je ukončena znaky ]]>.

V této chvíli již máte poměrně solidní přehled o tom, co všechno může XML dokument obsahovat. Aby bylo možno pokračovat dále ve skládání mozaiky informací o XML, bude nutné odtajnit další dva pojmy, které nám určí další směr výkladu. Jsou to Validita a DTD.

Validita a DTD

Kromě toho že XML dokument musí být well-formed, tak také navíc může být valid (validní, platný). Dokument je validní, pokud obsahuje deklaraci typu dokumentu (Document Type Declaration) a vyhovuje pravidlům, které mu tato deklarace nařizuje. Tato pravidla, která definují konkrétní podobu elementů, atributů, jejich obsahu a dalších prvků (entit, notací) v dokumentu, jsou popsaná pomocí speciálního jazyka, tzv. DTD (Document Type Definition, tj. "Definice typu dokumentu").

Použití DTD je onen kýžený způsob, jak vytvářet vlastní formáty založené na XML. Jistě znáte (X)HTML Validátor, s jehož pomocí můžete zkontrolovat validitu vašich (X)HTML stránek - v principu se nejedná o nic jiného, než o kontrolu, jestli váš kód odpovídá DTD příslušné verze jazyka (X)HTML (DTD mohou i mít formáty založené na SGML, proto lze i ověřovat validitu HTML). Jinými slovy, XHTML není vlastně nic jiného, než formát založený na XML určený příslušnou definicí typu dokumentu.

Deklarace typu dokumentu

Aby však předchozí nastínění dostalo konkrétní obrysy, podívejme se na to jak může vypadat ona Deklarace typu dokumentu.


<?xml version=`1.0`?>
<!DOCTYPE článek SYSTEM "article.dtd">
<článek>
	...
</článek>

Deklarace typu dokumentu se do dokumentu vkládá mezi XML deklaraci a kořený element. Začíná sekvencí <!DOCTYPE a po mezeře následuje jméno. Toto jméno musí být shodné se jménem kořenového elementu (v našem případě "článek"). Po klíčovém slově SYSTEM následuje systémový identifikátor. Systémový identifikátor je odkaz (lépe řečeno URI) vedoucí k souboru, který obsahuje samotné DTD (v našem případě je to soubor article.dtd). Pokud je DTD uloženo takto v odděleném souboru, mluvíme o externím subsetu (external subset). Místo systémového identifikátoru může být v deklaraci typu dokumentu tzv. veřejný identifikátor. Veřejný identifikátor se používá u obecně známých a používaných DTD, uveďme příklad XHTML.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">

Předchozí případy ale nejsou jedinými možnostmi deklarace DTD. Podívejme se na další způsob:


<?xml version=`1.0`?>
<!DOCTYPE článek [
  <!ELEMENT autor (#PCDATA)>
]>
<článek>
	...
</článek>

V tomto případě je přímo v deklaraci typu dokumentu uvedena samotná deklarace značkování. Mluvíme pak o interním subsetu. DTD se tedy nachází přímo v dokumentu a nikoliv mimo něj v samostatném souboru. Oba způsoby lze zkombinovat a deklarace typu dokumentu může obsahovat jak externí subset, tak interní subset.


<?xml version=`1.0`?>
<!DOCTYPE článek SYSTEM "article.dtd" [
<!ELEMENT autor (#PCDATA)>
]>
<článek>
	...
</článek>

V případě, že deklarace typu dokumentu obsahuje interní i externí subset, má v případě konfliktu přednost interní subset, který je zpracováván jako první. Stejně tak při vícenásobné deklaraci jednoho prvku v rámci DTD se použije první deklarace.

Co vše může externí a interní subset obsahovat (a tedy jak vypadá vytváření vlastního konkrétního DTD) si necháme na příště.

Váš názor Další článek: BlueTooth ovladače pro Windows XP

Témata článku: Software, Programování, Echo, Domek, Teorie, XML, Gold, Formální ukončení, Element, Znak, Code


Určitě si přečtěte

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

** V digitálním světě nemůžete věřit všemu ** Nová generace 3D fotoeditorů zvládne divy ** Vyzkoušeli jsme PortraitPro, který vám změní i kontaktní čočky

Jakub Čížek | 10

Nechali jsme dopadnout asteroid Ryugu na Prahu. Místo stověžatého města je pětikilometrový kráter

Nechali jsme dopadnout asteroid Ryugu na Prahu. Místo stověžatého města je pětikilometrový kráter

** Ryugu je blízkozemní planetka, která křižuje dráhu Země ** Její průměr je asi 900 metrů ** Co by se stalo, kdyby Ryugu dopadla na Zemi?

Petr Kubala | 5

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

** Strojové učení v posledních deseti letech dokázalo divy ** Používáme ho dnes každý den nejen ve vyhledávači ** A přesto se člověku nepřibližuje ani náznakem

Jakub Čížek | 59

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

** Airlander 10 nabídne plavby vzduchem v interiéru s prosklenou podlahou ** Luxusní vzducholoď byla původně vyvíjena pro vojenské účely ** Počítá se s třídenními „kochacími“ výlety za poznáním

Karel Kilián | 7


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku