Po definici typu dokumentu budeme dnes pokračovat deklarací elementů v DTD. Nakonec vám ukáži použití na jednoduchém příkladě.

Hned na začátek připomínám, že každý element musí mít ukončovací tag, nebo být ve zkráceném tvaru (<br />) a nesmíte zapomenout ani na rozlišování malých a velkých písmen.

Deklarace elementu má následující skladbu:

<!ELEMENT jmenoelementu definiceobsahuelementu>

jmenoelementu je název elementu, to je jasné. definiceobsahuelementu je určení, jestli má být obsah elementů prázdný, jen text, nebo jím mohou, či musejí být i další elementy, a když, tak jaké a jak uspořádané.

Pokud chcete deklarovat prázdný element, označíte jeho obsah jako EMPTY. Deklarace bude vypadat takto:

<!ELEMENT br EMPTY>

Nebo můžete deklarovat element s libovolným možným obsahem, pak jeho obsah označíte jako ANY:

<!ELEMENT kniha ANY>

Další možností je přesné určení obsahu elementu. To vkládáte do kulatých závorek. Jednotlivé prvky v závorkách oddělujete buď čárkou, nebo znakem „|“. Oddělení čárkou znamená, že v daném elementu musí jít prvky (tedy většinou elementy) v pořadí, v jakém byly zapsány. Znak „|“ by se dal přeložit, jako nebo. Ze sady prvků oddělených tímto znakem se smí vyskytovat kterýkoli z nich, ale pouze jeden. Pomocí závorek můžete z nějaké sady prvků udělat prvek jeden a ten pak dále kombinovat. To vše můžete ještě upravit znaky „?“, „+“, či „*“, resp. jejich přidáním hned za název prvku (bez mezery). Tím určíte, jestli se prvek vyskytovat může, nebo nemůže, příp. kolikrát. Pokud má být obsahem elementu pouze text, použijete označení (#PCDATA):

<!ELEMENT poznamka (#PCDATA)>

Nebo může element obsahovat třeba další elementy nazev, autor a anotace. A ty mohou jít buď pouze v uvedeném pořadí:

<!ELEMENT kniha (nazev, autor, anotace)>

kde se může, ale nemusí vyskytovat anotace:

<!ELEMENT kniha (nazev, autor, anotace?)>

a může mít libovolný počet autorů (nebo žádného):

<!ELEMENT kniha (nazev, autor*, anotace)>

nebo může mít libovolný počet autorů (minimálně jednoho):

<!ELEMENT kniha (nazev, autor+, anotace)>

Třeba se musí uvést právě jedna informace (jeden element):

<!ELEMENT kniha (nazev | autor | anotace)>

Nebo mohou být elementy do dokumentu „poskládány“ libovolným způsobem:

<!ELEMENT kniha (nazev | autor | anotace)*>

A mezi jednotlivými elementy ještě může být libovolný text:

<!ELEMENT kniha (#PCDATA | nazev | autor | anotace)*>

Ještě samozřejmě můžete deklarovat element s povinným názvem a libovolným počtem anotací a autorů:

<!ELEMENT kniha (nazev | (autor | anotace)*)>

Možnosti kombinací jsou opravdu široké. V následující deklaraci je třeba uvedeno, že element kniha smí obsahovat 2 až 4 autory:

<!ELEMENT kniha (autor, autor, autor?, autor?)>

A na závěr si samozřejmě ukážeme jeden příklad:

<?xml version=“1.0″ encoding=“windows-1250″?>
<!DOCTYPE pekarstvi [
<!ELEMENT informace (firma, adresa, telefon?, email)>
<!ELEMENT firma (#PCDATA)>
<!ELEMENT adresa (#PCDATA)>
<!ELEMENT telefon (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT cenik (produkt*)>
<!ELEMENT produkt (nazev, cena)>
<!ELEMENT nazev (#PCDATA)>
<!ELEMENT cena (#PCDATA)>
<!ELEMENT oddelovac EMPTY>
]>
<pekarstvi>
   <informace>
      <firma>Pekařství – Petr Chléb</firma>
      <adresa>Pekárenská 1234, Houskovice</adresa>
      <telefon>0123 456 789</telefon>
      <email>petr.chleb@houskovice.cz</email>
   </informace>
   <oddelovac />
   <cenik>
      <produkt>
         <nazev>Houska</nazev>
         <cena>1,20</cena>
      </produkt>
      <produkt>
         <nazev>Rohlík</nazev>
         <cena>0,90</cena>
      </produkt>
      <produkt>
         <nazev>Kobliha</nazev>
         <cena>3,50</cena>
      </produkt>
   </cenik>
</pekarstvi>

V příkladu se dokument dělí na dvě části: informace a ceník. Obě jsou odděleny oddělovačem. V informacích jsou tagy firma, adresa, email a nepovinný telefon (jak je patrné z DTD). Ceník může obsahovat libovolné množství produktů, ale každý produkt musí obsahovat název a cenu. A to vše je určeno pomocí DTD.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět