Slabikář XML – definice typu dokumentu

8. dubna 2002

Tentokrát se seznámíme se základy DTD (definice typu dokumentu), kam se vkládá a co umožňuje. Zmíníme se také o tzv. jmenných prostorech (namespaces).

Jak již bylo v jednom z předchozích článků zmíněno, zásadní výhoda i problém jazyka XML je jeho eXtensible = rozšiřitelnost. To znamená, že si v dokumentu můžeme definovat vlastní sadu značek, které v něm budeme používat. Problém by nastal v případě, kdyby si dvě různé společnosti chtěli mezi sebou vyměňovat data na bázi XML a přitom by každá používala jinou sadu značek. Onen problém řeší právě DTD (Document Type Definition = definice typu dokumentu).

Co je to vlastně ta definice typu dokumentu? Jedná se o kus kódu buď vloženého přímo do dokumentu XML, nebo do externího souboru. Tento kód definuje jistá pravidla, kterými se musí skladba XML dokumentu řídit. Konkrétně se jedná o definice elementů, atributů, entit a notací.

Pokud chceme umístit DTD přímo do dokumentu, použijeme následující řešení:

<!DOCTYPE cenik [
   …DTD…
]>

cenik je kořenový element dokumentu. Vkládání DTD přímo do dokumentu je ale většinou velmi nepraktické. Vhodnější by bylo umístit DTD do externího souboru s příponou .dtd. Deklarace bude vypadat takto:

&lt!DOCTYPE cenik SYSTEM „cenik.dtd“>

Kde cenik je opět název kořenového elementu a cenik.dtd je soubor s definicí typu dokumentu. Nesporná výhoda tohoto řešení je možnost použití jednoho DTD na více dokumentů. V úvahu přichází i možnost uložení části DTD do souboru a části přímo do dokumentu. Výsledek je zde:

<!DOCTYPE cenik SYSTEM „cenik.dtd“ [
   …DTD…
]>

V tomto případě jsou definice obsažené v dokumentu nadřazené definicím v souboru.

Ještě existují i veřejné definice typu dokumentu. Právě ty řeší náš ukázkový problém výměny dat mezi různými společnostmi. Deklarace v dokumentu vypadá třeba takto:

<!DOCTYPE XHTML PUBLIC „-//W3C//DTD XHTML 1.0 Strict//EN“>

Část "-//W3C//DTD XHTML 1.0 Transitional//EN" je tzv. veřejný indentifikátor, podle kterého prohlížeč pozná, kterému DTD dokument vyhovuje. Pokud nepozná, můžeme uvést za veřejným identifikátorem ještě adresu kopie příslušného DTD:

<!DOCTYPE XHTML PUBLIC „-//W3C//DTD XHTML 1.0 Strict//EN“ „http://www.w3.org/xhtml/strict.dtd“>

Zde jsem zrovna použil definici dokumentu XHTML. U ostatních definic je deklarace podobná. Bližší informace o veřejných DTD najdete na webu XML.org.

Namespaces (jmenné prostory)

Jednotlivé části dokumentu mohou vyhovovat různým DTD, a jiné ne. Nejprve uvedu jeden příklad:

<cenik xmlns=“zakladni_dtd
        xmlns:pecivo=“dtd_peciva„>
  <pecivo:produkt>
    <pecivo:nazev>Houska</pecivo:nazev>
    <pecivo:cena>1,20</pecivo:cena>
  </pecivo:produkt>
  <pecivo:produkt>
    <pecivo:nazev>Rohlik</pecivo:nazev>
    <pecivo:cena>0,90</pecivo:cena>
  </pecivo:produkt>
  <pecivo:produkt pecivo:chutna=“dobre“>
    <pecivo:nazev>Kobliha</pecivo:nazev>
    <pecivo:cena>3,50</pecivo:cena>
  </pecivo:produkt>
</cenik>

zakladni_dtd je adresa základního DTD, tedy DTD ceníku, ve kterém jsem použil části vyhovující dtd_peciva, které jsou všechny označeny. Můžeme použít i následující řešení:

<cenik xmlns=“zakladni_dtd„>
       
  <produkt xmlns:pecivo=“dtd_peciva„>
    <nazev>Houska</nazev>
    <cena>1,20</cena>
  </produkt>
  <pecivo:produkt xmlns:pecivo=“dtd_peciva„>
    <nazev>Rohlik</pecivo:nazev>
    <cena>0,90</pecivo:cena>
  </produkt>
  <produkt xmlns:pecivo=“dtd_peciva„>
    <nazev>Kobliha</nazev>
    <cena>3,50</cena>
  </produkt>
</cenik>

Vedle DTD existují ještě XML Schémata. Těmi se zde ale zabývat nebudeme.

Příště se začneme zabývat kódem DTD, počínaje elementy a atributy.

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

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

Š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 *