Deklarace atributů v XML

Deklarace atributů V XML může mít každý element libovolné množství atributů. Atributy se většinou používají pr...


Deklarace atributů
V XML může mít každý element libovolné množství atributů. Atributy se většinou
používají pro přidání různých metainformací k elementům.
Definice atributů pro element má poměrně jednoduchý tvar:
<!ATTLIST jméno_elementu deklarace atributů>
Deklarace jednotlivých atributů se skládá ze tří částí. První částí je jméno
atributu. Pro jména atributů platí stejná omezení jako pro jména elementů.
Atributy jsou rovněž citlivé na velikost písmen, a tak MujAtribut a MUJATRIBUT
jsou dva zcela rozdílné atributy.
Za jménem následuje typ atributu. Poslední část určuje standardní hodnotu
atributu, popřípadě, zda je používání atributu u daného elementu povinné.
Deklarace atributu se opakuje pro každý atribut, který má být u elementu k
dispozici.
Nejobecnějším typem atributu je CDATA, který umožňuje jako hodnotu atributu
zadat libovolný textový řetězec. Po deklaraci
<!ATTLIST kniha autor CDATA ...>
můžeme v dokumentu používat atribut autor následovně
<kniha autor="Karel Čapek">
Mnohem restriktivnějším typem než CDATA je NMTOKEN. Atribut tohoto typu může
obsahovat jedno slovo, které se skládá z písmen, číslic a několika dalších
speciálních znaků.
Můžeme použít i typ NMTOKENS. Atribut pak může obsahovat několik slov
vyhovujících typu NMTOKEN oddělených mezerou.
<!ATTLIST dokument format NMTOKEN ... okraje NMTOKENS ...>
V dokumentu pak můžeme použít element dokument například takto:
<dokument format="A4" okraje="2cm 3cm 2.5cm 3cm"> ...
</dokument>
Mezi další typy atributů patří ID, IDREF a IDREFS, které se používají pro
vytváření odkazů v rámci dokumentu. Podrobněji si o nich povíme v některé z
dalších částí Zápisníku, věnované odkazům mezi XML dokumenty.
Další dva typy jsou ENTITY a ENTITIES, které použijeme v případech, kdy atribut
obsahuje jméno (resp. jména) entity.
Dalším typem atributu, na který dnes ještě nedojde, je NOTATION. Atributy
NOTATION slouží k určení typu dat, které obsahuje element, pokud se nejedná o
XML data.
Poslední možností, jak vymezit typ atributu, je uvedení výčtu přípustných
hodnot atributu. Např.:
<!ATTLIST obrazek zarovnani (vlevo | vpravo | doprostred) ... >
U elementu obrazek nyní můžeme jako hodnotu atributu zarovnani uvést pouze
jedno ze slov vlevo, vpravo a doprostred.
V deklaraci všech atributů jsme zatím na posledním místě používali tři tečky.
Na tomto místě se uvádí standardní hodnota atributu nebo to, zda je atribut
povinný.
Pokud je atribut povinný, uvede se za deklarací jeho typu slovo #REQUIRED.
Parser při kontrole dokumentu ohlásí chyby vždy, když nebude tento atribut u
elementu použit. XML editor si může zadání hodnoty atributu vynutit přímo při
vložení elementu, který povinný atribut obsahuje.
Opačným případem je situace, kdy můžeme atribut vynechat, a v tomto případě si
jeho hodnotu podle svých potřeb domyslí sama konkrét-ní aplikace, která právě s
dokumentem pracuje. V těchto případech se použije klíčové slovo #IMPLIED.
Další možností je specifikování standardní hodnoty. Stačí ji uvést. Pokud
chceme, aby byl obrázek zarovnán vlevo, pokud není určeno jinak, použijeme
deklaraci:
<!ATTLIST obrazek zarovnani (vlevo | vpravo | doprostred) "vlevo" >
Deklarace elementů a atributů je základem každého DTD. To může obsahovat ještě
další prvky, i když už to není tak časté. Pokud navrhujeme nějaká složitější
DTD, mohou se nám hodit tzv. parametrické entity, které umožňují zkrátit a
zefektivnit zápis.
Parametrické entity
V DTD často opakujeme stejné sekvence textu. V praxi např. mívají všechny
elementy několik společných atributů. Je pak zbytečné znovu a znovu opisovat
deklaraci týchž atributů. Práci nám mohou usnadnit parametrické entity. Pomocí
zápisu
<!ENTITY % entita "nějaký text">
definujeme parametrickou entitu, na kterou se v DTD budeme odvolávat pomocí
zápisu %entita;. Použití parametrické entity z funkčního hlediska odpovídá
napsání celého textu, který entita zastupuje, šetří se však práce.
9 1158 / pahn









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.