**Document Type Definition** (**DTD**) er en deklarasjon i et SGML- eller XML-dokument som definerer strukturen til dokumentet. Det kan inkluderes i dokumentfilen, eller lagres i en separat referert fil. Syntaksen for SGML- og XML-type DTD-er ganske lik, men ikke identisk.

En DTD beskriver tillatte elementer og attributter i et dokument og eventuelt tillatte attributtverdier for hvert element. Videre beskriver det hierarki og antall av elementer. Det meste av en DTD pleier å være ELEMENT- og ATTLIST-definisjoner.

Eksempel
--------

Denne enkle XML-type DTD-en beskriver en liste av personer:

```
<!ELEMENT personliste (person*)>
<!ELEMENT person (navn, foedselsdato?, kjoenn?, foedselsnummer?)>
<!ELEMENT navn (#PCDATA) >
<!ELEMENT foedselsdato (#PCDATA) >
<!ELEMENT kjoenn (#PCDATA) >
<!ELEMENT foedselsnummer (#PCDATA) >
```

Hvis vi tar dette linje for linje, uttrykker det:

1. Et **"personliste "**-element inneholder et vilkårlig antall **"person"**-elementer. **"\*"** betegner at det kan være 0, 1 eller mange **"person"**-elementer i **"personliste "**-elementet.
2. Et **"person"**-element inneholder elementene **"navn"**, **"foedselsdato"**, **"kjoenn"** og **"foedselsnummer"**. **"?"** indikerer at et element er frivillig. **"navn"**-elementet har ikke **"?"**. Det betyr at et **"person"**-element *må* inneholde et **"navn"**-element.
3. Et **"navn"**-element inneholder data.
4. Et **"foedselsdato"**-element inneholder data.
5. Et **"kjoenn"**-element inneholder data.
6. Et **"foedselsnummer"**-element inneholder data.

Her er et eksempel på en XML-fil som oppfyller denne DTD-en:

```
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE personliste SYSTEM "eksempel.dtd">
 <personliste>
  <person>
    <navn>Ola Nordmann</navn>
    <foedselsdato>27. november 1960</foedselsdato>
    <kjoenn>Mann</kjoenn>
  </person>
</personliste>
```

DTD-en ovenfor krever at alle person-elementer har et navn-element. personliste-elementet er også påkrevet, mens resten er frivillig.

Der er mulig å fremstille dette i en XML-tilpasset nettleser, som f.eks. IE5 eller Mozilla, ved å lime inn og lagre DTD-komponenten over til en tekstfil kalt eksempel.dtd *og XML-filen til en tekstfil med et annet navn, og så åpne XML-filen med nettleseren. Filene bør lagres til samme katalog. Det er imidlertid mange nettlesere som ikke sjekker at et XML-dokument tilfredsstiller reglene i DTD-en. Det eneste de krever er at* DTD-en *syntaktisk korrekt.*

DTD-kritikk og alternativer
---------------------------

DTD-støtte er svært utbredt ettersom den er en del av XML 1.0-standarden, men har sine begrensninger:

* Ingen støtte for de nyere XML-egenskaper, først og fremst navnerom.
* Mangler uttrykkskraft. Svært mange formelle sider ved et XML-dokument kan ikke beskrives i en DTD.
* Det brukes en spesiell syntaks (opprinnelig fra SGML) som ikke er XML-basert.

Det finnes to nyere XML schema-språk som er mye kraftligere og har fått "anbefalt"-status i W3C og som nå i økende grad foretrekkes foran DTD-er:

* XML Schema, også kalt XML Schema Definition (XSD)
* RELAX NG, som også er en del av DSDL, og en ISO-standard.

Av disse to er XML Schema den desidert mest brukte.

Se også
-------

* Document Type Declaration
* Semantisk web

Eksterne lenker
---------------

* Ulike doctyper for HTML
* XMLPatterns.com – Designmønster for DTD-er