DTD (lyhenne sanoista Document Type Definition) on yksi SGML- ja XML- kielten yhteydessä käytetyistä rakennemäärittelytavoista. DTD määrittelee rakenteisen dokumentin sallitut ilmenemismuodot elementeille ja attribuuteille siten että määrittelystä muodostuu uusi merkintäkieli.
DTD:llä määritellään dokumentin rakenne käyttämällä seuraavia avainsanoja: [1]
DTD liitetään dokumentteihin lisäämällä dokumenttityyppimäärittely avainsanalla DOCTYPE, joka on aina dokumentin alussa (XML:ssä aina XML- määrittelyn jälkeen) annettava merkintä. Merkintä määrittelee, että mikä on DTD:n tunniste ja sijainti, sekä sen mistä DTD:n elementistä kyseisen dokumentin rakenne alkaa. Merkintään voidaan liittää myös sisäisiä rakennemäärittelyjä siten että ulkoista määrittelyä ei tarvita välttämättä lainkaan. [2]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Määrittelyssä html kertoo että tämä dokumentti alkaa elementillä html ja että rakenteen tarkastus pitäisi aloittaa siitä elementistä. PUBLIC määrittelee että seuraava merkkijono on DTD:n julkinen tunniste, jota voidaan käyttää hyväksi DTD:n hakemisessa esimerkiksi sovelluksen omasta DTD- hakemistosta. DTD:n tunnisteena tässä toimii "-//W3C//DTD XHTML 1.0 Transitional//EN" ja sitä vastaava tiedosto löytyy osoitteesta "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" jos tunnisteen perusteella ei löytynyt paikallista kopiota. Ulkoiseen tiedostoon voidaan viitata suoraan ilman tunnistetta käyttämällä merkinnän PUBLIC sijaan merkintää SYSTEM. [2]
<?xml version="1.0"?> <!DOCTYPE juuri [ <!ENTITY moikkaus "Moi!"> ]> <juuri>&moikkaus;</juuri>
Tässä määritellään että XML- dokumentti alkaa elementillä juuri, mutta mitään ulkoisia määrittelyjä ei anneta. Sen sijaan hakasulkeiden sisällä määritellään sisäisesti yksi entiteetti nimeltä moikkaus. Entiteettiä käytetään elementin juuri sisällä siten, että sen paikalle tulee teksti Moi!. [3]
XHTML- merkintäkielen DTD määrittelee että dokumentin juurielementtinä pitää aina olla html, ja että html elementin alla on aina ensimmäisenä elementti head ja toisena elementti body. Vastaavasti DTD määrittelee näiden elementtien sallitut tai vaaditut attribuutit. [4]
Esimerkkinä ote XHTML DTD:stä:
<!ELEMENT html (head, body)> <!ATTLIST html %i18n; id ID #IMPLIED xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml' >
DTD voi myös määritellä rakenteita siten, että vaikka varsinaisessa dokumentissa ei ole elementille merkintää (niin sanottuja tägejä), on dokumentti kuitenkin tulkittava siten että elementti on annettu. Esimerkiksi HTML- merkintäkielen DTD määrittelee että juurielementin HTML voi jättää merkitsemättä. [5][6]
Esimerkkinä ote HTML DTD:stä (merkintä "O O" tarkoittaa että alku- ja lopputägejä ei tarvitse merkitä):
<!ELEMENT HTML O O (%html.content;) -- document root element --> <!ATTLIST HTML %i18n; -- lang, dir -- >