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.
<!ELEMENT tutorial
(
#PCDATA
)
>
Un document ne peut comporter qu'un seul élément racine tutorial qui peut contenir du texte
<tutorial>
Ceci est un document XML</tutorial>
Document valide comportant du texte
<tutorial/>
Ce document est également valide
<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éments 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.
<XXX>
<AAA>
Début</AAA>
<BBB>
Fin</BBB>
</XXX>
Document valide contenant du texte
<XXX>
<AAA/>
<BBB/>
</XXX>
Ce document est également valide
<XXX>
<AAA/>
___ </XXX>
L'élément BBB est absent
<XXX>
<BBB/>
<AAA/>
</XXX>
L'élément BBB doit suivre l'élément AAA
<XXX>
<AAA/>
<BBB/>
<BBB/>
</XXX>
L'élément racine XXX ne peut contenir qu'un élément BBB
<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.
<!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
<XXX>
<AAA/>
<BBB/>
</XXX>
Document valide
<XXX>
<BBB/>
</XXX>
Autre document valide. L'élément AAA n'est pas obligatoire
<XXX>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<BBB/>
</XXX>
Plusieurs éléments AAA peuvent figurer dans le document
<XXX>
___ </XXX>
L'élément BBB est absent
<XXX>
<BBB/>
<AAA/>
</XXX>
L'élément BBB doit suivre l'élément AAA
<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.
<!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
<XXX>
<AAA/>
<BBB/>
</XXX>
Document valide
<XXX>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<BBB/>
</XXX>
Plusieurs éléments AAA peuvent figurer dans le document
<XXX>
___ ___ </XXX>
Les éléments AAA et BBB sont absents
<XXX>
___<BBB/>
</XXX>
Au moins un élément AAA doit être présent
<XXX>
<BBB/>
<AAA/>
</XXX>
L'élément BBB doit suivre l'élément AAA
<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.
<!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.
<XXX>
<AAA/>
<BBB/>
</XXX>
Document valide
<XXX>
<BBB/>
</XXX>
L'élément AAA n'est pas obligatoire
<XXX>
___ </XXX>
L'élément BBB est absent
<XXX>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<AAA/>
<BBB/>
</XXX>
Un élément AAA au maximum peut figurer dans le document
<XXX>
<BBB/>
<AAA/>
</XXX>
L'élément BBB doit suivre l'élément AAA
VI. 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
<XXX>
<AAA>
<CCC/><DDD/>
</AAA>
<BBB>
<CCC/><DDD/>
</BBB>
</XXX>
Document valide
<XXX>
<AAA/>
<BBB>
<CCC/><DDD/>
</BBB>
</XXX>
Les éléments fils de l'élément AAA ne sont pas obligatoires
<XXX>
<BBB>
<CCC/><DDD/>
</BBB>
</XXX>
L'élément AAA peut être omis
<XXX>
<AAA/>
<BBB/>
</XXX>
L'élément BBB doit contenir les éléments CCC et DDD
<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.
<!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
<XXX>
<AAA>
<CCC/>
<DDD/>
</AAA>
<BBB>
<CCC/>
</BBB>
</XXX>
Document valide
<XXX>
<AAA>
<CCC/>
<DDD/>
</AAA>
<BBB>
<DDD/>
</BBB>
</XXX>
Autre document 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
<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.
<!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.
<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
<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, suit 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.
<attributes
aaa
=
"#d1"
bbb
=
"*~*"
>
Texte
</attributes>
L'attribut de type CDATA peut contenir n'importe quel caractère respectant les contraintes de forme
<attributes
bbb
=
"$25"
aaa
=
"13%"
>
Texte
</attributes>
L'ordre des attributs n'a pas d'importance
<attributes
aaa
=
"#d1"
/>
L'attribut bbb peut être omis, car il est implicite
<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.
<!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
<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
<attributes
bbb
=
"a1:12"
ccc
=
"3.4
div
-4"
/>
Tous les attributs obligatoires sont présents et le type de leur valeur est correct
<attributes
aaa
=
"#d1"
bbb
=
"#d1"
ccc
=
"#d1"
/>
Le caractère # est interdit dans les attributs de type NMTOKEN et NMTOKENS
<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.
<!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
<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
<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
<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
<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
<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.
<!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
<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
<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
<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.
<!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
<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
<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é.
<!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
<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.
<!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
<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
<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