XML pro web aneb od teorie k praxi, 2.díl

Náplní dnešního dílu bude vysvětlení základních syntaktických pravidel, kterým musí XML dokument vyhovět. Na příkladu jednoduchého XML dokumentu budou vysvětleny nejdůležitější pojmy.

Na začátek rada pro úplné začátečníky - XML dokumenty lze vytvářet a editovat v libovolném HTML editoru, který pracuje se samotným zdrojovým kódem (non-WYSISYG). Jestli je dokument správně strukturovaný, lze vyzkoušet velmi jednoduše - otevřením XML souboru v prohlížeči Microsoft Internet Explorer verze 5 a vyšší nebo Mozilla - dokument se zobrazí pouze v případě, že je well-formed, jinak parser vypíše chybu. V Internet Exploreru bude prostý XML dokument také velmi přehledně zformátován (barevné odlišení, odsazení elementů...), což může být někdy docela užitečné. V Mozille se zobrazí jen prostý textový obsah elementů.

XML dokument

Základní "jednotkou" pro datové objekty v XML je dokument. Právo být nazýván XML dokumentem má pouze takový dokument, který je well-formed ("správně strukturovaný", řekli bychom česky). Znamená to, že splňuje formální požadavky, které popisuje specifikace XML. Obecně řečeno tyto formální požadavky na nejobecnější úrovni určují, jak takový XML dokument vypadat může či nemůže. Základní pravidla "správného strukturování" (well-formedness) si ukážeme na příkladě velmi jednoduchého (správně strukturovaného) dokumentu.


<?xml version=`1.0`?>
<článek>
	<název>XML pro web aneb od teorie k praxi, 2.díl</název>
	<autor>Jakub Havel</autor>
	<info typ="seriál" díl="2." periodicita="jednou týdně" />
	<domek název="Programování">
		<kategorie název="WAP / XML" />
	</domek>
</článek>

Jak vidíte, příklad obsahuje informace o článku, který právě čtete a je jakýmsi fiktivním "štítkem" ve smyšlené elektronické kartotéce redakčního systému tohoto serveru, samozřejmě založené na XML :-).

XML deklarace

První řádek

<?xml version=`1.0`?>

je tzv. XML deklarace. Je uzavřena mezi počáteční sekvenci znaků <? a ukončující sekvenci ?>. Atribut version určuje verzi standardu XML. V současné době lze jako označení verze použít pouze "1.0", nicméně v budoucnosti mohou být vydány další verze standardu XML. Jak jste si možná všimli, hodnotu atributu version můžete uzavřít do jednoduchých, nebo dvojitých uvozovek (to ostatně platí i při uvozování hodnoty jakéhokoliv jiného atributu v XML dokumentu).

Kódování

XML deklarace v našem příkladu je minimální možná. Kromě povinného uvedení verze může obsahovat deklaraci kódování.

Pokud by náš dokument měl zůstat well-formed i s touto minimální XML deklarací, musel by být uložen v kódování UTF-8. Kódování UTF-8 ukládá znaky do rozdílného počtu bytů - základní ASCII znaky (tj. také všechny znaky anglické abecedy, bez diakritiky) jsou kódovány v UTF-8 do 1 bytu. Dá se tedy říci, že ASCII je podmnožinou UTF-8 - pokud v XML dokumentu vystačíme bez diakritiky (např. pokud dokument obsahuje jen anglická slova), nemusíme si kódováním dokumentu vůbec lámat hlavu. Náš příklad však obsahuje české znaky (všimněte si, že lze použít i názvy elementů a atributů s diakritikou) - tak tedy co s tím?

Pokud má dokument obsahovat české znaky (obecně řečeno jakékoliv "exotické" znaky), existuje několik možností. První možnost je vytvářet a ukládat dokumenty přímo v kódování UTF-8, pokud to dovoluje váš editor, nebo software. Druhá možnost je dokumenty vytvořené např. v kódování windows-1250 (což je asi nejčastější případ díky platformě MS Windows) překódovat pomocí speciálních utilit do UTF-8. Třetí možností je ponechat dokumenty v jiném kódování a specifikovat použité kódování v XML deklaraci. Konkrétně v našem příkladu by pak XML deklarace dostala tuto podobu:

<?xml version=`1.0` encoding=`windows-1250`?>

