Rappelons qu'un élément permet de structurer le document (par exemple livre est un élément d'un document bibliothèque, en HTML p, h1, form... sont des éléments).
La déclaration d'éléments est de la forme :
<!ELEMENT nom_element modele_de_contenu>
<!ELEMENT nom_element EMPTY>
Par exemple, dans la DTD de XHTML 1.0 l'élément img est
déclaré : <!ELEMENT img EMPTY>
Un élément non vide est formé d'une balise ouvrante, d'un contenu et d'une balise fermante. Pour décrire ce contenu dans la DTD on utilise un modèle de contenu dans la déclaration d'éléments.
Si l'élément contient uniquement des données (autrement dit, s'il n'y a aucun autre élément inclus dans cet élément) on utilise le type #PCDATA
qui signifie Parsed Character DATA i.e. données caractères analysées :
<!ELEMENT nom_element (#PCDATA)>
Par exemple, dans la DTD de XHTML 1.0 l'élément title qui permet de donner
le titre de la fenêtre est déclaré :
<!ELEMENT title (#PCDATA)>
Si l'élément contient uniquement d'autres éléments, le modèle de contenu définit les éléments pouvant être inclus dans un élément donné et spécifie également les éléments devant apparaître obligatoirement, leur ordre et leur fréquence.
Les parenthèses dans la déclaration d'élément introduisent les éléments enfants de l'élément défini. L'ordre dans lequel les éléments sont précisés est l'ordre dans lequel ils doivent apparaître dans l'élément en cours de définition.
Par exemple, dans la DTD de XHTML 1.0 l'élément racine html qui contient
les éléments head et body est déclaré
<!ELEMENT html (head, body)>
.
Les indicateurs d'occurrences sont les suivants :
<!ELEMENT ul li+>
Pour indiquer des choix, il est possible d'utiliser le |. Dans la DTD XHTML1.0 l'élément dl est déclaré :
<!ELEMENT dl (dt|dd)+>
<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
<!ELEMENT nom_element ANY>
<!ELEMENT bibliotheque (livre+)>
<!ELEMENT livre (titre, auteur, ref)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (nom, prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT ref (#PCDATA)>
Avec une DTD interne le document XML serait le suivant :
<?xml version="1.0"?>
<!DOCTYPE bibliotheque [
<!ELEMENT bibliotheque (livre+)>
<!ELEMENT livre (titre, auteur, ref)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (nom, prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT ref (#PCDATA)>
]>
<bibliotheque>
...
</bibliotheque>
<!ELEMENT bibliotheque (livre+)>
<!ELEMENT livre (titre, auteur, ref)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (nom, prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT ref (#PCDATA)>
et dans le document XML :
<?xml version="1.0"?>
<!DOCTYPE bibliotheque SYSTEM "biblio.dtd">
<bibliotheque>
...
</bibliotheque>