Déclaration d'éléments

SyntaxeDéclaration d'éléments

Les déclarations d'éléments sont de la forme :

1
<!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).

ExempleExemple de déclaration d'éléments

1
<!ELEMENT texte (paragraphe)>
2
<!ELEMENT paragraphe (#PCDATA)>

Un texte contient un paragraphe qui contient un flux de caractères.

1
<texte>
2
    <paragraphe>Ceci est un flux de caractères</paragraphe>
3
</texte>

SyntaxeSé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.

ExempleExemple de déclaration de deux éléments fils ordonnés

1
<!ELEMENT texte (titre, paragraphe)>
2
<!ELEMENT titre (#PCDATA)>
3
<!ELEMENT paragraphe (#PCDATA)>
1
<texte>
2
    <titre>Ceci est le flux de caractères du titre</titre>
3
    <paragraphe>Ceci est le flux de caractères du paragraphe</paragraphe>
4
</texte>

ExempleExemple de déclaration d'alternative

1
<!ELEMENT texte ((titre | accroche), paragraphe)>
2
<!ELEMENT titre (#PCDATA)>
3
<!ELEMENT accroche (#PCDATA)>
4
<!ELEMENT paragraphe (#PCDATA)>

SyntaxeSuffixes 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.

ExempleExemple général

Les éléments x, y, z1 et z2 sont représentés vides pour alléger l'exemple.

1
<!ELEMENT mon_elem (x?, y*, (z1, z2)+)>

permet :

1
<mon_elem> <x/><y/><z1/><z2/> </mon_elem>
2
<mon_elem> <z1/><z2/> </mon_elem>
3
<mon_elem> <z1/><z2/><z1/><z2/> </mon_elem>
4
<mon_elem> <x/><y/><y/><y/><z1/><z2/><z1/><z2/> </mon_elem>
5
<mon_elem> <y/><y/><y/><y/><z1/><z2/> </mon_elem>
6
...

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.