Stejně tak dobře (resp. striktně řečeno ještě lépe) můžeme zvolit i kódování ISO:

<?xml version=`1.0` encoding=`ISO-8859-2`?>

Samozřejmě můžete použít i kterékoliv jiné registrované kódování.

Přestože XML dovoluje použít v podstatě libovolné kódování, v mnoha ohledech se vyplatí používat univerzální UTF-8. Podle normy XML musí program, který pracuje s XML dokumenty, rozumět kódování UTF-8, případně UTF-16. Ostatní kódování podporovat nemusí. Pro příklad nemusíme chodit daleko - funkce XML parseru v PHP, založené na parseru Expat, dovolují kódování ASCII, ISO-8859-1 a UTF-8. S dokumentem v jakémkoliv z "východoevropských" kódování tedy příliš nepochodíme...

Pro zajímavost můžete prozkoumat XML dokument z našeho příkladu v kódování UTF-8 a v kódování windows-1250.

XML deklarace může obsahovat ještě jeden nepovinný atribut, a tím je standalone. Tento atribut může nabývat hodnoty "yes" a "no". Atribut standalone bude vysvětlen v dalších dílech.

Kořenový element

XML dokument musí obsahovat alespoň jeden element, do kterého je uzavřen všechen ostatní obsah dokumentu (tj. další elementy, text a další přípustné entity, o kterých bude řeč později). Tento element se nazývá kořenový element (root, nebo také document element). V našem příkladu je kořenovým elementem článek.

Elementy

Začali jsme hovořit o elementu, nicméně dělo se tak se zamlčeným předpokladem, že všichni vědí, co to ten element vlastně je zač... I když to zřejmě naprostá většina čtenářů velmi dobře ví, bylo by dobré pojem element vysvětlit.

Element je vymezen počátečním tagem a koncovým tagem ("uvnitř" elementu pak může být i další obsah), a nebo je prázdný. Příkladem elementu s obsahem:

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

Příklad prázdného elementu:

<info typ="seriál" díl="2." periodicita="jednou týdně" />

Element s obsahem

Počáteční tag elementu je ohraničen znakem < na začátku a znakem > na konci. Koncový tag musí začínat znaky </ a končit znakem >. Je zřejmé, že počáteční a koncový tag musí mít stejné jméno (např. "název" v našem příkladu). Uvnitř elementu se může vyskytovat jakýkoliv další přípustný obsah, nejčastěji je to text nebo další elementy.

Prázdný element

Prázný element je takový element, který nemá žádný další obsah. Výše uvedený prázný element bychom klidně mohli zapsat také takto:

<info typ="seriál" díl="2." periodicita="jednou týdně"></info>

Přestože oba zápisy jsou naprosto ekvivalentní a well-formed, níže uvedený zápis je, jak sami jistě uznáte, méně účelný. S prázdnými elementy se proto spíše setkáme ve formě tagu pro prázný element, který začíná znakem < a je ukončen znaky />. Není pak potřeba doplňovat ukončovací tag, přestože element je řádně uzavřený.

Zde je nutné upozornit na rozdíl oproti jazyku HTML - všechny elementy musí být v XML dokumentu uzavřené! Není přípustné, aby se element vyskytoval v dokumentu pouze ve formě počátečního tagu. Názorně si to můžeme ilustrovat na příkladu elementu HR (horizontal rule, horizontální oddělovací linie), který je v HTML neuzavřený (<hr>). V jazyku XHTML, který odpovídá pravidlům XML, je nutné tento element uvést v podobě tagu pro prázný element (<hr />).

Jména elementů

Jméno elementu samozřejmě nesmí obsahovat žádné mezery (jednoduše řečeno musí to být "jedno slovo") a může obsahovat všechna písmena (i s diakritikou), číslice a dále znaky . (tečka), - (pomlčka, mínus), _ (podtržítko). Počátečním znakem může být pouze písmeno nebo podtržítko. Ve jménu elementu se může také vyskytnou znak : (dvojtečka), nicméně pouze v případě, že řetězec před ním je tzv. namespace prefix (identifikátor jmenného prostoru). Jmennými prostory se budeme zabývat v průběhu dalších dílů seriálu. Řetězec "xml" na začátku názvu elementu (case insensitive, tj. i jakákoliv kombinace velkých a malých písmen "x", "m" a "l" takto za sebou), je vyhrazen pro jiné účely či pro budoucí použití, proto je lépe ho na začátku názvu elementů nepoužívat - nicméně pokud jej použijete, dokument zůstane well-formed.

