Tutoriel DTD


1. Exemple 1
2. Exemple 2
3. Exemple 3
4. Exemple 4
5. Exemple 5
6. Exemple 6
7. Exemple 7
8. Exemple 8
9. Exemple 9
10. Exemple 10
11. Exemple 11
12. Exemple 12
13. Exemple 13
14. Exemple 14
15. Exemple 15


1. Exemple 1

    Un document XML est valide s'il est associé à une définition de type de document et s'il respecte les contraintes qui y sont définies. La définition de type de document doit apparaître avant le premier élément du document. Le nom qui suit le mot DOCTYPE dans la définition de type de document doit correspondre au nom de l'élément racine.

  • <!ELEMENT tutorial (#PCDATA)>
    Un document ne peut comporter qu'un seul élément racine tutorial qui peut contenir du texte

  • Valide
    <tutorial>Ceci est un document XML</tutorial>
    Document valide comportant du texte

  • Valide
    <tutorial/>
    Ce document est également valide

  • Non valide
    <text>Ceci est un document XML</text>
    L'élément racine n'est pas conforme à la DTD spécifiée


2. Exemple 2

    Un type d'élément a un contenu d'élément lorsque les éléments de ce type ne doivent comporter que des élément fils (aucune donnée caractère), éventuellement séparés par des espaces.

  • <!ELEMENT XXX (AAA , BBB)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)>
    L'élément racine XXX doit précisément comporter un élément AAA, suivi d'un élément BBB. Les éléments AAA et BBB peuvent contenir du texte, mais aucun autre élément.

  • Valide
    <XXX> <AAA>Début</AAA> <BBB>Fin</BBB> </XXX>
    Document valide contenant du texte

  • Valide
    <XXX> <AAA/> <BBB/> </XXX>
    Ce document est également valide

  • Non valide
    <XXX> <AAA/> ___ </XXX>
    L'élément BBB est absent

  • Non valide
    <XXX> <BBB/> <AAA/> </XXX>
    L'élément BBB doit suivre l'élément AAA

  • Non valide
    <XXX> <AAA/> <BBB/> <BBB/> </XXX>
    L'élément racine XXX ne peut contenir qu'un élément BBB

  • Non valide
    <XXX> Eléments : <AAA/> <BBB/> </XXX>
    L'élément racine XXX ne doit contenir aucun texte


3. Exemple 3

    Dans une DTD, si un nom d'élément est suivi d'un astérisque [*], cet élément peut figurer zéro, une ou plusieurs fois.

  • <!ELEMENT XXX (AAA* , BBB)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)>
    L'élément racine XXX peut contenir zéro, un ou plusieurs éléments AAA, suivis précisément d'un élément BBB. L'élément BBB doit toujours être présent

  • Valide
    <XXX> <AAA/> <BBB/> </XXX>
    Document valide

  • Valide
    <XXX> <BBB/> </XXX>
    Autre document valide. L'élément AAA n'est pas obligatoire

  • Valide
    <XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>
    Plusieurs éléments AAA peuvent figurer dans le document

  • Non valide
    <XXX> ___ </XXX>
    L'élément BBB est absent

  • Non valide
    <XXX> <BBB/> <AAA/> </XXX>
    L'élément BBB doit suivre l'élément AAA

  • Non valide
    <XXX> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> <AAA/> <AAA/> </XXX>
    L'élément AAA ne doit pas suivre l'élément BBB


4. Exemple 4

    Dans une DTD, si un nom d'élément est suivi du signe plus [+], cet élément peut figurer une ou plusieurs fois.

  • <!ELEMENT XXX (AAA+ , BBB)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)>
    L'élément racine XXX doit contenir un ou plusieurs éléments AAA, suivis précisément d'un élément BBB. L'élément BBB doit toujours être présent

  • Valide
    <XXX> <AAA/> <BBB/> </XXX>
    Document valide

  • Valide
    <XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>
    Plusieurs éléments AAA peuvent figurer dans le document

  • Non valide
    <XXX> ___ ___ </XXX>
    Les éléments AAA et BBB sont absents

  • Non valide
    <XXX> ___<BBB/> </XXX>
    Au moins un élément AAA doit être présent

  • Non valide
    <XXX> <BBB/> <AAA/> </XXX>
    L'élément BBB doit suivre l'élément AAA

  • Non valide
    <XXX> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> <AAA/> <AAA/> </XXX>
    L'élément AAA ne doit pas suivre l'élément BBB


