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

Dnes se budeme věnovat entitám a budeme se jimi zabývat doslova ze všech stran. Rádi byste se dozvěděli, jaké jsou rozdíly mezi analyzovanou a neanalyzovanou entitou, všeobecnou a parametrickou entitou, nebo interní a externí entitou? Jak vypadá deklarace entity a reference na ni? Co jsou to znakové reference? Co je to notace? Tak to vše se v tomto díle dozvíte.

Co jsou entity?

Entity v užším významu jsou jakési "bloky" dat. Každá entita je identifikována pomocí jména a má nějaký obsah. V dokumentu jsou entity zastoupeny ve formě reference ("odkazu") na entitu. Reference tak zastupuje samotný obsah konkrétní entity. Entity jsou deklarovány v rámci DTD.

Analyzované a neanalyzované entity

Základní rozdělení entit rozlišuje entity na analyzované (parsed entities) a neanalyzované (unparsed entities). Analyzovaná entita obsahuje text, kterým je v XML dokumentu nahrazena reference na tuto entitu. Text entity se tedy stává integrální součástí XML dokumentu a po nahrazení reference jejím obsahem musí být výsledný dokument správně strukturovaný. Oproti tomu neanalyzovaná entita buď neobsahuje text (ale jiná data, např. binární data bitmapového obrázku) anebo pokud text obsahuje, nejedná se o XML.

Všeobecné a parametrické entity

Z jiného úhlu pohledu můžeme entity rozdělit na všeobecné (general entities) a parametrické (parameter entities). Hlavní rozdíl mezi nimi je ten, že všeobecné entity se používají v rámci obsahu dokumentu, kdežto parametrické entity jsou určeny výhradně pro DTD.

Interní a externí entity

Nakonec ještě můžeme entity rozdělit na interní (internal entities) a externí (external entities). Interní entity jsou takové, jejichž obsah (hodnota) je kompletně deklarován v rámci příslušného dokumentu - není tedy žádný objekt (soubor) vně dokumentu, který by uchovával obsah této entity. Externí entita odkazuje pomocí systémového nebo veřejného identifikátoru k vnějšímu zdroji, který určuje obsah této entity. Je logické, že neanalyzovaná entita musí být vždy entitou externí (XML dokument nemůže přímo obsahovat "non-XML" data).

Reference na entitu a deklarace entity

Jak již bylo řečeno výše, v dokumentu se entity nevyskytují přímo, ale ve formě reference na entitu (to koneckonců odpovídá i jejich smyslu). Podívejme se tedy, jak reference na entity vypadají.

Reference na všeobecnou entitu

Reference na všeobecnou entitu začíná znakem ampérsandu (&) a bezprostředně za ní následuje jméno entity (např. lt). Reference je ukončena středníkem (;). Například reference na entitu s názvem xml-serial by vypadala takto:

&xml-serial;

Deklarace všeobecné interní entity

Aby bylo možné entitu xml-serial použít v textu XML dokumentu, je nutné ji deklarovat v DTD. Deklaraci takové entity si samozřejmě můžeme ukázat:

<!ENTITY xml-serial "XML pro web aneb od teorie k praxi">

Jak vidíte, způsob deklarace entity se v principu neliší od deklarace elementů a atributů. Začíná sekvencí znaků <!ENTITY a pak následuje jméno entity. Obsah entity (text) je poté uveden v uvozovkách. Deklarace entity je zakončena znakem >.

Takto deklarovanou entitu pak můžeme použít v textu XML dokumentu. Entita může obsahovat i značkování (markup), do entity lze tedy vložit i jakýkoliv element včetně všech potomků, kromě samotného kořenového elementu. V našem starém známém příkladu by použití entity xml-serial vypadalo takto:


<?xml version="1.0"?>
<!DOCTYPE článek [
<!ENTITY xml-serial `XML pro web aneb od teorie k praxi`>
]>
<článek>
	<název>&xml-serial;, 2.díl</název>
	...
</článek>

Deklarace všeobecné externí entity

Deklarace externí entity obsahuje systémový nebo veřejný identifikátor. Systémový identifikátor je vlastně odkaz na zdrojový dokument, jehož text tvoří obsah entity. Ukažme si deklaraci entity xml-serial, tentokrát ji ovšem deklarujme jako externí (způsob použití v XML dokumentu by byl úplně stejný jako u interní entity):

<!ENTITY xml-serial SYSTEM "xml-serial.txt">

Při použití externí entity XML procesor načte obsah dokumentu xml-serial.txt a nahradí referenci tímto obsahem.

Předchozí příklad obsahuje deklaraci analyzované externí entity - obsahem souboru xml-serial.txt je pouze text, kterým bude nahrazena reference a XML dokument bude stále well-formed. Ale jak je to s neanalyzovanou entitou? Deklarace neanalyzované entity musí obsahovat ještě něco navíc.

<!ENTITY logo-image SYSTEM "../images/zive-logo.gif" NDATA gif>

Tím "navíc" ve výše uvedeném příkladu je poslední část deklarace - NDATA gif. NDATA je klíčové slovo, které značí, že se jedná o neanalyzovanou entitu a bude následovat jméno notace. V našem příkladě je tím jménem notace gif. Příslušná notace musí být deklarována v DTD. Každá neanalyzovaná entita musí mít asociovánu notaci.

