V minulém díle seriálu o XHTML jste se dozvěděli, co je DTD a jak se na něj odkazujeme ze stránky. Podívejme se na to, jak jsou v DTD definovány elementy, atributy a entity.

DTD je uloženo v běžném textovém souboru a je tvořeno „speciálními elementy“, pomocí kterých se deklarují elementy, jejich atributy, entity a notace (ty se ale v XHTML DTD nevyskytují, proto se jim nebudeme věnovat).

Komentáře v DTD

Ještě než začneme se samotnými deklaracemi entit, elementů a atributů, řeknu vám, jak je v DTD značen komentář. Je to stejné jako v XHTML dokumentu, komenář začíná znaky <!-- a končí znaky -->. Komentáře mají v DTD pouze informativní hodnotu, nejsou tedy součástí specifikačního textu, ale pouze jakousi doplňující informací.

Deklarace znakových entit

V minulém díle jsme si představili znakové entity a řekli si, že mnoho jich má přiřazeno jméno, aby si autoři stránek nemuseli pamatovat jejich číselné vyjádření. Tato jména se deklarují v DTD takto:

<!ENTITY jméno-entityčíselné-vyjádření-entity„>

Příkladem může být deklarace entity &copy;, o které jsme minule hovořili:

<!ENTITY copy „&#169;“>

Znakové entity nejsou přímou součástí DTD, jsou do něj pouze vloženy pomocí parametrických entit (viz dále) – fyzicky se nacházejí ve třech samostatných souborech. Pokud se ptáte proč, je to kvůli tomu, že znakové entity jsou rozděleny do třech skupin:

  1. Znaky z ISO 8859-1 – jejich definice se nachází v souboru xhtml-lat1.ent ze specifikace XHTML 1.0. Tyto entity jsou vcelku široce podporovány v prohlížečích a jako jediné z těchto třech skupin naleznou svoje praktické využití v češtině.
  2. Řecká písmena, matematické a jiné symboly – jejich definice se nachází v souboru xhtml-symbol.ent ze specifikace XHTML 1.0.
  3. Entity se speciálním významem (&amp; apod.), internacionalizační znaky – jejich definice se nachází v souboru xhtml-special.ent ze specifikace XHTML 1.0.

Pokud chcete poznat všechny entity, které můžete v XHTML používat, doporučuji vám tyto tři soubory, protože je jich opravdu hodně a v článku je vypisovat nebudu. O těch nejdůležitějších jsme se už zmínili (až na jednu, které se ještě budeme věnovat).

Parametrické entity

Parametrické entity se, narozdíl od entit znakových, mohou používat pouze v DTD. Jejich princip je ten, že se pomocí nich pojmenuje určitý delší text (např. deklarace atributů, které se opakují u více elementů) a potom se na tento text odkazuje pomocí zvoleného jména. Celé DTD se tak zestruční a zpřehlední. Parametrická entita je deklarována takto:

<!ENTITY % jméno-entityobsah-entity„>

Jak tedy vidíte, narozdíl od znakové entity musí být před jménem entity uveden znak „%“. V textu DTD se na parametrickou entitu odvolává pomocí zápisu %jméno-entity;. Příklad parametrické entity a jejího použití:

<!ENTITY % i18n
„lang        %LanguageCode; #IMPLIED
 xml:lang    %LanguageCode; #IMPLIED
 dir         (ltr|rtl)      #IMPLIED“
  >

