0% ont trouvé ce document utile (0 vote)
29 vues28 pages

Validation XML avec DTD: Guide Complet

Transféré par

Modou Diagne
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
29 vues28 pages

Validation XML avec DTD: Guide Complet

Transféré par

Modou Diagne
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XML

M. KASSE
Université Alioune DIOP de BAMBEY

[Link]@[Link]

MASTER 2 SIR
2014 2015
Chapitre 3

La validation des documents


XML: DTD

M. KASSE UADB 56
Structure physique : DTD
Une DTD (Document Type Definition) est une
sorte d’entité contenant une description formelle
de la structure et du vocabulaire (noms de type
d’éléments et noms d’attributs) d’un document.

La spécification XML définit complètement


l’écriture des DTD,

Mais une DTD n’est pas elle-même un document


XML

M. KASSE UADB 57
Structure physique : DTD
Un processeur validateur lit la DTD avant de
lire le document.
Une DTD
• Permet de définir le "vocabulaire" et la structure qui
seront utilisés dans le document XML
• Grammaire du langage dont les phrases sont des
documents XML (instances)
• Peut être mise dans un fichier et être appelée dans le
document XML

M. KASSE UADB 58
Structure physique : DTD
La DTD utilise la déclaration DOCTYPE qui référencie
des déclarations soit internes ou externes
DTD interne :
• Les déclarations de la DTD sont placés dans le DOCTYPE
après la déclaration XML
• L'attribut standalone a la valeur "yes" <?xml version="1.0"
standalone="yes">
• <!DOCTYPE document [déclarations]> <document > ...
</document >
• document : nom de la balise racine du document déclaré,
• déclarations : déclarations d'éléments, d'attributs et
d'entités…

M. KASSE UADB 59
Structure physique : DTD
DTD externe : permet d’inclure des documents
XML identifiés par une URI
<!DOCTYPE document SYSTEM "uri">
Les déclarations sont placés dans un fichier séparé
L'attribut standalone a la valeur "no"
<!DOCTYPE document SYSTEM
"[Link]

M. KASSE UADB 60
Structure physique : DTD

<!DOCTYPE document (PUBLIC


"identifiant_public" "url"?)>
PUBLIC est utilisé lorsque la DTD est
une norme ou qu'elle est enregistrée
sous forme de norme ISO par l'auteur

M. KASSE UADB 61
Structure physique : DTD
DTD externe
• Les déclarations sont placés dans un fichier séparé portant
l’extension .dtd
<!DOCTYPE document (SYSTEM "uri")>
• L'attribut standalone a la valeur "no"
<?xml version="1.0" standalone="no" >
<!DOCTYPE document SYSTEM
"[Link]
<document > ... </document >
• un chemin relatif :
<?xml version="1.0" standalone="no" >
<!DOCTYPE document SYSTEM "[Link]">
<document > ... </document >

M. KASSE UADB 62
Contrainte sur la DTD EXTERNE

Il peut contenir un prologue


Pas de référence à une DTD
Il doit être bien formé

