Jemný úvod do XML (III) - Definice typu dokumentu - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Go verze

Jemný úvod do XML (III) - Definice typu dokumentu

26. října 2001, 00.00 | V dalším pokračování našeho seriálu si povíme něco o tvorbě definice typu dokumentu.

Jak jsme řekli již v druhém díle našeho seriálu, definice typu dokumentu neboli DTD, je soubor pravidel určujících, jaké elementy a atributy můžeme použít v daném XML dokumentu. Mimo to jsou v DTD také definovány vzájemné vztahy mezi jednotlivými elementy. Použitím DTD tedy stanovujeme standardní strukturu pro určitý typ XML dokumentů.

Jak přiřadit DTD XML dokumentu

DTD se přiřazuje pomocí deklarace typu dokumentu na druhém řádku XML dokumentu (hned za XML deklarací, viz minulý díl našeho seriálu). V podstatě jsou možné dva typy přiřazení, externí (DTD je umístěna ve zvláštním souboru mimo XML dokument) a lokální (DTD je umístěna přímo v dokumentu).

Externí přiřazení má podobu
<!DOCTYPE kořenový_element SYSTEM "URL">
kde kořenový_element udává základní element, kterým musí být "obalen" celý dokument a URL udává adresu nebo jméno souboru, ve kterém je DTD uložena. Pokud není DTD umístěna na síti, lze použít přiřazení v následujícím tvaru
<!DOCTYPE kořenový_element PUBLIC "veřejný_identifikátor" "URL">

Lokální přiřazení vypadá následovně:
<!DOCTYPE název_DTD [
pravidla
]>

Lokální umístění bývá ve zvyku kombinovat s umístěním externím: Externí DTD obsahuje základní pravidla, lokální pak modifikace některých z nich (lokální přiřazení má před externím prioritu).

Příklady:
<?xml version="1.0"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting>

Externí přiřazení DTD.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
<!ELEMENT greeting (#PCDATA)>
]>

<greeting>Hello, world!</greeting>
Interní přiřazení DTD. (Syntaxi deklarace elementu greeting, použité v tomto příkladu, vysvětlíme za chvíli.)

Co DTD obsahuje

Definice DTD se sestává z deklarací čtyř různých typů prvků, konkrétně elementů, atributů, entit a notací. Jejich syntaxi a význam si nyní přiblížíme podrobněji.

Deklarace elementů

Má tvar:
<!ELEMENT název_elementu obsah_elementu>

Název elementu musí začínat písmenem, jinak může být libovolně dlouhý a jsou v něm povoleny mimo písmen a číslic také některé speciální znaky (např. ‚.', ‚-', ‚_' a ‚:'). V názvech je možno používat diakritiku a znaků z nejrůznějších jazyků. Co je ovšem důležité, v názvech elementů se rozlišuje mezi velkými a malými písmeny (tudíž názvy kapitola, Kapitola a KAPITOLA deklarují tři různé elementy).

Určení obsahu elementu může být velmi různorodé. Za mezní lze považovat elementy EMPTY (pro prázdný element, který nemůže nic obsahovat) a ANY (tento element naopak může obsahovat cokoli).

Příklady:
<!ELEMENT br EMPTY>
<!ELEMENT vse ANY>

Přesnější požadavky na obsah elementů deklarujeme pomocí tzv. modelové skupiny. Ta musí být uzavřena do kulatých závorek a obsahovat alespoň jedno slovo, kterým obvykle bývá název elementu, jež může být do právě definovaném elementu vkládán. Vnořené elementy lze dále kombinovat pomocí oddělovačů ‚,' (dané elementy musí být všechny obsaženy v definovaném elementu, a to v pořadí, které je uvedeno v definici) a ‚|' (v textu může být použit pouze jeden z uvedených elementů). Možné je i kombinování obou typů deklarace pomocí kulatých závorek.

Mimo pořadí určujeme u elementů také jejich počet a to, zda jsou povinné a je-li je možno opakovat. Je-li v modelové skupině uveden pouze název elementů, znamená to, že musí být přítomen právě jednou. Je-li jeho výskyt nepovinný, uvedeme za něj operátor ‚?'. Pokud se může opakovat a musí být přítomen aspoň jednou, vložíme za něj operátor ‚+'. Může-li být počet opakování libovolný, vložíme operátor ‚*'. Uvedené operátory lze použít nejen za elementy, ale i za modelovými skupinami.

Příklady:
<!ELEMENT rubrika (PDF|XML|TeX)>
Rubrika může být PDF, XML nebo TeX.

<!ELEMENT článek (název, autor*,rubrika,text)>
Článek musí na prvním místě obsahovat název a pak jméno jednoho nebo více autorů. Následně pak určení rubriky a samotný text.

<!ELEMENT článek (název, autor?,rubrika,text)>
Článek musí obsahovat název a pak maximálně jedno jméno autora. Následuje určení rubriky a samotný text.

Pokud je obsahem elementu již samotný text, využijeme indikátoru #PCDATA. Pokud může element obsahovat jak text, tak i data (tzv. mixed content), musí být v deklaraci příslušné skupiny #PCDATA uvedeno jako první, skupina musí být spojena operátorem ‚|' a musí být volitelně opakovatelná (operátor ‚*').

