Slabikář XML – DTD: entity a notace

2. května 2002

V minulém díle jsme se se dozvěděli něco o deklaraci atributů, dnes si vystvětlíme deklaraci entit a notací.

Entity

Nejprve si připomeneme, co je to entita. Je to prvek většinou zastupující určitou část textu, který se v dokumentu často opakuje. Z HTML známe např. entity >, <, &, ©, ™ atd.

V XML entity rozdělujeme na interní a externí.

Interní entity

Interní entity jsou entity, které zastupují nějaký text, a ten je určen přímo v XML dokumentu. Hodí se spíše na kratší, složitější texty, které se v dokumentu několikrát opakují. Deklarace interní entity vypadá takto:

<!ENTITY nazeventity "textkteryzastupuje">

Nyní si předvedeme ukázkový dokument, kde bude náš virtuální Operační systém Popokatepetl 3000 nahrazen textovou entitou &jmeno; :

<?xml version=“1.0″ encoding=“Windows-1250″?>
<!DOCTYPE clanek [
<!ENTITY jmeno „Operační systém Popokatepetl 3000“>

]>
<clanek>
<nazev>&jmeno; se ukazuje světu</nazev>
<obsah>
Firma AAA přináší naprostou novinku na trhu operačních systémů – &jmeno;.
&jmeno; nabídne uživateli příjemné grafické prostředí, rychlost a spolehlivost.
&jmeno; si získal příznivce po celém světě a řady dalších uživatelů se
už nemohou dočkat, až &jmeno; vyzkouší.
</obsah>
</clanek>

V tomto dokumentu jsme poměrně zdlouhavý název nového operačního systému zapisovali pomocí entity a onen zdlouhavý název jsme napsali pouze jednou, do deklarace entity jmeno. Výsledně bude dokument vypadat úplně stejně, jako kdybychom použili následující kód:

<?xml version=“1.0″ encoding=“Windows-1250″?>
<clanek>
<nazev>Operační systém Popokatepetl 3000 se ukazuje světu</nazev>
<obsah>
Firma AAA přináší naprostou novinku na trhu operačních systémů – Operační systém Popokatepetl 3000.
Operační systém Popokatepetl 3000 nabídne uživateli příjmené grafické prostředí, rychlost a spolehlivost.
Operační systém Popokatepetl 3000 si získal příznivce po celém světě a řady dalších uživatelů se
už nemohou dočkat, až Operační systém Popokatepetl 3000 vyzkouší.
</obsah>
</clanek>

Při použití entity ale nehrozí překlep při opakovaném opisování a zároveň se šetří místo.

Externí entity

Externí entity jsou entity, které zastupují nějaký jiný soubor. Podle toho, zda-li je to textový dokument, nebo binární soubor (např. obrázek), se externí entity dělí na textové a binární. Jejich deklarace se moc neliší, u binární entity musíme, narozdíl od té textové, určit ještě typ souboru, na který odkazuje. Deklarace binárních entit vypadá takto:

<!ENTITY nazevbinarnientity SYSTEM "jmenosouboru" NDATA "TYP">

Typ se pak definuje v notaci.

Deklarace externí textové entity vypadá následovně:

<!ENTITY nazevtextoveexternientity SYSTEM "jmenosouboru">

Takovéto entity se nejvíce využijí k zastupování delších kusů textu, zejména pokud je chceme používat ve více dokumentech najednou. Příklad je zde:

<?xml version=“1.0″ encoding=“Windows-1250″?>
<!DOCTYPE clanek [
<!ENTITY cenik SYSTEM „cenik.xml“>

]>
<obsah>
Dobry den, vitejte v nasem virtualnim pekarstvi. Cenik je zde: &cenik; </obsah>

Soubor cenik.xml by pak mohl vypadat třeba takto:

<?xml version=“1.0″ encoding=“windows-1250″?>
<xml>
  <produkt>
    <nazev>Houska</nazev>
    <cena>1,20</cena>
  </produkt>
  <produkt>
    <nazev>Rohlik</nazev>
    <cena>0,90</cena>
  </produkt>
  <produkt>
    <nazev>Kobliha</nazev>
    <cena>3,50</cena>
  </produkt>
</xml>

Nesmíme zapomenout uvést v dokumentu, na který odkazujeme, jeho kódování, abychom v něm mohli psát české znaky.

Parametrické entity

Parametrické entity se používají především pro práci s textem v definici typu dokumentu. Jejich deklarace se liší přidáním jedné mezery a znaku „%“ před názvem entity:

<!ENTITY % nazevparametrickeentity SYSTEM "jmenosouboru">

V dokumentu pak napíšeme %nazeventity; místo &nazeventity; . Parametrické entity mohou být jak interní, tak externí. Typický příklad jejich použití:

<?xml version=“1.0″ encoding=“Windows-1250″?>
<!DOCTYPE clanek [
<!ENTITY % atributy „barva (modra|bila|cerna)
          rychlost (velka|mala)“>
<!ELEMENT automobil (#PCDATA)>
<!ATTLIST automobil %atributy>
<!ELEMENT motocykl (#PCDATA)>
<!ATTLIST motocykl %atributy>
<!ELEMENT kolo (#PCDATA)>
<!ATTLIST kolo %atributy>
]>

Zavedením parametrických entit v tomto příkladu jsme značně zjednodušili zápis atributů k několika elementům.

Notace

Notací přiřazujeme určitému typu souboru program, který bude data ze souboru zpracovávat. To budeme potřebovat právě v binárních entitách. Deklarace notace vypadá takto:

<!NOTATION typ SYSTEM "program">

Když budeme vytvářet odkaz na binární entitu, definujeme v DTD element, který bude mít jeden atribut typu ENTITY. Ten bude odkazovat na deklarovanou entitu:

<?xml version=“1.0″ encoding=“windows-1250″?>
<!DOCTYPE xml [
<!NOTATION avi SYSTEM „C:/Program Files/Video Player/Player.exe“>
<!ENTITY video SYSTEM „video.avi“ NDATA avi>
<!ELEMENT doplnek (#PCDATA)>
<!ATTLIST doplnek
    src ENTITY>
]>
<xml>
<doplnek src=“video“/>
</xml>

Místo tagu doplnek by se mělo zobrazit video ze souboru video.avi.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *