Les éléments, y compris l'élément racine, apparaissant dans le document XML doivent être au préalable définis dans la Déclaration de Type de Document (DTD).

Cette déclaration permet de spécifier un nom et éventuellement un contenu ou un type de contenu à l'élément concerné.

Un processeur XML peut émettre un avertissement lorsqu'une déclaration mentionne un élément pour lequel aucune déclaration n'a été fournie, toutefois cela ne constitue pas une erreur rédhibitoire.

L'instruction ELEMENT permet de déclarer les éléments composant le document XML.

<!ELEMENT Nom_Elément Spécifications>

Les spécifications de la déclaration comportent plusieurs valeurs possibles.

Valeur Description
ANY indique que n'importe quelle donnée peut être contenue par l'élément XML.
EMPTY permet de déclarer un élément XML vide.
(#PCDATA) signifie que l'élément XML n'acceptera que des données textuelles analysées (Parsed Character DATA) soit tout types de caractères hormis les balises d'éléments XML.
(Elément,..., ElémentN) spécifie l'inclusion d'un ou plusieurs éléments enfants au sein des balises de l'élément concerné.
(Elément|Elément2) signifie l'inclusion du premier élément enfant ou du second au sein des balises de l'élément concerné.

Les éléments enfants peuvent faire l'objet de récurrences à l'intérieur de l'élément parent.

Indicateur Description
(Elément?) implique l'apparition de l'élément une seule fois ou pas du tout (0-1) dans l'élément parent.
(Elément+) implique l'apparition de l'élément une ou plusieurs fois (1-N) dans l'élément parent.
(Elément*) implique l'apparition de l'élément plusieurs fois ou pas du tout (0-N) dans l'élément parent.

La répétition d'un même élément enfant dans un élément parent permet de contraindre l'élément conteneur à acceuillir le nombre d'itérations précitées de l'élément enfant.

<!ELEMENT Parent (Enfant, Enfant, Enfant)

Dans ce cas, le nombre d'itérations de Elément_enfant dans Elément_parent est de trois. Alors l'élément parent devra accueillir trois et seulement trois éléments enfants pour se conformer à la déclaration.

Exemple :
<?xml version="1.0" standalone="yes"?<
<!DOCTYPE bibliothèque [
  <!ELEMENT bibliothèque (livre)>
  <!ELEMENT livre (titre)>
  <!ELEMENT titre (#PCDATA)>
]>
<bibliothèque>
  <livre>
  <titre>La bible XML</titre>
  </livre>
</bibliothèque>

La DTD déclare un élément livre contenant un élément enfant titre composé de données textuelles analysées. Par ailleurs, l'élément racine bibliothèque doit contenir l'élément livre. L'élément racine doit faire l'objet d'un déclaration complémentaire afin de lui donner ces propres caractéristiques.

<?xml version="1.0" standalone="yes"?<
<!DOCTYPE bibliothèque [
  <!ELEMENT bibliothèque ANY>
  <!ELEMENT livre (titre,numero,couverture?)>
  <!ELEMENT collection (titre,numero)>
  <!ELEMENT titre (#PCDATA)>
  <!ELEMENT numéro (#PCDATA)>
  <!ELEMENT couverture EMPTY>
]>
<bibliothèque>
  La bibliothèque de l'université contient :
  <livre>
  <titre>La bible XML</titre>
  <numéro>XML0023</numéro>
  <couverture/>
  </livre>
  <collection>
  <titre>XML, par la pratique</titre>
  <numéro>XML1023</numéro>
  </collection>
</bibliothèque>

L'élément racine bibliothèque peut tout contenir du texte ou encore des éléments enfants. L'élément livre doit contenir trois éléments enfants : titre, numero et couverture.

Ce dernier étant associé à un point d'interrogation peut apparaître une seule fois ou pas du tout. Par ailleurs, l'élément couverture est déclaré comme élément vide (EMPTY).

<?xml version="1.0" standalone="yes"?<
<!DOCTYPE bibliothèque [
  <!ELEMENT bibliothèque (livre+,collection*)>
  <!ELEMENT livre (titre,numero,couverture?)>
  <!ELEMENT collection (titre,numero)>
  <!ELEMENT titre (#PCDATA)>
  <!ELEMENT numéro (#PCDATA)>
]>
<bibliothèque>
  <livre>
  <titre>La bible XML</titre>
  <numéro>XML0001</numéro>
  <couverture/>
  </livre>
  <livre>
  <titre>La programmation XML</titre>
  <numéro>XML0023</numéro>
  </livre>
  <collection>
  <titre>XML, par la pratique</titre>
  <numéro>XML1023</numéro>
  </collection>
</bibliothèque>

L'élément parent bibliothèque doit être composé d'au moins un élément livre et de zéro à plusieurs collections.

<?xml version="1.0" standalone="yes"?<
<!DOCTYPE bibliothèque [
  <!ELEMENT bibliothèque (livre+,index?)>
  <!ELEMENT livre ((titre,numero)?|volume+)>
  <!ELEMENT volume (titre,numero)>
  <!ELEMENT index (lettre+)>
  <!ELEMENT titre (#PCDATA)>
  <!ELEMENT numéro (#PCDATA)>
  <!ELEMENT lettre (#PCDATA)>
]>
<bibliothèque>
  <index>
  <lettre>H</lettre>
  <lettre>C</lettre>
  <lettre>X</lettre>
  </index>
  <livre>
  <titre>La bible XML</titre>
  <numéro>XML0001</numéro>
  </livre>
  <livre>
  <volume>
      <titre>XML, par la pratique</titre>
      <numéro>XML1023</numéro>
  </volume>
  </livre>
</bibliothèque>

L'élément racine bibliothèque peut contenir de aucun à plusieurs éléments livre, au moins une volume et de zéro ou un index.

L'élément livre doit contenir un titre et un numéro ou (|) au moins un seul volume.