Tutoriel DTD

Les définitions de types de documents (DTD) sont décrites dans la norme XML 1.0. Ce tutoriel présente les caractéristiques de base des DTD à l'aide de nombreux exemples.
Version HTML/ZIP

Article lu   fois.

Les deux auteur et traducteur

Traducteur :

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

 
Sélectionnez
<!ELEMENT tutorial (#PCDATA)>

Un document ne peut comporter qu'un seul élément racine tutorial qui peut contenir du texte

Valide
Sélectionnez
<tutorial>Ceci est un document XML</tutorial>

Document valide comportant du texte

Valide
Sélectionnez
<tutorial/>

Ce document est également valide

Non valide
Sélectionnez
<text>Ceci est un document XML</text>

L'élément racine n'est pas conforme à la DTD spécifiée

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

 
Sélectionnez
<!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
Sélectionnez
<XXX>
<AAA>Début</AAA>
<BBB>Fin</BBB>
</XXX>

Document valide contenant du texte

Valide
Sélectionnez
<XXX> <AAA/> <BBB/> </XXX>

Ce document est également valide

Non valide
Sélectionnez
<XXX> <AAA/> ___ </XXX>

L'élément BBB est absent

Non valide
Sélectionnez
<XXX> <BBB/> <AAA/> </XXX>

L'élément BBB doit suivre l'élément AAA

Non valide
Sélectionnez
<XXX> <AAA/> <BBB/> <BBB/>  </XXX>

L'élément racine XXX ne peut contenir qu'un élément BBB

Non valide
Sélectionnez
<XXX> Eléments : <AAA/> <BBB/>   </XXX>

L'élément racine XXX ne doit contenir aucun texte

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

 
Sélectionnez
<!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
Sélectionnez
<XXX> <AAA/> <BBB/> </XXX>

Document valide

Valide
Sélectionnez
<XXX> <BBB/> </XXX>

Autre document valide. L'élément AAA n'est pas obligatoire

Valide
Sélectionnez
<XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>

Plusieurs éléments AAA peuvent figurer dans le document

Non valide
Sélectionnez
<XXX> ___ </XXX>

L'élément BBB est absent

Non valide
Sélectionnez
<XXX> <BBB/> <AAA/> </XXX>

L'élément BBB doit suivre l'élément AAA

Non valide
Sélectionnez
<XXX> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> <AAA/> <AAA/> </XXX>

L'élément AAA ne doit pas suivre l'élément BBB

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

 
Sélectionnez
<!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
Sélectionnez
<XXX> <AAA/> <BBB/> </XXX>

Document valide

Valide
Sélectionnez
<XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>

Plusieurs éléments AAA peuvent figurer dans le document

Non valide
Sélectionnez
<XXX> ___ ___ </XXX>

Les éléments AAA et BBB sont absents

Non valide
Sélectionnez
<XXX> ___<BBB/> </XXX>

Au moins un élément AAA doit être présent

Non valide
Sélectionnez
<XXX> <BBB/> <AAA/> </XXX>

L'élément BBB doit suivre l'élément AAA

Non valide
Sélectionnez
<XXX> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> <AAA/> <AAA/> </XXX>

L'élément AAA ne doit pas suivre l'élément BBB

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

 
Sélectionnez
<!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
Sélectionnez
<XXX> <AAA/> <BBB/> </XXX>

Document valide

Valide
Sélectionnez
<XXX>  <BBB/> </XXX>

L'élément AAA n'est pas obligatoire

Non valide
Sélectionnez
<XXX> ___ </XXX>

L'élément BBB est absent

Non valide
Sélectionnez
<XXX> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <AAA/> <BBB/> </XXX>

Un élément AAA au maximum peut figurer dans le document

Non valide
Sélectionnez
<XXX> <BBB/> <AAA/> </XXX>

L'élément BBB doit suivre l'élément AAA

VI. 6. Exemple 6

Cet exemple utilise une combinaison de [ + * ?]

 
Sélectionnez
<!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
Sélectionnez
<XXX>
        <AAA>
                <CCC/><DDD/>
        </AAA>
        <BBB>
                <CCC/><DDD/>
        </BBB>
</XXX>

Document valide

Valide
Sélectionnez
<XXX>
        <AAA/>
        <BBB>
                <CCC/><DDD/>
        </BBB>
</XXX>

Les éléments fils de l'élément AAA ne sont pas obligatoires

Valide
Sélectionnez
<XXX>
        <BBB>
                <CCC/><DDD/>
        </BBB>
</XXX>

L'élément AAA peut être omis

Non valide
Sélectionnez
<XXX>
        <AAA/>
        <BBB/>
</XXX>

L'élément BBB doit contenir les éléments CCC et DDD

Non valide
Sélectionnez
<XXX>
        <AAA>
                <CCC/><CCC/>
                <DDD/><DDD/>
        </AAA>
        <BBB>
                <CCC/><DDD/>
        </BBB>
</XXX>

L'élément AAA peut contenir un élément CCC au maximum

VII. 7. Exemple 7

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

 
Sélectionnez
<!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
Sélectionnez
<XXX>
        <AAA>
                <CCC/> <DDD/>
        </AAA>
        <BBB>
                <CCC/>
        </BBB>
</XXX>

Document valide

Valide
Sélectionnez
<XXX>
        <AAA>
                <CCC/> <DDD/>
        </AAA>
        <BBB>
                <DDD/>
        </BBB>
</XXX>

Autre document valide

Non valide
Sélectionnez
<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
Sélectionnez
<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

VIII. 8. Exemple 8

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<XXX>
        <AAA>
                Elément : <CCC/>
        </AAA>
        <BBB>
                Elément : <CCC/> 
        </BBB>
</XXX>

L'élément AAA ne peut pas contenir de texte

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

 
Sélectionnez
<!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
Sélectionnez
<attributes aaa="#d1" bbb="*~*">
        Texte
</attributes>

L'attribut de type CDATA peut contenir n'importe quel caractère respectant les contraintes de forme

Valide
Sélectionnez
<attributes bbb="$25" aaa="13%">
        Texte
</attributes>

L'ordre des attributs n'a pas d'importance

Valide
Sélectionnez
<attributes aaa="#d1" />

L'attribut bbb peut être omis, car il est implicite

Non valide
Sélectionnez
<attributes ___ bbb="X24"/>

L'attribut aaa étant obligatoire, il doit donc être toujours présent

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<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
Sélectionnez
<attributes aaa="#d1" bbb="#d1" ccc="#d1"/>

Le caractère # est interdit dans les attributs de type NMTOKEN et NMTOKENS

Non valide
Sélectionnez
<attributes bbb="A B C" ccc="A        B       C"/>

L'espace est interdit dans les attributs de type NMTOKEN

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<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
Sélectionnez
<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
Sélectionnez
<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
Sélectionnez
<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

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<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
Sélectionnez
<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

XIII. 13. Exemple 13

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<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

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

 
Sélectionnez
<!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
Sélectionnez
<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

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

 
Sélectionnez
<!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
Sélectionnez
<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
Sélectionnez
<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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2012 Miloslav Nic. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.