- XML elementy
- Atributy XML
- Validace XML
- XML a webové prohlížeče
V minulé části seriálu jsme probrali naprosté základy XML a nejdůležitější syntaktická pravidla a dnes se podíváme na zoubek XML elementům, atributům, validaci a jak si webové prohlížeče umí poradit s XML.
XML elementy
XML elementy jsou rozšiřitelné
Podívejte se na následující kousek kódu v XML.
<zprava>
<pro>Tomáš</pro>
<od>Jana</od>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
Na chvíli si představte, že již umíte zobrazovat XML dokumenty a vytvořili jste aplikaci, která vybere prvky <pro>, <od>
a <telo>
. Výstup bude vypadat třeba takto:
ZPRÁVA
Pro: TomášOd: Jana
Nezapomeň na mě tenhle víkend!
Co se stane, když autor XML dokumentu do něj přidá nějaké další informace?
<zprava>
<datum>2002-08-01</datum>
<pro>Tomáš</pro>
<od>Jana</od>
<predmet>Předmět</predmet>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
Měla by se aplikace přerušit nebo zhroutit? Ne, protože program stále může najít prvky <pro>
, <od>
a <telo>
a vyprodukovat ten samý výstup.
XML elementy mají mezi sebou vztahy
K porozumění terminologii XML musíte vědět, jak jsou vztahy mezi XML elementy pojmenovány a jak jsou popisovány hodnoty elementů. Představte si, že toto je obsah knihy:
Úvod do XML
- Co je HTML
- Co je XML
Syntaxe XML
- Elementy musí mít ukončovací tag
- Elementy musí být vhodně vloženy
A představte si, že tento XML dokument popisuje knihu:
<kniha>
<titul>Moje první XML</titul>
<tisk id="33-657" medium="papír">
<kapitola>Úvod do XML
<část>Co je HTML</část>
<část>Co je XML</část>
</kapitola>
<kapitola>Syntaxe XML
<část>Elementy musí mít ukončovací tag</část>
<část>Elementy musí být vhodně vložené</část>
</kapitola>
</kniha>
<kniha>
je hlavní element (root element). <titul>
, <tisk>
a <kapitola>
jsou potomky elementu <kniha>
. <kniha>
je rodič prvků <titul>
, <tisk>
a <kapitola>
. <titul>
, <tisk>
a <kapitola>
jsou sourozenci (či sesterské elementy), protože mají stejného rodiče.
Hodnoty elementu
XML element je vše od počátečního tagu do ukončovacího tagu (včetně). A každý element může mít rozdílné typy hodnot. Hodnotou elementu může být:
- element
- smíšená hodnota
- jednoduchá hodnota (text)
- prázdná hodnota
- element může mít atributy
V příkladu nahoře, <kniha>
má jako hodnoty elementy. <kapitola>
má smíšenou hodnotu, protože obsahuje jak text, tak další elementy. <část>
má jednoduchou hodnotu (pouze text). lt;tisk>
je prázdný element, protože nepřenáší uvnitř žádnou informaci.
V příkladu pouze element <tisk>
má atributy. Atribut pojmenovaný id
má hodnotu 33-657. Atribut medium
má hodnotu papír.
Název elementu
Název XML elementu musí dodržovat tato pravidla:
- Název může obsahovat písmena, čísla i ostatní znaky.
- Název nesmí začínat číslem nebo interpunkčním znaménkem.
- Název nesmí začínat písmeny xml (popř. XML, Xml, atd.).
- Název nesmí obsahovat mezery.
Název může být při dodržení pravidel prakticky jakýkoliv. Ale je rozumné vytvářet názvy, které něco říkají o svém obsahu. Výborným pomocníkem je podtržítko.
<jmeno_uzivatele>
<prijmeni_uzivatele>
Vyvarujte se „-“ a „.“ v názvu. Pokud něco pojmenujete jmeno-uzivatele, může se stát, že váš software zkusí odečíst slovíčko uzivatele od jmeno. Pokud byste použili název jmeno.uzivatele, může si váš software myslet, že uzivatele je vlastnost objektu jmeno.
Název elementu může být libovolně dlouhý, ale nic se nemá přehánět. V zájmu přehlednosti by měl být název krátký a hlavně výstižný. Např. <titulek_knihy>
se mi zdá vhodnější než <titulek_na_uvodni_strance_knihy>
.
XML dokumenty se často používají jako zdrojová data do databáze. Je proto dobré dodržovat pravidla pojmenování, které podporuje vaše databáze (z tohoto důvodu doporučuji nepoužívat diakritiku).
Neanglická písmena jako é, ò, á
jsou v XML povolena, ale dávejte si pozor, zda jsou tyto znaky povolené i v softwaru, který bude využívat vašeho dokumentu (např. databáze).
Dvojtečka „:“ by se neměla vyskytovat v názvu elementu, protože je rezervována pro jmenné prostory (anglicky namespaces), kterým se budu věnovat déle.
Atributy v XML
Určitě si z HTML vzpomenete na: <IMG SRC="computer.gif">. Atribut SRC přenáší další informace o elementu IMG (jaký obrázek má být zobrazen).
V HTML i XML poskytují atributy doplňující informace k elementu.
<img src="computer.gif">
<a href="demo.asp"></a>
Atributy často přenášejí informace, které nejsou částí dat. V příkladu dole, typ souboru je vzhledem k datům bezvýznamný, ale mohl by být důležitý pro software, který s elementem manipuluje.
<soubor typ="gif">computer.gif</soubor>
"atribut" nebo 'atribut'
Hodnoty atributů musí být vždy uzavřeny buď v jednoduchých nebo v dvojitých uvozovkách. Pro pohlaví člověka může tag <clovek> vypadat takto:
<člověk pohlavi="žena">
nebo takto:
<člověk pohlavi='žena'>
Pokud má hodnota atributu v obsahu dvojité uvozovky, je nezbytné použít jednoduché uvozovky:
<gangster jmeno='George "Shotgun" Ziegler'>
A naopak, pokud hodnota atributu obsahuje jednoduché uvozovky, je nezbytné použít dvojité uvozovky:
<gangster jmeno="George 'Shotgun' Ziegler">
Elementy vs. atributy
Data můžeme uložit jako atribut, nebo jako element. Nyní se podívejte na dva jednoduché příklady:
<osoba pohlavi="žena">
<jmeno>Anna</jmeno>
<prijmeni>Smith</prijmeni>
</osoba>
<osoba>
<pohlavi>žena</pohlavi>
<jmeno>Anna</jmeno>
<prijmeni>Smith</prijmeni>
</osoba>
V prvním příkladu je pohlavi atributem. V druhém je pohlavi potomkem elementu. Ale přesto obě varianty poskytují stejnou informaci.
Neexistují žádná pravidla, kdy použít atribut a kdy element. Z mé zkušenosti vyplývá, že atribut je užitečný (vlastně nutný) v HTML, ale v XML se jim zkouším vyvarovat. Důvod se vám budu snažit vysvětlit v následujících odstavcích.
Nejradši ukládám data jako podelementy. Následující tři XML dokumenty obsahují ty samé informace. V prvním příkladě je datum atributem, v druhém elementem a v třetím je datum rozděleno na jednotlivé elementy (<den>
, <mesic>
, <rok>
). Poslední ze zobrazených způsobů pokládám za nejlepší.
<zprava datum="12/11/2002">
<pro>Tomáš</pro>
<od>Jana</od>
<zahlavi>Připomínka</zahlavi>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
<zprava>
<datum>12/11/2002</datum>
<pro>Tomáš</pro>
<od>Jana</od>
<zahlavi>Připomínka</zahlavi>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
<zprava>
<datum>
<den>12</den>
<mesic>11</mesic>
<rok>2002</rok>
</datum>
<pro>tomáš</pro>
<od>Jana</od>
<zahlavi>Přípomínka</zahlavi>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
Nepoužívat atributy?
Některé problémy s používáním atributů jsou:
- Atributy nemohou obsahovat složené hodnoty (potomci ano).
- Atributy nejsou jednoduše rozšiřitelné pro budoucí změny.
- Atributy nemohou popisovat struktury (potomci ano).
- Atributy jsou těžkopádnější při editaci či při čtení programovým kódem.
- Je složité testovat správnost atributu pomocí DTD.
Používáte-li atributy jako úložiště pro data, dříve nebo později zjistíte, že čtení, editace a údržba XML dokumentu je mnohem těžší než kdyby byly informace ve formě elementu. Zkuste používat XML elementy k popisu dat a atributy pouze k popisu informací, které se netýkají dat.
Zde je praktická ukázka toho, jak by nemělo být s XML nakládáno:
<zprava den="12" mesic="11" rok="2002" od="Tomáš" pro="Jana" zahlavi="Upomínka" telo="Nezapomeň na mě tento víkend!">
<zprava>
Výjimka potvrzuje pravidlo
Přestože se striktně držím pravidla používat atributy v XML co nejméně, tak přece jenom mám jednu výjimku. Občas přiřazuji ID reference k elementu. ID se většinou používá k přístupu k XML elementu (stejně jako v databázích apod.). Zde je příklad:
<zpravy>
<zprava id="p501">
<pro>Tomáš</pro>
<predmet<Připomínka</predmet>
<od>Jana</od>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
<zprava id="p502">
<pro>Jana</pro>
<od>Tomáš</od>
<predmet<Re: Připomínka</predmet>
<telo>Nezapomenu!</telo>
</zprava>
</zpravy>
ID je zde pouze čítačem či jedinečným identifikátorem k rozpoznání zpráv v XML souboru, ale není částí dat ve zprávě.
Teď se snažím říci, že metadata (data o datech) by měla být uložena jako atribut a že samotná data mají být uložena jako XML elementy.
Validace XML
Správný XML dokument je takový, který je vytvořen podle pravidel syntaxe v předchozí kapitole, tj.:
- XML dokumenty musí mít rodičovský element.
- Brát zřetel na citlivost velkých a malých písmen v XML.
- XML tagy musí být vhodně vloženy.
- Hodnoty atributů musí být vždy v uvozovkách.
<?xml version="1.0" encoding="ISO-8859-1"?>
<zprava>
<datum>12/11/2002</datum>
<pro>Tomáš</pro>
<od>Jana</od>
<zahlavi>Připomínka</zahlavi>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
XML DTD
Validní (správně vytvořený) XML dokument musí dodržovat zásady uvedené v DTD, které definuje správný XML element.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE zprava SYSTEM "internalNote.dtd">
<zprava>
<pro>Tomáš</pro>
<od>Jana</od>
<zahlavi>Připomínka</zahlavi>
<telo>Nezapomeň na mě tenhle víkend!</telo>
</zprava>
Účelem DTD je definovat správně vytvořené bloky XML dokumentu. Popisuje strukturu dokumentu se seznamem povolených elementů. Můžete si přečíst více o DTD a jak validovat své XML dokumenty v tutoriálu XML DTD na w3schools.com.
XML Schéma
W3C podporuje i alternativu k DTD –XML Schéma, založené na XML. Více se dozvíte v tutoriálu na w3schools.com.
Obecný XML validátor
Chcete-li si zkontrolovat správnost syntaxe jakéhokoli XML dokumentu, pomůže vám XML validátor.
Chyby v XML vás zastaví!
W3C specifikace XML dokumentu zajišťuje, že program by neměl pokračovat v procesu XML dokumentu, nalezne-li chybu. Důvodem je, že XML software by měl být skvěle čitelný a všechny XML dokumenty by měly být kompatibilní.
S HTML je možné vytvořit dokument se skrytými chybami (např. zapomenete uzavírací tag). Jedním z hlavních důvodů, proč jsou HTML prohlížeče tak velké a nekompatibilní, je, že mají odlišné způsoby k vyřešení vzhledu dokumentu na výstupu, pokud narazí na chybu. S XML se toto stát nemůže.
XML a webové prohlížeče
Téměř všechny hlavní prohlížeče mají podporu XML a XSLT.
Mozilla Firefox – Firefox podporuje XML a XSLT (a CSS).
Mozilla – Mozilla zahrnuje rozšíření pro XML parsing (parsing = větný rozbor), podporuje XML + CSS, má slabší podporu pro jmenné prostory (namespaces). Je také dostupná s XSLT implementací.
Netscape – Poněvadž používá stejný engine jako Mozilla, má s ní také téměř stejné vlastnosti v práci s XML.
Opera – Opera podporuje XML a XSLT (a CSS). Od verze 8 také XML + CSS.
Internet Explorer – Verze 6 podporuje XML, jmenné prostory, CSS, XSLT a XPath.
Pozn.: Internet Explorer 5 také podporuje XML, ale XSLT část není plně kompatibilní s oficiálním standardem W3C!
Jsme na konci druhé části seriálu o XML, překládaného z www.w3schools.com. Příště se naučíme efektivně zobrazovat XML dokumenty na monitor.