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ż:
- element GIEŁDA składa się z opcjonalnego elementu TYTUŁ (znak ?
  po nazwie elementu), po którym może wystąpić dowolna liczba - w tym
  także zero - elementów KURS (znak * po nazwie elementu).
  W szczególności zatem zawartość elementu GIEŁDA może być pusta.
  Gdyby przy nazwie elementu KURS zamiast gwiazdki znajdował się znak
  +, element ten musiałby wystąpić przynajmniej raz.
- element TYTUŁ może zawierać mieszaną zawartość: dowolny tekst bez
  znaczników (#PCDATA) i/lub element(y) DATA. Kolejność jest dowolna.
- elementy DATA i KURS zawierają dowolny tekst.
- element KURS musi mieć atrybut WALUTA (#REQUIRED), którego wartością
  jest dowolny tekst (CDATA) i może (ale nie musi) mieć atrybut TYP,
  mogący przybierać jedną z trzech wartości: "sprzedaż", "kupno" lub
  "średni", przy czym w razie opuszczenia atrybutu przyjęta będzie
  wartość domyślna "średni".
Nie będzie zatem poprawny dokument, w którym np.:
- element TYTUŁ występuje pomiędzy elementami KURS lub po nich,
- występuje więcej niż jeden element TYTUŁ,
- znacznik KURS pozbawiony jest atrybutu WALUTA,
- występują jakiekolwiek inne znaczniki, nie wymienione w DTD.