DTD ( engelsk Document Type Definition - document type definition) er en forkortelse for følgende to begreber:
På grund af visse forskelle mellem XML og SGML har anvendelsen af en DTD også nogle ejendommeligheder afhængigt af måldokumentet.
Nu er der et afslag på at bruge DTD i XML- teknologi af en række årsager [1] :
DTD'en er blevet erstattet af W3C XML Schema- standarden .
En DTD beskriver skemaet for et dokument for et bestemt opmærkningssprog ved hjælp af et sæt erklæringer [parameterobjekter, elementer og elementattributter], der beskriver dets klasse (eller type) i form af de syntaktiske begrænsninger for det pågældende dokument. En DTD kan også erklære konstruktioner, der altid er nødvendige for at definere strukturen af et dokument, men som på den anden side kan påvirke fortolkningen af visse dokumenter.
En parameterobjekterklæring definerer en makro af en bestemt type, der kan refereres til og udvides et sted i DTD'en. Disse makroer vises muligvis ikke i selve dokumentet, men kun i DTD'en. Hvis der refereres til et parameterobjekt med dets DTD-navn, udvides det til en streng, der specificerer indholdet af dette objekt.
Eksempler:
<!ENTITY % skrifttypestil "TT | I | B | BIG | SMALL">Parameterobjektet fontstyleindeholder en gruppe tags TT | I | B | BIG | SMALL.
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">Parameterobjektet inlineindeholder tekstdata og yderligere fire parameterobjekter fontstyle, phraseog . specialformctrl
Elementerklæringer definerer (specificerer) sættet af tilladte elementnavne i et dokument, indholdstypen for hvert element og de påkrævede/valgfri tags .
Forskellige nøgleord og symboler definerer indholdet af et element:
Eksempler:
<!ELEMENT DL - - (DT|DD)+>Et element DLskal indeholde et eller flere elementer DTeller DDi en hvilken som helst rækkefølge.
<!ELEMENT FORM - - (%blok;|SCRIPT)+ -(FORM)>Et element FORMskal indeholde et eller flere elementer som et parameterobjekt blockeller element SCRIPTi vilkårlig rækkefølge, men det er ikke muligt at indeholde et andet element FORM.
Hvert element i et DTD-dokument kan tildeles en liste over attributter. Til dette bruges direktivet !ATTLIST, som specificerer navnet på det element, som listen over attributter er tildelt, og parametrene for hver attribut: navn, type og standardværdi.
For eksempel:
<!ATTLIST MAP navn CDATA #REQUIRED>I dette eksempel MAPer attributten defineret på elementet name. Det er obligatorisk.
Eksisterende attributtyper:
Der er følgende standardegenskaber:
For at knytte et dokument til en bestemt DTD skal elementet Dokumenttypeerklæring vises i begyndelsen af dokumentets brødtekst .
Afhængigt af DTD'ens placering kan dokumenttypeerklæringen være af to typer:
Et sæt DTD-erklæringer er indeholdt i selve dokumentet. For eksempel:
<!DOCTYPE foo [ <!ENTITY-hilsen "helloworld"> ]> <!DOCTYPE bar [ <!ENTITY hilsen "helloworld"> ]>Et sæt DTD-erklæringer er placeret i en separat tekstfil med filtypenavnet .dtd. I dette tilfælde kan filen refereres via en offentlig identifikator og/eller en systemidentifikator. For eksempel:
<!-- Almindelig HTML 4.01 validering --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">Et eksempel på en meget simpel XML DTD, der beskriver en liste over personer:
<!ELEMENT people_list (person*)> <!ELEMENT person (navn, fødselsdato?, køn?, socialsecuritynumber?)> <!ELEMENT name (#PCDATA) > <!ELEMENT fødselsdato (#PCDATA) > <!ELEMENT køn (# PCDATA) > <!ELEMENT socialsecuritynumber (#PCDATA) >Startende fra første linje:
Et eksempel på et XML-dokument, der bruger denne DTD:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE people_list SYSTEM "example.dtd"> <people_list> <person> <navn> Fred blogger </navn> <fødselsdato> 27/11/2008 </fødselsdato> <køn> Han </køn> <socialsecuritynumber> 1234567890 </socialsecuritynumber> </person> </people_list>