Document Type Definition
DTD (Document Type Definition, česky Definice typu dokumentu) je jazyk pro popis struktury dokumentu XML, případně SGML. Omezuje množinu přípustných dokumentů spadajících do daného typu nebo třídy. DTD tak například vymezuje jazyky HTML a XHTML.
Struktura třídy nebo typu dokumentu je v DTD popsána pomocí popisu jednotlivých značek (nebo též elementů) a atributů. Popisuje, jak mohou být značky navzájem uspořádány a vnořeny. Vymezuje atributy pro každou značku a typ těchto atributů.
DTD je poměrně starý a málo expresivní jazyk. Jeho další nevýhodou je, že DTD samotný není souborem XML.
Silnější jazyky pro popis dokumentů XML jsou například XML Schema, RELAX NG, Schematron nebo DSD, které jsou již samy o sobě ve formátu XML.
Příklad dokumentu DTD
[editovat | editovat zdroj]Příklad velmi jednoduchého dokumentu DTD (priklad.dtd):
<!ELEMENT clovek (jmeno, adresa*)>
<!ELEMENT jmeno (#PCDATA)>
<!ELEMENT adresa (ulice?, cislo?, mesto)>
<!ELEMENT ulice (#PCDATA)>
<!ELEMENT cislo (#PCDATA)>
<!ELEMENT mesto (#PCDATA)>
Tento dokument DTD definuje třídu dokumentů XML, které mají kořenovou značku <clovek> obsahující právě jednu značku <jmeno> a žádnou nebo více značek <adresa> a tak dále.
Proto například tento dokument XML patří do takto vymezené třídy dokumentů XML (říkáme také, že je validní proti výše uvedenému DTD):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE clovek SYSTEM "priklad.dtd">
<clovek>
<jmeno>Tomáš</jmeno>
<adresa>
<ulice>Nesmrtelná</ulice>
<cislo>99</cislo>
<mesto>Brno</mesto>
</adresa>
</clovek>
Bezpečnostní
[editovat | editovat zdroj]XML DTD lze použít k vytvoření útoku DoS (Denial of Service) definováním vnořených entit, které se exponenciálně rozšiřují, nebo odesláním analyzátoru XML do externího zdroje, který se nikdy nevrací.
Z tohoto důvodu poskytuje .NET Framework vlastnost, která umožňuje zakázat nebo přeskočit analýzu DTD[10], a nejnovější verze aplikací Microsoft Office (Microsoft Office 2010 a vyšší) odmítají otevřít soubory XML, které obsahují deklarace DTD.
Odkazy
[editovat | editovat zdroj]Související články
[editovat | editovat zdroj]- Extensible Markup Language (XML)
- HyperText Markup Language (HTML)
- Deklarace typu dokumentu (DOCTYPE)
- Extensible Stylesheet Language Transformations (XSLT)