<!ELEMENT title (#PCDATA)>
<!ATTLIST title %i18n;>

Parametrické entity jsou, stejně jako entity znakové, citlivé na velikost písmen. Entita %Inline; je proto něco zcela jiného než entita %inline;.

Parametrické entity mohou také odkazovat na externí soubor. Ten může být, stejně jako DTD, určen systémovým (<!ENTITY % jméno-entity SYSTEM "webová-adresa-souboru") nebo veřejným identifikátorem (<!ENTITY % jméno-entity PUBLIC "veřejný-identifikátor" "webová-adresa-souboru"). Tímto způsobem jsou v XHTML 1.0 připojeny k DTD definice znakových entit:

<!ENTITY % HTMLlat1 PUBLIC
  „-//W3C//ENTITIES Latin 1 for XHTML//EN“
  „xhtml-lat1.ent“>
%HTMLlat1;
<!ENTITY % HTMLsymbol PUBLIC
  „-//W3C//ENTITIES Symbols for XHTML//EN“
  „xhtml-symbol.ent“>
%HTMLsymbol;
<!ENTITY % HTMLspecial PUBLIC
  „-//W3C//ENTITIES Special for XHTML//EN“
  „xhtml-special.ent“>
%HTMLspecial;

hlavně se ale s externími parametrickými entitami setkáme v jazycích, které jsou tvořeny moduly (např. XHTML 1.1). Parametrické entity mohou být také součástí další parametrické entity, tedy se vnořovat. Deklarace parametrických entit se u XHTML nachází na začátku souboru DTD a v příštím článku se některým z nich budeme věnovat.

Deklarace elementů

Deklarace elementů vypadá takto:

<!ELEMENT jméno-elementu povolený-obsah-elementu>

Jako povolený obsah elementu může být použito klíčové slovo EMPTY, které udává, že element nesmí mít žádný obsah, v takovém případě je to tzv. prázdný element (empty element – viz druhý díl tohoto seriálu).

Většina elementů má ale definován určitý obsah, ten se deklaruje pomocí tzv. modelové skupiny. Ta je tvořena elementem, skupinou elementů nebo sekcí #PCDATA (parsed character data – tato sekce značí text, sekvenci znaků ze znakové sady dokumentu, jejíž součástí mohou být i znakové entity), přičemž je celá uzavřena v závorce.

Elementy nebo skupiny elementů mohou být ve skupině spojeny těmito znaky:

  • , udává, že elementy musí být oba přítomny, přičemž musí být zachováno pořadí, v jakém jsou uvedeny
  • | udává, že z elementů musí být přítomen jeden z nich

Každému elementu nebo skupině elementů může být také přiřazen počet výskytů, a to pomocí znaku opakování, který se vyskytuje za elementem nebo skupinou:

  • bez znaku opakování – element se musí vyskytovat právě jednou
  • ? ~ element se může vyskytovat jednou nebo se vyskytovat nemusí
  • + ~ element se musí vyskytovat minimálně jednou, může se libovolně-krát opakovat
  • * ~ element se může vyskytovat libovolně-krát, ale nemusí být přítomen vůbec

Pokud vám to zatím není příliš jasné, zde je několik příkladů možných modelových skupin:

(A)
Obsahem elementu musí být právě jeden element A.
(A, B)
Obsahem elementu musí být právě jeden element A následovaný právě jedním elementem B.
(A | B)
Obsahem elementu musí být buď element A nebo element B.
(A?, B)
Obsahem elementu může být jeden nebo žádný element A následovaný elementem B.
(A, B)+
Obsahem elementu může být jedna nebo více skupin, které jsou tvořeny elementem A následovaným elementem B. Neboli, v elementu se mohou libovolně-krát po sobě opakovat elementy A a B, musí jich ale být stejný počet a musí být dodrženo jejich pořadí.
(#PCDATA | A | B)*
Obsahem elementu může být libovolná kombinace textu, elementu A a elementu B, přičemž kterýkoli z nich může být vynechán.

Na závěr jsem si pro vás připravil příklad opravdové definice z DTD reprezentujícího XHTML 1.0 Strict. Je to již trochu těžší příklad, schválně si nejprve zkuste sami odvodit, co může být obsahem elementu table, a až potom se podívejte do dalšího odstavce, kde se nachází vysvětlení – pokud váš prohlížeč podporuje DHTML, odkryje se odpověď až po aktivaci odkazu „ukázat vysvětlení.“

<!ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>

Element table může obsahovat volitelný element caption, dále buď element col nebo element colgroup (ne oba) v libovolném množství, přičemž nemusí být přítomen ani jeden. Dále volitelné elementy thead a tfoot a jeden nebo více elementů tbody nebo tr (ne oba).

Deklarace atributů

Přiřazení atributů k elementu vypadá následovně:

<!ATTLIST jméno-elementu deklarace-atributů>
<!– ATTLIST = attribute list, tedy seznam atributů –>

Samotná deklarace atributu se potom skládá ze třech částí a vypadá takto:

jméno-atributu povolené-hodnoty implicitnost

Povolené hodnoty mohou být definovány buď pomocí výčtu uvedeného v závorce, kde jsou jednotlivé povolené hodnoty odděleny znakem „|“,:

<!ATTLIST button type (button|submit|reset) …>

nebo pomocí jednoho z „klíčových slov“ pro typ atributu (těm se budeme věnovat v příštím díle).

Jako implicitnost může být uvedeno několik hodnot:

  • pokud je atribut povinný, tzn. musí být součástí elementu, je uvedeno #REQUIRED
  • pokud atribut není povinný a jeho hodnota, v případě, že atribut chybí, závisí na interpretovi XHTML, je uvedeno #IMPLIED – interpret XHTML by si ji v takovém případě měl doplnit podle dědičnosti nebo podle vlastních preferencí
  • pokud atribut není povinný a jeho hodnota, v případě, že atribut chybí, má být nějaká konkrétní, je zde uvedena v uvozovkách – pokud atribut nemůže nabývat jiné hodnoty než této, je před ní ještě uvedeno #FIXED

V XHTML existují také atributy, které mohou nabývat jen jedné hodnoty, která je totožná se jménem atributu (boolean attributes). Pokud je takový atribut přítomen, znamená to, že je nastaven na true (pravdu), pokud chybí, znamená to, že je nastaven na false (nepravdu). Příkladem takového atributu je readonly, který udává, že element, u kterého je přítomen (např. textové políčko), je určen pouze ke čtení a nemůže být nijak modifikován. Jeho deklarace v DTD je následující:

<!ATTLIST input
deklarace ostatních atributů
readonly     (readonly)     #IMPLIED
deklarace ostatních atributů
>

Jeho použití ve stránce potom vypadá následovně:


<input readonly=“readonly“ ostatní atributy />

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