M. KASSE UADB 63
Structure physique : DTD
Déclaration de listes d'attributs
• <!ATTLIST Nom_élément Nom_attribut type_attribut
défaut>
• <!ATTLIST document nd (1|2|3) "1">
Type d'attributs :
• CDATA : chaîne de caractères prise telle quelle
• ID ou IDREF : renvoi dans le document
• ENTITY ou ENTITIES : entité externe non XML
• NMTOKEN (s): noms symboliques formés de
caractères alphanumériques sans espace (plusieurs
NMTOKEN
M. KASSE UADB 64
Structure physique : DTD
Déclaration d'un élément :
<!ELEMENT balise valeur>
Décrit une balise balise qui fera partie du vocabulaire
Ordre spécifié :
<!ELEMENT balise (val1, val2, val3)>
Ordre libre :
<!ELEMENT balise (val1 | val2 | val3)+>
Liste de choix:
<!ELEMENT balise (val1 | val2 | val3)>
Contenu textuel déclaré comme PCDATA (parseable
character data)
M. KASSE UADB 65
Structure physique : DTD
Opérateurs d’occurrence
Notations Exemples
(a, b) séquence (nom, prenom, rue, ville)
(a | b) liste de choix (oui | non)
a? élément optionnel [0,1] (nom, prenom?, rue, ville)
a* élément répétitif [0,N] (produit*, client)
a+ élément répétitif [1,N] (produit*, vendeur+)

M. KASSE UADB 66
Structure physique : DTD
Valeur par défaut des attributs:
• #REQUIRED : attribut obligatoirement présent et
valeur spécifié par le créateur de l'instance
• #IMPLIED : présence de l'attribut facultative
• #FIXED "Valeur" : l'attribut prend toujours cette
valeur

M. KASSE UADB 67
Structure physique : DTD
Données dans un élément : simple
• <!ELEMENT Donnees (#PCDATA)>
• les données sont constituées par un flot de
caractères
Modèle mixte : complexe
• <!ELEMENT mixte (#PCDATA | val1 | val2)*>
• dans cet exemple l'élément mixte est composé de
données et d'éléments

M. KASSE UADB 68
Quelques exemples
Contenu libre :
• <!ELEMENT libre ANY>
Élément vide :
• <!ELEMENT vide EMPTY>
Attributs pour un élément :
• <!ATTLIST balise [attribut type #mode [valeur]]>
Définition de la liste des attributs pour une balise
• <!ATTLIST enseignant nom CDATA #REQUIRED
prenom CDATA #IMPLIED>
• <!ATTLIST adresse ville CDATA #FIXED "Dakar">

M. KASSE UADB 69
Quelques exemples
Liens hypertextuels internes : ID ou IDREF
Dans la DTD
• <!ELEMENT SECTION (#PCDATA|xref)*>
• <!ATTLIST SECTION TARGET ID #IMPLIED>
• <!ELEMENT xref EMPTY>
• <!ATTLIST xref ref IDREF #REQUIRED>
Dans l'instance
• <SECTION TARGET="cible"> contenu </SECTION>
• <SECTION> référence à la section
• <xref ref="cible"/>
• </SECTION>
M. KASSE UADB 70
Structure physique : Une DTD
pour un Address Book
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT addressBook (person)+>
<!ELEMENT person (name, email*, link)>
<!ATTLIST person id ID #REQUIRED
gender (male|female) #IMPLIED>
<!ELEMENT name (#PCDATA|family|given)*>
<!ELEMENT family (#PCDATA)>
<!ELEMENT given (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT link EMPTY>
<!ATTLIST link manager IDREF #IMPLIED subordinates IDREFS
#IMPLIED>
M. KASSE UADB 71
Exemple d'un XML valide par rapport aux
règles dans la DTD précédente
<!DOCTYPE addressBook SYSTEM "[Link]">
<addressBook>
<person id="[Link]" gender="male">
<name>
<family>Wallace</family> <given>Bob</given>
</name>
<email>bwallace@[Link]</email>
<link manager="[Link]"/>
</person>
<person id="[Link]" gender="female">
<name>
<family>Tuttle</family> <given>Claire</given>
</name>
<email>ctuttle@[Link]</email>
<link subordinates="[Link]"/>
</person>
</addressBook> M. KASSE UADB 72
Exemple DTD

Supposons, La description des livres d’une


librairie
• Stocker des informations sur titre, auteur, éditeur, prix
• C’est possible d’avoir plusieurs auteurs pour un livre
• Le prix est optionnel
• Les prix seront classés par catégorie
• cat1 pour les livres dont le prix est inférieur à 020€
• cat2 pour les livres dont le prix est entre 20€ et 40€
• cat3 pour les livres dont le prix est supérieur à 40€
Définir en <cat1></cat1>, <cat2></cat2>, <cat3></cat3>

M. KASSE UADB 73
Exemple DTD
Nœuds racine est librairie
<!DOCTYPE librairie [
… instructions …
]>

M. KASSE UADB 74
Exemple DTD
Dans notre librairie, on peut avoir 0 ou
plusieurs livres
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
]>

M. KASSE UADB 75
Exemple DTD
L’information d’un livre (titre, auteur,
éditeur, prix)
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur, éditeur,
prix)>
]>

M. KASSE UADB 76
Exemple DTD
Un livre peut avoir un ou plusieurs
auteurs
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur,
prix)>
]>

M. KASSE UADB 77
Exemple DTD
Le prix d’un livre est optionnel
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur,
prix?)>
]>

M. KASSE UADB 78
Exemple DTD
Titre, auteur et éditeur sont stockés comme
chaîne de caractère.
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur, prix?)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT éditeur (#PCDATA)>
]>
M. KASSE UADB 79
Exemple DTD
Prix sont stockés soit cat1, cat2 ou cat3
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur, prix?)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT éditeur (#PCDATA)>
<!ELEMENT prix (cat1 |cat2 | cat3)>
]>
M. KASSE UADB 80
Exemple DTD
Cat1, cat2, cat3 sont des éléments qui
sont valeurs
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur, prix?)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT éditeur (#PCDATA)>
<!ELEMENT prix (cat1 |cat2 | cat3)>
<!ELEMENT cat1 EMPTY)>
<!ELEMENT cat2 EMPTY) >
<!ELEMENT cat3 EMPTY)>
]>
M. KASSE UADB 81
DTD avec attribut
Le prix d’un livre est optionnel et c’est
l’attribut de l’élément livre qui a des valeurs,
soit cat1, cat2 ou cat 3
<!DOCTYPE librairie [
<!ELEMENT librairie (livre*)>
<!ELEMENT livre(titre, auteur+, éditeur)>
<!ATTLIST livre prix(cat1|cat2|cat3) #IMPLIED>
]>
M. KASSE UADB 82

Vous aimerez peut-être aussi