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