Možná jste si již odvodili, že entita logo-image v našem příkladu odkazuje na obrazek ve formátu GIF. Soubor obrázku ve formátu GIF obsahuje binární data, proto jej nelze k XML dokumentu připojit jinak, než jako neanalyzovanou entitu.

Parametrické entity

Parametrické entity lze použít pouze v DTD. Můžeme si s jejich pomocí usnadnit psaní opakujících se částí deklarací. Deklarace parametrické entity se od deklarace všeobecné entity odlišuje v jednom bodě - před deklarací jména entity je nutné uvést znak procenta (%):

<!ENTITY %clTyp "(seriál|článek|zpráva|PR)">

A takto vypadá příklad použití parametrické entity v deklaraci atributů - všimněte si, že místo znaku ampersandu (&) začíná reference na parametrickou entitu také znakem procenta:

<!ATTLIST info typ %clTyp; "článek">

Parametrické entity mohou být také externí - se systémovým identifikátorem, odkazujícím na umístění souboru, ve kterém se skývá obsah entity, nebo s veřejným identifikátorem.

Znakové reference

Kromě referencí na entitu se ještě můžeme v XML dokumentu setkat se znakovou referencí (character reference). Znakové reference představují způsob, jak v dokumentu použít v podstatě libovolný znak, který se na světě používá. Znaková reference odkazuje, prostřednictvím číselného kódu, na znak ze znakové sady ISO/IEC 10646 (což je, zjednodušeně řečeno, nadmnožina Unicode).

Znaková reference začíná sekvencí znaků &# a končí středníkem (;). Obsahem reference je kód znaku v decimálním formátu (tj. klasickým číslem v desítkové soustatě). Například znak "ž", zapsán znakovou referencí vypadá takto:

&#382;

Decimální zápis ale není jedinou možností, je možné použít i zápis hexadecimální. Před hexedecimálním číslem se pak musí objevit znak x. Hexadecimální zápis znaku "ž" pomocí znakové reference vypadá takto:

&#x017e;

Předdefinované entity

V našem seriálu jsme se již zmiňovali o několika málo předdefinovaných entitách. Předdefinované entity jsou speciálním případem všeobecných entit, které není nutno deklarovat v DTD, neboť každý XML procesor musí tyto entity umět přečíst a dosadit místo nich příslušné znaky. Osvěžení paměti jistě nezaškodí.

znak
(obsah)
entita
(reference)
< &lt;
> &gt;
& &amp;
` &apos;
" &quot;

Tyto entity sice není nutné deklarovat, ale pokud je používáme u validních dokumentů, doporučuje se deklarovat je stejně jako ostatní entity. Při deklaraci můžeme s výhodou využít znakových referencí:


<!ENTITY lt     "&#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

Notace

Notace představuje způsob, jak identifikovat formát či způsob zpracování dat, která nejsou určena XML procesoru - tj. neanalyzované entity, elementu nesoucího atribut s notací, případně procesní instrukce. Deklarace notace dodržuje formu, kterou jsme již viděli u všech předchozích deklarací v DTD. Ukažme si tři příklady notací pro zpracování souboru GIF obrázku (v jednom DTD se takto všechny tři samozřejmě nemohou vyskytnout najednou, neboť nesmí být deklarována více než jedna notace stejného jména).

<!NOTATION gif SYSTEM "image/gif">

<!NOTATION gif SYSTEM "GIF">

<!NOTATION gif PUBLIC "-//CompuServe//NOTATION Graphic Interchange Format 89a//EN" "C:\Program Files\IrfanView\i_view32.exe">

Notace začíná znaky <!NOTATION, následuje jméno notace, poté systémový, nebo veřejný identifikátor. Identifikátor může ukazovat na typ MIME, nebo třeba i konkrétní aplikaci (zpracující program) ve vašem počítači, která umí zpracovat (zobrazit, přehrát, atd.) příslušná data. Uvedení cesty ke konkétnímu programu není ve většině případů příliš praktické, jelikož zpracující program může být umístěn na různých počítačích různě (nebo nemusí být vůbec k dispozici), ale není to chyba.

V příštím dílu ukončíme první velkou kapitolu tohoto seriálu, zabývající se základy XML. Jeho náplní budou informace, které doplní mozaiku vytváření XML dokumentů.

Váš názor Další článek: Přenosný video přehrávač od ViewSonicu

Témata článku: Software, Programování, Unicode, Reference, Serial, Znak, Ampersand, Code, Obsah, Teorie, Deklarovaná data, Element, XML


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

Na Zemi je nejtepleji za posledních více než 100 tisíc let. Co nám hrozí?

Na Zemi je nejtepleji za posledních více než 100 tisíc let. Co nám hrozí?

** Letošní červenec byl třetím nejteplejším měsícem od roku 1880 ** Teplota naší planety roste raketovým tempem ** Co lidstvu hrozí v období, které v minulosti nemá obdoby?

Karel Kilián | 70

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

** Model raketoplánu Columbia od českého konstruktéra umí i létat ** Obdivuhodný model si vzal 1600 hodin práce ** Podívejte se na fotografie ze stavby a prvního letu

Karel Jeřábek | 20


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