Dokumentet kan peka mot DTDn på två olika sätt; externt och internt. Det finns också ett tredje - blandat. Oavsett vilken typ av DTD som används görs en referens till den med hjälp av dokumenttypsdeklarationen.
När en DTD är extern befinner den sig i en separat fil och kan användas med ett obegränsat antal dokument av samma typ. I deklarationen måste då identifieras DTDns källa.
Dokumenttypsdeklaration som pekar mot en extern dtd, artikel.dtd.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE artikel SYSTEM "artikel.dtd"> <?xml-stylesheet href="artikel.css" type="text/css"?> <artikel> ... </artikel>
Deklarationen talar om att:
<!DOCTYPEartikelSYSTEMartikel.dtdSYSTEM är en systemidentifierare som talar om att DTDn är i privat ägo. Dess värde måste alltid vara dokumentets källa, till exempel en URL (Universal ResourceLocator).
Det finns även DTDer som finns i publik domän och som kan användas och refereras av alla. Om man vill använda sig av en sådan DTD byter man systemidentifieraren till en publik. Det innebär att nyckelordet SYSTEM måste ändras till PUBLIC och att namn på dokumentets ägare uppges, t ex PUBLIC W3C. Alla W3Cs DTDer är publika, bl a de tre DTDerna för XHTML. För att peka till en av de, t ex till språkets strikta version måste man lägga följande dokumenttypsdeklaration i sitt (X)HTML-dokument.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
Vissa redskap, t ex validatorer, hanterar inte relativa adresser till externa DTDer. Därför bör en hel sökväg till DTDn uppges. Om filen ligger på det lokala systemet bör sökvägen börja med C:\\\ (om filen finns på C:). Om filen ligger på Webben måste adressen börja med http://.
När en DTD är intern befinner den sig i själva dokumentet och då gäller den enbart i det befintliga dokumentet.
Dokumenttypsdeklaration som innehåller en DTD.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <?xml-stylesheet href="artikel.css" type="text/css"?> <!DOCTYPE artikel [ <!ELEMENT artikel (meta-info, body)> <!ELEMENT meta-info (titel, skribent+)> <!ELEMENT titel (#PCDATA)*> <!ELEMENT skribent (#PCDATA)*> <!ELEMENT body (rubrik | stycke)*> <!ELEMENT rubrik (#PCDATA)*><!ELEMENT stycke (#PCDATA)*> ]> <artikel> ..... </artikel>
Då DTDn inkluderades i detta dokument är dokumentet fullständigt. Därför ska attributvärdet
standalone="yes"
läggas till i XML-deklarationen
Observera att även här är dokumenttypen artikel och att DTDs deklarationer skrivs inom hakparenteser.
Det finns tillfällen då man behöver definiera vissa enheter som är specifika för ett befintligt dokument. Ett sådant tillfälle kan vara när man vill länka externa filer till dokumentet. Då dessa externa filer enbart ska länkas till det befintliga dokumentet finns det ingen anledning att definiera t ex entitetsdeklarationer någon annanstans.
En extern och en intern dokumenttypsdeklaration. Detta dokument dels hänvisar till en extern DTD, bok.dtd, dels definierar de artiklar som ska länkas till dokumentet i en intern DTD.
<?xml version="1.0" ?> <!DOCTYPE bok SYSTEM "bok.dtd" [ <!ENTITY art1 SYSTEM "art1.xml" NDATA dubdok-xml> <!ENTITY art2 SYSTEM "art2.xml" NDATA dubdok-xml> ]> <bok band="1"> ... </bok>
Dokumenttyps-deklarationen kan dels peka på en extern DTD dels innehålla en intern subset för att "skräddarsy" dokumentet. I händelse av konflikt (t ex samma elementtyp deklarerar två gånger) gäller den interna deklarationen.