Deklarace typu dokumentu
Deklarace typu dokumentu () neboli DOCTYPE je instrukce, která SGML nebo XML dokumentu (např. webové stránce) přiřazuje definici typu dokumentu (DTD) (například formální definici určité verze HTML). V serializovaném tvaru dokumentu se vyjadřuje jako krátký řetězec ve značkovacím jazyce, který vyhovuje určité syntaxi.

Ve WWW prohlížečích je zpravidla specializovaný HTML parser, a proto uvedené DTD nenačítají, ani když stránka obsahuje jeho URL. Moderní webové prohlížeče však v dokumentu s typem text/html vyhledávají DOCTYPE, aby mohly přesně určit, v jakém režimu má knihovna pro rozvržení prvků HTML stránku vykreslit (zda má použít standardní režim nebo quirks mode kvůli zpětné kompatibilitě).

V HTML5 není serializace text/html založena na SGML, a DOCTYPE se používá pouze pro výběr režimu. DOCTYPE je zde zachováno jako „prakticky zbytečná, ale vyžadovaná“ informace, která přepne prohlížeč do standardního režimu.

Syntaxe DOCTYPE 
Obecná syntaxe deklarace typu dokumentu je:

<!DOCTYPE kořenový-element PUBLIC "FPI" ["URI"] [ 
<!-- deklarace interní podsady -->
]>

nebo

<!DOCTYPE kořenový-element SYSTEM "URI" [ 
<!-- deklarace interní podsady -->
]>

Za DOCTYPE je vždy uveden kořenový-element, což je element, který obklopuje celý zbytek dokumentu. V XML je to první element v dokumentu; například v XHTML je to element <html>, který je otevřen jako první po deklaraci DOCTYPE, a jako poslední uzavřen. Výběr klíčového slova SYSTEM nebo PUBLIC určuje, zda DTD je soukromé v systému nebo veřejné.

Za klíčovým slovem PUBLIC je uveden zkrácený tvar „veřejného identifikátoru“ nazývaný formální veřejný identifikátor () uzavřený v uvozovkách; následující „systémový identifikátor“ uzavřený v uvozovkách je nepovinný. Například pro XHTML 1.1 je FPI „-//W3C//DTD XHTML 1.1//EN“ a systémový identifikátor lze podle potřeby zvolit ze 3 možných systémových identifikátorů; jedním z nich je URI „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“.

Za klíčovým slovem SYSTEM musí následovat systémový identifikátor. XML parser by měl v tomto případě hledat DTD podle URI reference DTD uzavřené v uvozovkách způsobem závislým na konkrétním systému.

Poslední část deklarace je nepovinná. Pokud je přítomná, je uzavřená v hranatých závorkách ([]) a nazývá se interní podsada (). Umožňuje přidávání a úpravu entit nebo chování veřejně definovaných typů. V jednoduchých SGML profilech bývá deklarace interní podsady dokonce zakázaná, aby bylo možné používat jednoduché HTML parsery, které neimplementují kompletní parsování SGML.

V dokumentech založených na SGML (jako například HTML) jsou deklarace typu dokumentu poněkud odlišné. Veřejný identifikátor zde může být spojen se systémovým identifikátorem. Toto spojení může být provedeno např. pomocí katalogového souboru, pomocí kterého se FPI odkazuje na systémový identifikátor.

Příklady DTD 
Začátek mnoha WWW stránek vypadá takto:

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ar" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

Jedná se o deklaraci typu dokumentu pro XHTML, která obsahuje veřejný identifikátor -//W3C//DTD XHTML 1.0 Transitional//EN i systémový identifikátor http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd. Parser může použít libovolný z nich pro nalezení referované externí entity. Jako kořenový-element je uvedeno html, a proto je ve všech uvedených příkladech prvním tagem za deklarací DOCTYPE tag html. Poslední řádek obsahující značku html již není součástí deklarace DOCTYPE, je použit jenom jako příklad, jak může vypadat další text. Žádný z příkladů nepoužívá definici interní podsady.

DTD pro HTML 4.01 
Strict DTD nepovoluje prezentační značky; místo nich je nutné používat kaskádové styly (). Strict DTD vypadá takto:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
 <html>

Transitional DTD povoluje některé starší nedoporučované () PUBLIC atributy:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
 <html>

Pro použití rámů je nutné použít Frameset DTD:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
 <html>

DTD pro XHTML 1.0 
XHTML má také 3 DTD typy – Strict, Transitional a Frameset.

V XHTML Strict DTD nejsou povoleny nedoporučované tagy a kód musí být korektní:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

XHTML Transitional DTD se podobá XHTML Strict DTD, ale nedoporučované tagy povoluje:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Jediné DTD, které povoluje rámy v XHTML, je XHTML Frameset DTD:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

DTD pro XHTML 1.1 
XHTML 1.1 je nejnovější dokončená verze XHTML, která zavádí podporu pro XHTML modularizaci. XHTML 1.1 je stejně striktní jako XHTML 1.0 Strict.

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

DTD pro XHTML Basic 
XHTML Basic 1.0

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML Basic 1.0//EN"
  "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

XHTML Basic 1.1

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML Basic 1.1//EN"
  "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">

DTD pro XHTML Mobile Profile 
XHTML Mobile Profile 1.0

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
  "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

XHTML Mobile Profile 1.1

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.1//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd">

XHTML Mobile Profile 1.2

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">

DOCTYPE pro HTML5 bez DTD 
Deklarace DOCTYPE je v HTML5 velmi krátká, protože neobsahuje odkaz na DTD ve tvaru URL nebo FPI, ale jenom kořenový-element dokumentu, HTML. Slovy samotného standardu: <!DOCTYPE html> bez rozlišování malých a velkých písmen.

Tento formát (!DOCTYPE HTML bez rozlišování malých a velkých písmen) je, až na chybějící URI a FPI, stejný jako DOCTYPE pro HTML 4.01 založené na SGML. Formální syntaxe je v HTML4 i v HTML5 definována pomocí velkých písmen, ale je povoleno i použití malých písmen nebo libovolné kombinace malých a velkých písmen.

V XHTML5 se musí v <!DOCTYPE html> rozlišovat malá a velká písmena, protože XHTML syntaxe vyžaduje, aby všechny HTML PUBLIC používaly malá písmena včetně kořenového-elementu uvedeného v HTML5 DOCTYPE. XHTML dovoluje velká písmena jen ve specifikaci DOCTYPE.

V XHTML5 je DOCTYPE nepovinné. Pokud ale může být dokument zpracován jako XML i HTML, musí se DOCTYPE použít.

Odkazy

Reference

Související články 
 Document Type Definition obsahuje příklady
 RDFa
 XML Schema
 Kaskádové styly (Cascading Style Sheets, CSS)

Externí odkazy 
 
 
 HTML Doctype overview
 Recommended DTDs to use in your Web document – informativní (ne normativní) publikace o W3C Quality Assurance
 DOCTYPE grid – další přehledná tabulka [Last modified 27 November 2006]
 Quirks mode and transitional mode
 Box model tweaking

Standardy založené na XML