5. Exemple 5

    Dans une DTD, si un nom d'élément est suivi d'un point d'interrogation [?], cet élément peut figurer zéro ou une fois.

  • <!ELEMENT XXX (AAA? , BBB)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)>
    L'élément racine XXX peut contenir un élément AAA, suivi précisément d'un élément BBB. L'élément BBB doit toujours être présent.

  • Valide
    <XXX> <AAA/> <BBB/> </XXX>
    Document valide

  • Valide
    <XXX> <BBB/> </XXX>
    L'élément AAA n'est pas obligatoire

  • Non valide
    <XXX> ___ </XXX>
    L'élément BBB est absent

  • Non valide
    <XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>
    Un élément AAA au maximum peut figurer dans le document

  • Non valide
    <XXX> <BBB/> <AAA/> </XXX>
    L'élément BBB doit suivre l'élément AAA


6. Exemple 6

    Cet exemple utilise une combinaison de [ + * ?]

  • <!ELEMENT XXX (AAA? , BBB+)> <!ELEMENT AAA (CCC? , DDD*)> <!ELEMENT BBB (CCC , DDD)> <!ELEMENT CCC (#PCDATA)> <!ELEMENT DDD (#PCDATA)>
    L'élément racine XXX peut contenir un élément AAA, suivi d'un ou de plusieurs éléments BBB. L'élément AAA peut contenir un élément CCC et plusieurs éléments DDD. L'élément BBB doit précisément contenir un élément CCC et un élément DDD

  • Valide
    <XXX> <AAA> <CCC/><DDD/> </AAA> <BBB> <CCC/><DDD/> </BBB> </XXX>
    Document valide

  • Valide
    <XXX> <AAA/> <BBB> <CCC/><DDD/> </BBB> </XXX>
    Les éléments fils de l'élément AAA ne sont pas obligatoires

  • Valide
    <XXX> <BBB> <CCC/><DDD/> </BBB> </XXX>
    L'élément AAA peut être omis

  • Non valide
    <XXX> <AAA/> <BBB/> </XXX>
    L'élément BBB doit contenir les éléments CCC et DDD

  • Non valide
    <XXX> <AAA> <CCC/><CCC/> <DDD/><DDD/> </AAA> <BBB> <CCC/><DDD/> </BBB> </XXX>
    L'élément AAA peut contenir un élément CCC au maximum


7. Exemple 7

    Le caractère [ | ] vous permet de sélectionner un élément parmi plusieurs éléments.

  • <!ELEMENT XXX (AAA , BBB)> <!ELEMENT AAA (CCC , DDD)> <!ELEMENT BBB (CCC | DDD)> <!ELEMENT CCC (#PCDATA)> <!ELEMENT DDD (#PCDATA)>
    L'élément racine XXX doit contenir un élément AAA, suivi d'un élément BBB. L'élément AAA doit contenir un élément CCC, suivi d'un élément DDD. L'élément BBB doit contenir soit un élément CCC, soit un élément DDD

  • Valide
    <XXX> <AAA> <CCC/> <DDD/> </AAA> <BBB> <CCC/> </BBB> </XXX>
    Document valide

  • Valide
    <XXX> <AAA> <CCC/> <DDD/> </AAA> <BBB> <DDD/> </BBB> </XXX>
    Autre document valide

  • Non valide
    <XXX> <AAA> <CCC/> <DDD/> </AAA> <BBB> <CCC/> <DDD/> </BBB> </XXX>
    L'élément BBB peut contenir soit un élément CCC, soit un élément DDD, mais pas les deux à la fois

  • Non valide
    <XXX> <AAA> <CCC/> <DDD/> </AAA> <BBB> <DDD/> <CCC/> </BBB> </XXX>
    L'élément BBB peut contenir soit un élément CCC, soit un élément DDD, mais pas les deux à la fois


8. Exemple 8

    Du texte peut être inséré avec les éléments.

  • <!ELEMENT XXX (AAA+ , BBB+)> <!ELEMENT AAA (BBB | CCC )> <!ELEMENT BBB (#PCDATA | CCC )*> <!ELEMENT CCC (#PCDATA)>
    L'élément AAA peut contenir soit un élément BBB, soit un élément CCC. En revanche, l'élément BBB peut contenir n'importe quelle combinaison de texte et d'éléments CCC.

  • Valide
    <XXX> <AAA> <CCC>Précisément un élément.</CCC> </AAA> <AAA> <BBB> <CCC/> <CCC/> <CCC/> </BBB> </AAA> <BBB/> <BBB> Voici <CCC/> une combinaison <CCC/> d'<CCC>éléments CCC </CCC> et de texte <CCC/>. </BBB> <BBB> Uniquement du texte. </BBB> </XXX>
    Document valide exploitant plusieurs possibilités

  • Non valide
    <XXX> <AAA> Elément : <CCC/> </AAA> <BBB> Elément : <CCC/> </BBB> </XXX>
    L'élément AAA ne peut pas contenir de texte


9. Exemple 9

    Les attributs servent à associer des paires Nom-valeur aux éléments. Les spécifications d'attributs ne peuvent figurer que dans les balises de début et les balises d'éléments vides. La déclaration commence par ATTLIST, suivent après le nom de l'élément auquel les attributs sont rattachés et, enfin, la définition des attributs individuels.

  • <!ELEMENT attributes (#PCDATA)> <!ATTLIST attributes aaa CDATA #REQUIRED bbb CDATA #IMPLIED>
    Un attribut de type CDATA peut contenir n'importe quel caractère, s'il respecte les contraintes de forme. L'attribut obligatoire doit toujours être présent, tandis que l'attribut implicite est facultatif.

  • Valide
    <attributes aaa="#d1" bbb="*~*"> Texte </attributes>
    L'attribut de type CDATA peut contenir n'importe quel caractère respectant les contraintes de forme

  • Valide
    <attributes bbb="$25" aaa="13%"> Texte </attributes>
    L'ordre des attributs n'a pas d'importance

  • Valide
    <attributes aaa="#d1" />
    L'attribut bbb peut être omis, car il est implicite

  • Non valide
    <attributes ___ bbb="X24"/>
    L'attribut aaa étant obligatoire, il doit donc être toujours présent


10. Exemple 10

    Un attribut de type CDATA peut contenir n'importe quel caractère, s'il respecte les contraintes de forme. Les attributs de type NMTOKEN ne peuvent contenir que des lettres, des chiffres, un point [ . ] , un tiret [ - ], un trait de soulignement [ _ ] et un deux-points [ : ]. Les attributs de type NMTOKENS peuvent contenir les mêmes caractères que les attributs de type NMTOKEN, plus des espaces blancs. Par espace blanc, on entend un ou plusieurs espaces, retours chariot, sauts de ligne ou tabulations.

  • <!ELEMENT attributes (#PCDATA)> <!ATTLIST attributes aaa CDATA #IMPLIED bbb NMTOKEN #REQUIRED ccc NMTOKENS #REQUIRED>
    Les attributs bbb et ccc doivent toujours être présents, tandis que l'attribut aaa est facultatif

  • Valide
    <attributes aaa="#d1" bbb="a1:12" ccc=" 3.4 div -4"/>
    Tous les attributs obligatoires sont présents et le type de leur valeur est correct

  • Valide
    <attributes bbb="a1:12" ccc="3.4 div -4"/>
    Tous les attributs obligatoires sont présents et le type de leur valeur est correct

  • Non valide
    <attributes aaa="#d1" bbb="#d1" ccc="#d1"/>
    Le caractère # est interdit dans les attributs de type NMTOKEN et NMTOKENS

  • Non valide
    <attributes bbb="A B C" ccc="A B C"/>
    L'espace est interdit dans les attributs de type NMTOKEN


11. Exemple 11

    La valeur d'un attribut de type ID ne peut être constituée que de caractères autorisés pour le type NMTOKEN et doit commencer par une lettre. Un type d'élément ne peut pas avoir plusieurs attributs de type ID. La valeur d'un attribut de type ID doit être unique par rapport à l'ensemble des valeurs de tous les attributs de type ID.

  • <!ELEMENT XXX (AAA+ , BBB+ , CCC+)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)> <!ELEMENT CCC (#PCDATA)> <!ATTLIST AAA id ID #REQUIRED> <!ATTLIST BBB code ID #IMPLIED list NMTOKEN #IMPLIED> <!ATTLIST CCC X ID #REQUIRED Y NMTOKEN #IMPLIED>
    Les attributs id, code et X identifient de manière unique leur élément

  • Valide
    <XXX> <AAA id="a1"/> <AAA id="a2"/> <AAA id="a3"/> <BBB code="QWQ-123-14-6" list="14:5"/> <CCC X="zero" Y="16" /> </XXX>
    Toutes les valeurs ID sont uniques

  • Valide
    <XXX> <AAA id="L12"/> <BBB code="QW" list="L12"/> <CCC X="x-0" Y="QW" /> <CCC X="x-1" Y="QW" /> </XXX>
    Les attributs list et Y sont de type NMTOKEN, et pas de type ID. Ils peuvent donc avoir la même valeur que les attributs ID ou la même valeur dans plusieurs éléments

  • Non valide
    <XXX> <AAA id="L12"/> <BBB code="#QW" list="L12"/> <CCC X="12" Y="QW" /> </XXX>
    L'attribut ID ne doit pas commencer par un nombre ou contenir un caractère interdit pour le type NMTOKEN

  • Non valide
    <XXX> <AAA id="L12"/> <BBB code="QW" list="L12"/> <CCC X="ZA" Y="QW" /> <CCC X="ZA" Y="QW" /> </XXX>
    L'attribut ID doit comporter une valeur unique

  • Non valide
    <XXX> <AAA id="L12"/> <BBB code="QW" list="L12"/> <CCC X="L12" Y="QW" /> </XXX>
    L'attribut ID doit comporter une valeur unique. Les attributs id et X sont tous les deux de type ID


12. Exemple 12

    La valeur de l'attribut IDREF doit correspondre à celle de l'un des attributs ID présents dans le document. La valeur de l'attribut IDREFS peut contenir plusieurs références à des éléments comportant un attribut ID en les séparant par des espaces blancs.

  • <!ELEMENT XXX (AAA+ , BBB+, CCC+, DDD+)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)> <!ELEMENT CCC (#PCDATA)> <!ELEMENT DDD (#PCDATA)> <!ATTLIST AAA mark ID #REQUIRED> <!ATTLIST BBB id ID #REQUIRED> <!ATTLIST CCC ref IDREF #REQUIRED> <!ATTLIST DDD ref IDREFS #REQUIRED>
    Les attributs id et mark identifient de manière unique leur élément. Les attributs ref font référence à ces éléments

  • Valide
    <XXX> <AAA mark="a1"/> <AAA mark="a2"/> <AAA mark="a3"/> <BBB id="b001" /> <CCC ref="a3" /> <DDD ref="a1 b001 a2" /> </XXX>
    Toutes les valeurs des attributs ID sont uniques et tous les attributs IDREF et IDREFS pointent vers des éléments comportant des attributs ID appropriés

  • Non valide
    <XXX> <AAA mark="a1"/> <AAA mark="a2"/> <BBB id="b01" /> <CCC ref="a3" /> <DDD ref="a1 b001 a2" /> </XXX>
    Il n'y a aucun attribut ID ayant a3 ou b001 comme valeur

  • Non valide
    <XXX> <AAA mark="a1"/> <AAA mark="a2"/> <AAA mark="a3"/> <BBB id="b001" /> <CCC ref="a1 b001 a2" /> <DDD ref="a1 b001 a2" /> </XXX>
    L'attribut ref de l'élément CCC est de type IDREF. Il ne peut contenir qu'une seule référence


13. Exemple 13

    Les valeurs d'attributs autorisées peuvent être définies dans la DTD.

  • <!ELEMENT XXX (AAA+, BBB+)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)> <!ATTLIST AAA vrai ( oui | non ) #REQUIRED> <!ATTLIST BBB mois (1|2|3|4|5|6|7|8|9|10|11|12) #IMPLIED>
    Cette DTD définit précisément les valeurs autorisées

  • Valide
    <XXX> <AAA vrai="oui"/> <AAA vrai="non"/> <AAA vrai="oui"/> <BBB mois="8" /> <BBB mois="2" /> <BBB mois="12" /> </XXX>
    Toutes les valeurs sont définies dans la DTD

  • Non valide
    <XXX> <AAA vrai="oui"/> <AAA vrai="non"/> <AAA vrai="peut-être"/> <BBB mois="8" /> <BBB mois="2" /> <BBB mois="16" /> </XXX>
    L'attribut vrai ne peut pas avoir "peut-être" comme valeur, et l'attribut mois ne peut pas avoir "16" comme valeur


14. Exemple 14

    Si un attribut est implicite, une valeur par défaut peut être fournie au cas où l'attribut n'est pas utilisé.

  • <!ELEMENT XXX (AAA+, BBB+)> <!ELEMENT AAA (#PCDATA)> <!ELEMENT BBB (#PCDATA)> <!ATTLIST AAA vrai ( oui | non ) "oui"> <!ATTLIST BBB mois NMTOKEN "1">
    Les deux attributs sont implicites. Leur valeur par défaut est définie

  • Valide
    <XXX> <AAA vrai="oui"/> <AAA vrai="non"/> <AAA/> <BBB mois="8" /> <BBB mois="2" /> <BBB/> </XXX>
    Les différentes valeurs de l'attribut vrai sont oui, non et oui. Les différentes valeurs de l'attribut mois sont 8, 2 et 1


15. Exemple 15

    Un élément peut être défini comme EMPTY. Dans ce cas, il ne peut contenir que des attributs, mais pas de texte.

  • <!ELEMENT XXX (AAA+)> <!ELEMENT AAA EMPTY> <!ATTLIST AAA vrai ( oui | non ) "oui">
    Les éléments AAA ne peuvent contenir que des attributs, mais pas de texte

  • Valide
    <XXX> <AAA vrai="oui"/> <AAA vrai="non"></AAA> </XXX>
    Ces deux formes sont autorisées. Dans le second cas, la balise de fin doit immédiatement suivre la balise de début

  • Non valide
    <XXX> <AAA vrai="oui"/> <AAA vrai="non"></AAA> <AAA> </AAA> <AAA>Salut !</AAA> </XXX>
    L'élément AAA ne doit pas contenir de texte, et la balise de début doit être immédiatement fermée