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

Käytettävät avainsanat
----------------------

DTD:llä määritellään dokumentin rakenne käyttämällä seuraavia avainsanoja: 

* **DOCTYPE**: määrittelyn aloitus (liittäminen dokumenttiin)
* **ENTITY**: määrittelee entiteetin ja sen sisällön
* **ELEMENT**: määrittelee elementin ja sen sisällön
* **ATTLIST**: määrittelee elementin attribuuttilistan
* **NOTATION**: määrittelee notaatiotyypin
* **SHORTREF**: määrittee käytettäviä lyhenteitä
* **USEMAP**: määrittelee elementissä käytettävät lyhenteet

Liittäminen dokumentteihin
--------------------------

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. 

### Ulkoinen määrittely

```
<!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 "" 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*. 

### Sisäinen määrittely

```
<?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!*.

Esimerkkejä
-----------

### XHTML

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. 

Esimerkkinä ote XHTML DTD:stä:

```
<!ELEMENT html (head, body)>
<!ATTLIST html
  %i18n;
  id          ID             #IMPLIED
  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
>

```

### HTML

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ä. 

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

```

Lisää aiheesta
--------------

* W3Schools (Arkistoitu – Internet Archive)

Lähteet
-------

1. ↑   (Arkistoitu – Internet Archive)
2. 1 2   (Arkistoitu – Internet Archive)
3. ↑   (Arkistoitu – Internet Archive)
4. ↑
5. ↑
6. ↑   (Arkistoitu – Internet Archive)