Document Type Definition
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
redigerDenne 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:
- 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.
- 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.
- Et "navn"-element inneholder data.
- Et "foedselsdato"-element inneholder data.
- Et "kjoenn"-element inneholder data.
- 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
redigerDTD-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å
rediger