Déclaration d'éléments
Syntaxe : Déclaration d'éléments
Les déclarations d'éléments sont de la forme :
<!ELEMENT nom (modèle)>
où :
Le
nom
obéit aux mêmes règles que les noms dans les balises, c'est à dire commençant par un caractère alphabétique (ou un tiret bas) suivi des caractères alphanumériques, point ou tiret bas.Le
modèle
décrit la combinaison d'éléments et de texte qui pourra être contenue dans cet élément :(nom d'un ou plusieurs élément fils)
Indique que l'élément peut contenir un ou des fils ayant le nom indiqué.
(#PCDATA)
Indique la possibilité de contenir un flot de caractères (Parsed Character Data).
Exemple : Exemple de déclaration d'éléments
<!ELEMENT texte (paragraphe)>
<!ELEMENT paragraphe (#PCDATA)>
Un texte contient un paragraphe qui contient un flux de caractères.
<texte>
<paragraphe>Ceci est un flux de caractères</paragraphe>
</texte>
Syntaxe : Séparateur de structuration
Les éléments fils déclarés peuvent être combinés pour décrire en détail la structure du contenu de l'élément en les séparant par :
,
Indique une relation d'ordre (connecteur logique
AND
avec une notion d'ordre) : si par exemple si le modèle est(x,y)
alors l'élément x devra être présent, et ce avant l'élément y.|
Indique une alternative (connecteur logique "ou exclusif"
XOR
). Le modèle(x|y)
indique "soit x soit y".
L'utilisation de parenthèses permet de créer des sous-listes dans la liste principale pour lesquelles les suffixes de cardinalité sont également applicables.
Exemple : Exemple de déclaration de deux éléments fils ordonnés
<!ELEMENT texte (titre, paragraphe)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT paragraphe (#PCDATA)>
<texte>
<titre>Ceci est le flux de caractères du titre</titre>
<paragraphe>Ceci est le flux de caractères du paragraphe</paragraphe>
</texte>
Exemple : Exemple de déclaration d'alternative
<!ELEMENT texte ((titre | accroche), paragraphe)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT accroche (#PCDATA)>
<!ELEMENT paragraphe (#PCDATA)>
Syntaxe : Suffixes de cardinalité
Les éléments fils peuvent être déclarés avec des suffixes permettant d'exprimer leur cardinalité :
? : l'élément devra être présent de 0 à 1 fois.
* : l'élément devra être présent de 0 à n fois.
+ : l'élément devra être présent de 1 à n fois.
L'absence de suffixe indique que l'élément doit apparaître une et une seule fois.
Exemple : Exemple général
Les éléments x, y, z1 et z2 sont représentés vides pour alléger l'exemple.
<!ELEMENT mon_elem (x?, y*, (z1, z2)+)>
permet :
<mon_elem> <x/><y/><z1/><z2/> </mon_elem>
<mon_elem> <z1/><z2/> </mon_elem>
<mon_elem> <z1/><z2/><z1/><z2/> </mon_elem>
<mon_elem> <x/><y/><y/><y/><z1/><z2/><z1/><z2/> </mon_elem>
<mon_elem> <y/><y/><y/><y/><z1/><z2/> </mon_elem>
...
Attention : Élément racine
L'élément racine n'est pas spécifié dans une DTD, il le sera dans la référence à la DTD faite depuis le fichier XML. Cela permet en particulier à une DTD de spécifier plusieurs langages (plusieurs éléments racines), même si cela n'est pas en général conseillé.
Par convention on déclarera en premier l'élément racine.