Příklad:
<!ELEMENT text (#PCDATA|sekce*)*>
Element text obsahuje samotný text a libovolné množství sekcí.

Deklarace atributů

Připomeňme nejprve, že atributy rozšiřují informace o daném elementu. Každý element jich může mít libovolně mnoho. Deklarace atributu má tvar:
<!ATTLIST jméno_elementu deklarace_atributů>

Každá deklarace atributu se skládá ze tří částí: názvu atributu (stejné možnosti a omezení jako u názvů elementů), typu (probereme dále) a určení standardní hodnoty atributu nebo popřípadě určení, zda je použití daného atributu povinné. Má-li element více atributů, lze je stejně dobře určit v rámci jedné jako více deklarací.

Typy atributu mohou být CDATA (pro libovolný textový řetězec), NMTOKEN (pouze jedno slovo, může obsahovat totéž, co název elementu či atributu), ID, IDREF a IDREFS (všechny tři se používají pro odkazy v rámci dokumentu), ENTITY a ENTITIES (atribut obsahuje jméno nebo jména entit - viz další výklad) a NOTATION (opět viz dále). Dále lze typ atributu vymezit výčtem jeho přípustných hodnot (uzavřených v závorkách).

Příklad: Je-li definováno
<!ATTLIST článek datum_vydání CDATA hodnocení (1|2|3|4|5)>
lze v dokumentu použít zápis
<článek datum_vydání="1. 1. 2001" hodnocení="2">

Jak jsme řekli, na třetím místě se u atributů uvádí jejich standardní hodnota a to, zda je atribut povinný. Standardní hodnota se jednoduše stanoví způsobem přípustným pro danou deklaraci. Povinný atribut se určuje klíčovým slovem #REQUIRED, nepovinný #IMPLIED. Před standardní hodnotu atributu lze uvést klíčové slovo #FIXED, určující, že hodnota atributu může být pouze standardní (zdá se to možná nesmyslné, ale opravdu existují důvody pro použití takovéhoto určení).

Příklad:
<!ATTLIST obrázek zarovnání (vlevo|vpravo|doprostřed) "vlevo">
Obrázek bude standardně zarovnán nalevo.

Deklarace entit

Pod pojmem entita se v XML míní (zjednodušeně řečeno) zkratka pro určitý obsah. Podle povahy tohoto obsahu dělíme entity na textové a binární. Podle typu umístění pak na interní (umístěné v dokumentu) a externí (umístěné v jiném souboru).

Deklarace entity má obecně tvar
<!ENTITY název_entity obsah_entity>
přičemž obsah_entity je závislý na jejím typu (viz dále).

Jak jsme již řekli, entity vlastně představují jakési zkratky. Chceme-li jimi zastupovaný obsah použít v dokumentu, odvoláme se na ně odkazem ve tvaru &název_entity;.

Interní textová entita má za svůj obsah text, který ovšem může klidně obsahovat i odkaz na jiné entity nebo také zápis tagů. Její zápis má tedy tvar
<!ENTITY název_entity "text">

Externí entita má jako obsah odkaz v podobě URL, a její zápis je:
<!ENTITY název_entity SYSTEM "URL">

Příklady:
Je-li entita novak deklarována v DTD takto:
<!ENTITY novak "PhDr. Jan Novák, CSc.">
bude zápis v XML dokumentu "Podepsán &novak;" nahrazen zápisem "Podepsán PhDr. Jan Novák, CSc.".

Jsou-li definovány entity
<!ENTITY úvod SYSTEM "uvod.xml">
<!ENTITY hlavní_text SYSTEM "hlavni.xml">
<!ENTITY závěr SYSTEM "zaver.xml">
vloží zápis
<kniha>&úvod;&hlavní_text;&závěr;</kniha>
obsah příslušných souborů do dokumentu.

Binární entity odkazují na soubor určitého typu, tudíž mohou být pouze externí. Zapisují se takto:
<!ENTITY název_entity SYSTEM "URL" NDATA "typ_souboru">
kde NDATA je určení typu binární entity, kterému se budeme věnovat o kousek dále.

Příklad:
<!ENTITY manuál SYSTEM "/pdf/manual.pdf" NDATA "PDF">

Specifickým typem entit jsou také entity parametrické, na které lze odkazovat pouze v rámci DTD. Využívají se především pro zkrácený zápis opakujících se atributů. Na rozdíl od jiných entit se na ně odkazuje zápisem %název_entity;, jinak o nich platí prakticky totéž co bylo řečeno u entit textových.

Jiným speciálním typem entit jsou entity zabudované a znakové: s těmi jsme se seznámili v minulé části našeho seriálu.

Deklarace notací

Posledním typem deklarace, který bývá používán v DTD, je deklarace notace. (Již jsme se o ní výše několikrát zmínili.) Ta určuje pro daný typ dat aplikaci, která je schopna je zpracovat. Syntaxe zápisu je
<!NOTATION název_pro_typ_dat identifikátor_aplikace>.

Zvolený název typu dat je pak možno použít při deklarování binární entity (viz výše).

Příklad:
<!NOTATION PDF SYSTEM "c:\acrobat5\acrobat32.exe">
může říkat to, že ke zpracování souborů typu PDF slouží acrobat32.exe nainstalovaný na lokálním disku c: v adresáři Acrobat5.

Podmíněné sekce

V rámci externích DTD lze použít tzv. podmíněné sekce, které určují zda mají být dané deklarace zpracovány či ne. (Užitečné např. při používání jedné DTD pro více různých typů XML dokumentů.) Využívá se zápisu
<![INCLUDE[deklarace]]>
pro použití daných deklarací a
<![IGNORE[deklarace]]>
pro jejich ignorování.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Webdesign  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: