DTD filens konstruktion
Nedan är en liten DTD fil:
<!ELEMENT products (product+)>
  <!ELEMENT product (code,price,amount)>
  <!ELEMENT code (#PCDATA)>
  <!ELEMENT price (#PCDATA)> 
  <!ELEMENT amount (#PCDATA)>
Den kan tolkas som:
  Rotnoden måste heta products och skall innehålla mist en 
  product nod.
  Product noden måste innehålla code, price och 
  amount noder, men bara en av varje.
  code, price och amount noderna består av teckendata
DTD beståndsdelar
En DTD kan bestå av tre olika saker:
  - ELEMENT
 Säger vilka tags som godkänns och hu de skall nästas
 
 
- ATTLIST
 Säger vilka attribut en tag har
 
 
- ENTITY
 Makron som innehåller fördefinierade värden
ELEMENT
Bestämmer tags och hur de skall användas.
<!ELEMENT firstname (#PCDATA)>
betyder att det finns ett element (tag) med namnet firstname, som består 
  av textdata (PCDATA). Taggen får inte ha undernoder. Ex:
<firstname>Putte</firstname>
är OK, medan
<firstname>
     <veryfirst>Kalle</veryfirst>
     <other>Erik</other>
  </firstname> 
inte uppfyller DTD:ns krav
<!ELEMENT person (firstname, lastname)>
betyder att elementet person inte har eget data utan skall ha två 
  undernoder med namnen fisrtnname och lastname (i nämnd ordning). Ex:
<person>
     <firstname>Kalle</firstname>
     <lastname>Eriksson</lastname>
  </person> 
Man kan sedan använda kompletterande tecken:
+ betyder att det får finnas flera, men måste finnas minst 
  en - 1 eller flera
  * betyder att det får finnas flera, men får även vara 
  tomt - 0, en eller flera
  ? betyder att man inte måste ange detta - 0 eller 1
  frånvaro av tecken betyder att det måste förekomma endast en 
  - 1
Detta betyder att följande:
<!ELEMENT person (firstname,middlename?, lastname, phone+, adress*)>
betyder att en person måste ha ett förnamn, kan ha 
  ett mellannamn, måste ha ett efternamn, måste ha telefon 
  men kan även ha flera, kan ha en adress eller flera adresser men måste 
  inte ha någon. Nedan är några exempel på XML data som 
  uppfyller detta.
<person>
     <firstname>Kalle</firstname>
     <lastname>Eriksson</lastname>
     <phone>123456</phone>
     <phone>321123</phone> 
  </person> 
Om man kobinerar med komma(,) betyder det att elementen måste komma i 
  den ordning som de satts in. Det finns även en annan möjlighet och 
  det är att kombinera med |
  
  <!ELEMENT record ( title, ( artist | group ))>
  betyder att noden record måste ha en undernod title och 
    kan ha antingen en artist nod eller en group nod men inte bägge
  Det finns mer att säga om DTD och ELEMENT, framför allt om ID och 
    IDREFS, men för tillfället så nåjer vi os med detta
ATTLIST
Attlist används för att specificera vilka attribut en tag har.
<!ELEMENT song (#PCDATA)>
  <!ATTLIST song length CDATA #IMPLIED>
beryder att song taggen har ett attribut som heter length och som är av 
  CDATA typ (text och/eller siffror). Det är inte obligatoriskt att ange 
  detta attribut. EX:
<song length="4.22">Do, Re, Mi</song>
  <song length="too long">Do, Re, Mi</song> 
  <song>Do, Re, Mi</song> 
Är samtliga korrekta enligt den ATTLISt som skrevs ovan
 <!ATTLIST song length CDATA #REQUIRED> 
betyder däremot att length måste anges. Detta medför 
  att med denna DTD beskrivining är inte ovanstående XML fragment korrekt.
  
 
  <!ATTLIST person sex (M | F) #REQUIRED> 
  
  betyder att person taggens sex attribut måste vara M 
    eller F och måste anges 
  
Om en tag har flera attribut skrivs dessa i samma ATTLIST
 <!ATTLIST song length CDATA #REQUIRED
                  rating 
  (good | bad | ugly) #IMPLIED
                  type 
  CDATA "rock"
                  extra 
  CDATA #FIXED "no reason"> 
Betyder att song taggen måste ha ett length attribut, 
  kan ha ett rating attribut som i så fall måste vara något 
  av alternativen good, bad eller ugly 
  och kan ha en type attribut som kommer att få defaultvärdet 
  rock om det inte anges
  Det finns dessutom ett attribut med namnet extra som alltid har värdet 
  no reason vad än vi försöker ställa in i XML filen.
Fölljande nyckelord förekommer i en ATTLIST
#IMPLIED -
  inte obligatoriskt
#REQUIRED 
  obligatoriskt
#FIXED "ett värde"
  attributet kommer alltid att ha det värde som finns specificerat
"värde"
  attributet kommer att ha som defaultvärde det värde som här specificerats
  
  ENTITY
Används för att förbestämma värden (makron)
<!ENTITY adress "West East Street">
betyder att det finns ett fördefinierat namn adress som har värdet 
  West East Street. Detta kan vara användbart i websammanhang då 
  man kan göra t.ex. följande:
  
<!ENTITY logo "images/logo.gif">
vilket gör att man kan använda &logo; var som helt i XML 
  datat och detta kommer att ersättas med images/logo.gif. Observera 
  att man alltid måste sätta & före namnet och ett ; (semikolon) 
  efter. Den vane HTML kodaren känner igen detta. Exakt samma system används 
  i HTML för t.ex.   som sätter in ett hårt mellanslag 
  i texten.
En annan variant av ENTITY är följande:
<!ENTITY % alternativ "ja | nej | kanske">
Detta används närmast tillsammans med ATTLIST och gör att man 
  kan skriva 
  
 <!ATTLIST what answer (%alternativ;) #REQUIRED> 
vilket gör att man måste använda något av alternativen 
  som specificerats i alternativ ENTITYN