Příklad správných jmen elementů: e-lement, e_lement, ele.ment, ele.-_ment, e75-le-m_e..., _element .

Příklad chybných jmen elementů: -element, 8element, .element .

Atributy

Jistě jste si všimli, že tag nemusí obsahovat pouze jméno elementu. Dalšími prvky, které se mohou vyskytnout v počátečním nebo prázném tagu kteréhokoliv elementu, jsou atributy. Atribut je tvořen párem jména atributu a hodnoty atributu. Hodnota atributu musí být uzavřena v jednoduchých nebo dvojitých uvozovkách a přiřazena jménu atributu rovnítkem (=).

Například náš prázdný element obsahuje tři atributy:

<info typ="seriál" díl="2." periodicita="jednou týdně" />

První atribut nese název typ a jeho hodnotou je řetězec seriál, druhý atribut se jmenuje díl a nese hodnotu 2., třetí atribut periodicita má hodnotu jednou týdně. V našem příkladu mají atributy také elementy domek a kategorie.

Pro názvy atributů platí úplně stejná pravidla, jako pro názvy elementů, takže výše uvedené příklady správných a chybných názvů elementů lze bez výjimky vztáhnout i na atributy. Atribut s určitým jménem smí být v jednom elementu uveden pouze jedinkrát. Následující zápis je tedy chybný (což je vcelku logické):

<info typ="seriál" typ="zpráva" />

Hodnota atributu také nesmí obsahovat znak < (který označuje počátek tagu). Stejně tak nemůže obsahovat uvozovky stejného typu, který byl použit pro vymezení hodnoty atributu. Je zřejmé, že podobný problém se může vyskytnout v textu, který je obsahem elementu - pokud použijeme znak <, bude považován za počátek tagu dalšího elementu. Jak to tedy s těmi nebezpečnými znaky je?

Předdefinované entity

Standard XML definuje několik tzv. předdefinovaných entit, které slouží k nahrazení znaků, které mohou kolidovat se značkováním v XML dokumentu:

znak entita
< &lt;
> &gt;
& &amp;
` &apos;
" &quot;

Pokud potřebujeme použít některé z "citlivých" znaků v textu či hodnotě atributu, nejjednodušší řešení je použít tyto předdefinované entity k jejich nahrazení. Problematika entit jako takových je v XML poněkud rozsáhlejší a budeme se jí zabývat v přístích dílech.

XML dokument může obsahovat i jiné součásti, než XML deklaraci, elementy, atributy a text. Těmi se však budeme

Diskuze (16) Další článek: Opravte si kritickou chybu v Java VM od Microsoftu

Témata článku: Software, Programování, Well, Jednoduchý typ, Info, Teorie, Code, Element, Znak, Nejčastější případ, XML


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

Vylaďte si Wi-Fi: Podívejte se, jaká pásma máte doma volná a kam signál nedosáhne

Vylaďte si Wi-Fi: Podívejte se, jaká pásma máte doma volná a kam signál nedosáhne

** Prozkoumejte, jaké pásmo je pro vaši síť nejlepší ** Díky heat mapě snadno poznáte, kde to bude se signálem horší ** Vše zvládnete i z mobilního telefonu

Vladislav Kluska | 36

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

** Evropská komise přijala legislativní návrh na zrušení střídaní času ** Možná tak v březnu 2019 přesuneme ručičky hodinek naposledy ** Od toho okamžiku bude permanentně platit letní čas

Karel Kilián | 106

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

** Máme eObčanku, máme čtečku, vyzkoušeli jsme přihlášení na weby úřadů. ** Objevily se drobné problémy, podařilo se nám je vyřešit. ** Používání eObčanky pro online identifikaci je velmi pohodlné.

Marek Lutonský | 35

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

** Je lepší nabušený Photoshop, nebo program s jedním tlačítkem? ** Photolemur si myslí to druhé ** Tento fotoeditor neumí skoro nic, a přitom (skoro) všechno

Jakub Čížek | 19

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

** Srpen byl třetí nejteplejší za posledních více než sto let ** Bude to ale daleko horší, jak ukazuje aplikace NYT ** V Praze vzroste počet horkých dní na čtyřnásobek

Karel Kilián | 21


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