SOA et web service
cours XML
Dr.R.Hanafi
2022-2023
[email protected]
Chapitre 2 : le DTD
ISLAIB.HANAFI.2022 2
ISLAIB.HANAFI.2022 3
ISLAIB.HANAFI.2022 4
ISLAIB.HANAFI.2022 5
Qu'est-ce qu'une DTD?
Une DTD (Document Type Definition) permet
de définir une structure type de document
XML.
Il
s'agit d'une grammaire qui décrit la façon
de construire les documents XML qu'elle
valide
ISLAIB.HANAFI.2022 6
ISLAIB.HANAFI.2022 7
Contenu d'une DTD
Une DTD peut contenir :
Des déclarations d'entités générales
Des déclarations d'entités paramètres
Des déclarations d'éléments
Des déclarations de listes d'attributs
Des commentaires
ISLAIB.HANAFI.2022 8
Il existe deux types d'entité ; les entités
internes et les entités externes.
Les entités internes permettent de définir des
abréviations :
<!ENTITY nom-entité ''valeur de
remplacement''>
On utilise un entité de la façon suivante :
&nom-entité;
ISLAIB.HANAFI.2022 9
Entités générales
<!ENTITY cp ''�A9; Editions Acte Sud ''>
&cp; sera représenté à l'écran par : © Editions Acte Sud
On peut utiliser des entités internes pour définir d'autres
entités internes.
Les entités générales
Elles permettent aussi de faire référence à des
fichiers qui se trouve à une certaine URL :
<!ENTITY nom-entité SYSTEM ''URL''>
<!ENTITY chapitre-1 SYSTEM ''./chap1.xml''>
Cette référence permet à chaque fois que l'on
tape &chapitre-1; dans le document XML d'y
insérer le contenu du fichier chap1.xml.
Les entités générales
On peut utiliser des entités générales aussi
directement dans un document XML de la
façon suivante :
<!DOCTYPE racine SYSTEM "dtd.dtd" [<!ENTITY
nom "valeur">]>
Les entités paramètres
Ellesfoncionnent comme les entités
générales, mais ne sont utilisables que dans
la DTD où elles sont déclarées.
<!ENTITY % nom-entité "valeur">
Pour les utiliser, il faut écrire :%nom-entité;
Les éléments
Les déclarations d'élément permettent de
définir les balises ainsi que la façon dont elles
doivent s'organiser dans l'arbre XML.
Elle est de la forme suivante :
<!ELEMENT nom modèle>
Le nom correspond au nom de la balise.
Le modèle décrit le contenu que doit avoir la
balise ainsi définie.
Modèle d'un élément
Lemodèle de contenu peut autoriser la
dréation d'éléments qui contiendront :
Un ou des éléments fils spécifiés;
Des données représentées par un flot de
caractèes;
Un mélange de données et d'éléments fils
spécifiés;
Un mélange arbitraire de donnée et d'éléments;
Modèle d'un élément.
Unmodèle peut-être une séquence de fils
ordonnés :
(fils_1, fils_2, ..., fils_n)
Ainsi : <!ELEMENT chapitre (titre, intro, section)>
spécifie que toute balise chapitre devra être
employée comme il suit :
<chapitre><titre>...</titre><intro>...</
intro><section>...</section></chapitre>
Modèle d'un élément
Ilpeut aussi s'agir d'une séquence non
ordonnée :
(fils_1 | fils_2 | ... | fils_n)
Ainsi <!ELEMENT date (annee | mois)> spécifie
que toute balise date doit être utiliser de l'un des
deux façons suivantes :
<date><mois>...</mois><annee>...</annee></
date>
<date><annee>...</annee><mois>...</mois></
date>
Modèle d'un élément
Onpeut utiliser des quantificateur pour
autoriser des répétitions :
P? signifie que l'on peut utiliser l'élément P zéro
ou une fois.
P* signifie que l'on peut utiliser l'élément P zéro,
une ou plusieurs fois.
P+ signifie que l'on peut utiliser l'élément P une
ou plusieurs fois.
Ainsi <!ELEMENT chapitre (titre, intro,
section+)> signifie qu'un chapitre peut contenir
Modèle d'un élément
On peut imbriquer les déclarations :
<!ELEMENT chapitre (titre, intro, (titre-section,
devel)+)> signifie que la balise chapitre doit être
utiliser comme suit :
<chapitre>
<titre>...</titre><intro>...</intro>
<titre-section>...</titre-section><devel>...</
devel>
<titre-section>...</titre-section><devel>...</
devel>
Modèle d'un élément
Pourspécifier qu'un élément doit
obligatoirement être vide, il suffit d'écrire :
<!ELEMENT nom EMPTY>
Pourspécifier qu'un élément peut contenir
n'importe quel type d'arbre, il suffit d'écrire :
<!ELEMENT nom ANY>
Listes d'attributs
Pour chaque élément on peut spécifier une
liste d'attributs bien précise. Celle-ci a la forme
suivante :
<!ATTLIST nom-élément
nom-attribut_1 type-attribut_1 valeur-par-défaut_1
...
nom-attribut_n type-attribut_n valeur-par-
défaut_n >
Les types des attributs
CDATA signife que la valeur de l'attribut sera une chaîne
de caractère
ID la valeur de l'attribut doit être unique pour cette
instance de l'élément.
IDREF référence à l'élément avec un attribut ID ayant
même valeur que IDREF
IDREFS Liste de plusieurs IDREF séparés par des
espaces.
NMTOKEN ou NMTOKENS permettra à l'attribut de
prendre comme valeur le nom d'un token, ou de
plusieurs, c'est-à-dire un ou des noms.
Les types des attributs
NMTOKEN jeton de nom (i.e. chaîne de texte
conforme aux règles de nom de XML)
NMTOKENS liste de NMTOKEN séparés par
des espaces
ENTITY nom d'une entité prédéfinie
ENTITIES listes d'entités prédéfinies séparées
par des espaces
Les types des attributs
Le type d'un attribut peut aussi être une liste
de valeurs, si tel est le cas, on ne peut donner
pour valeur à l'attribut que l'un des éléments
de cette liste. Une telle liste s'écrit comme il
suit :
(valeur_1 | valeur_2 | ... | valeur_n)
Les valeurs par défaut
#REQUIRED signifie que l'attribut doit
obligatoirement être déclaré
#IMPLIED signifie que l'attribut est facultatif et
n'a pas de valeur par défaut particulière
#FIXED "val" l'attribut est facultatif, mais si il
est présent il ne peut prendre que "val" pour
valeur.
"val"l'attribut est facultatif, et si il n'est pas
présent on considère que sa valeur est "val"
Exemple de DTD
ISLAIB.HANAFI.2022 26
Liaison entre un fichier XML et
une DTD (2/2)
ISLAIB.HANAFI.2022 27
Principe de syntaxe d’une DTD
ISLAIB.HANAFI.2022 28
Exemple de DTD
ISLAIB.HANAFI.2022 29
Exemple (Attributs d’une DTD)
ISLAIB.HANAFI.2022 30
Exemple (Entités d’une DTD)
ISLAIB.HANAFI.2022 31
ISLAIB.HANAFI.2022 32
ISLAIB.HANAFI.2022 33