Definicje typu dokumentu

Definicje typu dokumentu (DTD) są podstawą budowy wszelkich szczegółowych języków opartych na SGML-u i XML-u. Określają one, jakie znaczniki mogą pojawić się w treści dokumentu, w jakiej kolejności i jakie mogą mieć atrybuty. Weźmy pod uwagę podany w tekście przykład dokumentu zawierającego kursy walut. Definicja typu dokumentu może być zawarta bezpośrednio w dokumencie lub zapisana w osobnym pliku, do którego w dokumencie umieszczamy tylko odwołanie. Możliwe jest też połączenie tych dwu możliwości - ogólna część definicji, opisująca całą klasę podobnych dokumentów, zawarta jest w zewnętrznym pliku, natomiast specyficzne elementy charakterystyczne tylko dla tego dokumentu zawarte są wewnątrz.

Tak oto wygląda dokument z odwołaniem do zewnętrznej DTD zawartej w pliku gielda.dtd:

     <?xml version="1.0"?>
     <!DOCTYPE GIEŁDA SYSTEM "gielda.dtd">
     <GIEŁDA>
     <TYTUŁ>Kursy walut z dnia <DATA>01.10.1999</DATA></TYTUŁ>
     <KURS WALUTA="USD">4,0662</KURS>
     <KURS WALUTA="GBP">6,7184</KURS>
     <KURS WALUTA="DEM">2,2364</KURS>
     <KURS WALUTA="FRF">0,6668</KURS>
     </GIEŁDA>
W deklaracji !DOCTYPE najpierw występuje nazwa elementu, który jest głównym elementem dokumentu - w tym przypadku jest to GIEŁDA. Użycie deklaracji !DOCTYPE z inną nazwą byłoby w tym dokumencie niepoprawne. Parametr SYSTEM informuje, że właściwa definicja typu dokumentu zapisana jest w pliku gielda.dtd - oto jej treść (zamiast odwoływać się do dodatkowego pliku, poniższą definicję moglibyśmy również w całości umieścić wewnątrz dokumentu):

     <!DOCTYPE GIEŁDA [
       <!ELEMENT GIEŁDA (TYTUŁ?,KURS*)>
       <!ELEMENT TYTUŁ (#PCDATA|DATA)*>
       <!ELEMENT DATA (#PCDATA)>
       <!ELEMENT KURS (#PCDATA)>
       <!ATTLIST KURS
         WALUTA CDATA #REQUIRED
         TYP (sprzedaż|kupno|średni) "średni"
       >
     ]>
Definicja ta mówi nam, iż: Nie będzie zatem poprawny dokument, w którym np.: