Vous êtes sur la page 1sur 46

Assuré par : Mejdi BLAGHGI

Version 1.0 – Oct 2019


Qu’est ce que XML ?

• XML signifie EXtensible Markup Language.


• XML est un langage de balisage comme HTML
• XML a été conçu pour transporter des données
et stocker des données
• Les balises XML ne sont pas prédéfinies. Vous
devez définir vos propres étiquettes.
• XML est conçu pour être auto-descriptives
• XML est une recommandation W3C
XML Mejdi BLAGHGI 2
XML vs HTML : Points communs

• Ils sont tous deux issus du SGML avec lequel ils


partagent des caractéristiques communes.

• Ils fonctionnent avec des balises.

• Ils sont indépendants de la plateforme.

• Ils sont en mode texte.


XML Mejdi BLAGHGI 3
XML vs HTML : Différences

• XML n'est pas le successeur du HTML.

• XML n'est pas le futur du HTML.

• XML n'est pas le remplaçant du HTML.

• XML et HTML sont deux langages distincts

XML Mejdi BLAGHGI 4


XML vs HTML : Différences

XML HTML
XML décrit, structure, stocke, Html affiche des données par
transporte et échange des données l'intermédiaire d'un navigateur.
XML est un générateur de langages Html est un langage statique
[métalanguage]. (normalisé) de publication sur le
Web.
Pour le XML, le W3C est reparti HTML avec la version 4.0 est arrivé à
d'une feuille blanche et a mis en bout de course et est devenu un
place un nouveau langage très langage hybride et en final peu
structuré. structuré.
XML est un langage strict dont HTML, à cause des navigateurs
l'écriture doit être rigoureuse. récents, est devenu très permissif.

XML Mejdi BLAGHGI 5


Applications de XML

• XML est un format d’enregistrement de nombreuses applications


– Exemples : LibreOffice (format OpenDocument), Dessin vectoriel avec
Inkscape (format SVG , Construction/compilation de projets (Ant,
Maven), Itinéraires GPS (format GPX), . . .
• Bases de données XML
– Il permet de créer des bases de données XML qui peuvent représenter
des données complexes.
– Exemples : RDF (interrogé via un langage de requêtes appelé SparQL),
XML native (les données sont au format XML et les requêtes sont dans
un langage (XQuery) permettant de réaliser l’équivalent de SQL).
• XML est un format d’échange de données entre serveurs et clients
– Les flux RSS permettent de résumer les changements survenus sur un
site Web
– Les protocoles XML-RPC et SOAP permettent d’exécuter des procédures
à distance (Remote Procedure Call)
– AJAX permet de mettre à jour dynamiquement les pages web sur le
navigateur
XML Mejdi BLAGHGI 6
Concurrents de XML

• En tant que solution d’échange de données


entre plusieurs systèmes parfois hétérogènes
voici quelques concurrents à XML
– JSON
– COM/DCOM
– Corba
– Java RMI

XML Mejdi BLAGHGI 7


Parseurs XML

• Un parseur est un outil permettant de parcourir un


document et d’en extraire des informations.
• Dans XML il existe 2 approches
– DOM (Document Object Model) : API utilisant une approche
hiérarchique pour construire une structurée contenant des
objets représentant les éléments du document et dont les
méthodes permettent d’accéder aux propriétés
(GetRootElement(), GetChildren(), GetElement(), ...)
– SAX (Simple API for XML) : API basée sur le modèle
évenementiel permettant de réagir à des évenements
comme kle début d’un élément ou la fin d’un élément
(startDocument(), startElement(), characters(),
EndElement(), ...)

XML Mejdi BLAGHGI 8


Parseurs XML Comparatif

XML Mejdi BLAGHGI 9


Cas pratique d’utilisation de XML

XML Mejdi BLAGHGI 10


Syntaxe du XML

• Les noms peuvent contenir des lettres, des chiffres ou d'autres


caractères.
• Les noms ne peuvent débuter par un nombre ou un signe de
ponctuation.
• Les noms ne peuvent commencer par les lettres xml (ou XML ou
Xml...).
• Les noms ne peuvent contenir des espaces.
• La longueur des noms est libre mais on conseille de rester
raisonnable.
• On évitera certains signes qui pourraient selon les logiciels, prêter à
confusion comme "-", ";", ".", "<", ">", etc.
• Les caractères spéciaux pour nous francophones comme é, à, ê, ï, ù
sont à priori permis mais pourraient être mal interprétés par certains
programmes.

XML Mejdi BLAGHGI 11


Syntaxe du XML

• Un document XML représente un arbre composé de plusieurs types


de nœuds :
– Nœuds éléments : ils sont associés aux balises <element>. Ce sont des
nœuds qui peuvent avoir des enfants en dessous.
– Nœuds texte : ils représentent le texte situé entre deux balises. Les
nœuds texte sont considérés comme des feuilles.
• Les balises sont sensibles au majuscules et minuscules.
• Toute balise ouverte doit impérativement être fermée
• Les balises doivent être correctement imbriquées.
• Tout document XML doit comporter une racine.
• Les valeurs des attributs doivent toujours être mises entre des
guillemets .
• Il n’y a pas d’ordre entre les attributs d’un élément.
• Un attribut ne peut être présent qu’une fois.

XML Mejdi BLAGHGI 12


Exemple de document XML

<?xml version="1.0" encoding="UTF-8"?>


<!-- Date de création : 20/10/2021 -->
<!DOCTYPE personne SYSTEM "personne.dtd">
<?xml-stylesheet type="text/css" href=" bibliotheque.css"?>
<bibliotheque>
<responsable>Foulen FOULENI<responsable>
<separateur/>
<livre id ="1" langue="fr">
<titre>XML</titre>
<auteur>Alexandre Brillant</auteur>
<prix monaie="€">64</prix>
</livre>
<livre id ="2" langue="fr">
<titre>XML par la pratique</titre>
<auteur>Thierry Boulanger</auteur>
<prix monaie="€">72</prix>
</livre>
</bibliotheque>

XML Mejdi BLAGHGI 13


Prologue et Déclaration XML

• Exemple de déclaration XML :


– <?xml version="1.1" encoding="ISO-8859-1" standalone="yes" ?>
• Composantes :
– Version : version du XML utilisée dans le document
– Encoding : le jeu de codage de caractères utilisé.
– Standalone : dépendance du document par rapport à une déclaration de type
de document. Si standalone a la valeur yes, le processeur de l'application
n'attend aucune déclaration de type de document extérieure au document.
Sinon, le processeur attend une référence de déclaration de type de document.
La valeur par défaut est yes.
• Remarques :
– Cette déclaration est facultative, mais il est préférable de l'utiliser. Dans ce cas
version, encoding et standalone doivent être placés dans cet ordre.
– Si elle est utilisée, elle doit être placée en toute première ligne du document
XML.
– Par exemple, il ne faut placer ni commentaire, ni même de simple ligne vide
avant elle.

XML Mejdi BLAGHGI 14


Commentaires XML

• On peut placer des commentaires à peu près partout


dans un document XML. La syntaxe est identique à celle
d’un fichier HTML.
• Un commentaire peut s’étendre sur plusieurs lignes.
• La seule contrainte est de ne pas pouvoir employer les
caractères -- dans le commentaire, même s’ils ne sont
pas suivis de >
• Exemple :
– <!-- voici un commentaire sur une seule ligne -->
– <!-- voici un autre commentaire
sur plusieurs lignes
-->

XML Mejdi BLAGHGI 15


Options après le prologue

• Après le prologue, on peut trouver plusieurs


parties optionnelles délimitées par <?...?> ou
<!...>.
• Ce sont des instructions de traitement, des
directives pour l’analyseur XML.
• Par exemple :
– un Document Type Definitions (DTD) qui permet de
valider le contenu du document.
– une feuille de style
XML Mejdi BLAGHGI 16
Déclaration du type de document

• La déclaration <!DOCTYPE est optionnelle.


• Elle sert à attacher une grammaire de type DTD
(Document Type Definition) au document XML.
• Elle est introduite avant la première balise
(racine) du document.
• Le mot-clé SYSTEM est important et indique
qu’il s’agit d’une DTD qui vous est propre.
L’alternative est le mot-clé PUBLIC.

XML Mejdi BLAGHGI 17


Sections CDATA

• Lorsqu’on veut écrire du texte brut à ne pas analyser en tant qu’XML, on


emploie une section CDATA :
• <?xml version="1.0" encoding="UTF-8"?>
<personnes>
<personne>
<prenom>Ali</prenom>
<passe><![CDATA[1236589472dliys698q903sp]]><passe>
</personne>
</personnes>
• La partie entre est ignorée par les analyseurs XML, on peut mettre
n’importe quoi sauf ]]>. Ces données sont considérées comme du texte par
les analyseur.
• Dans le navigateur, il faut utiliser « xmllint --nocdata document.xml » pour
le voir le contenu sans les marqueurs.

XML Mejdi BLAGHGI 18


Nœuds élément

• Les éléments gèrent la structuration des données d’un document


XML.
• On peut les qualifier de métadonnés, au sens où ils ne font pas
partie réellement des données mais servent à en désigner la nature.
• À la place du terme élément, on peut utiliser les termes balise, tag
ou encore nœud.
• Pour décrire ce que contiennent les éléments, on parle de modèle de
contenu. On trouve :
– Rien : il n’y pas de contenu, l’élément est vide.
– Du texte.
– Un ou plusieurs éléments : on peut les qualifier d’éléments fils,
l’élément les contenant étant appelé un élément parent
– Un mélange de textes et d’éléments : c’est une forme plus rare qui peut
révéler une erreur de structuration. Elle reste cependant utile, lorsque
l’on souhaite « décorer » un texte quelconque (cas du paragraphe en
HTML avec des zones en gras, italique…).

XML Mejdi BLAGHGI 19


Associations

• La représentation XML d’une association entre


deux TE est un peu problématique quand les
cardinalités ne sont pas (1,1) d’un côté.
• Les documents XML sont essentiellement
hiérarchiques et représentent les informations
uniquement vues d’une seule chose.
• Il faudrait donc mettre l’extension de la relation.
• Lorsque l’une des cardinalités est (1,1), il est
possible de construire une hiérarchie centrée sur
l’un des TE.
XML Mejdi BLAGHGI 20
Associations Exemple

• Voici par exemple, une relation de location


entre (1,1) véhicule et 0 à n clients :
• <commande id="1256">
<client><nom>Ali Ben Salah</nom></client>
<produit qte="2"><intitule>Stylo</intitule></produit>
<produit qte="1"><intitule>Cahier</intitule></produit>
</commande>

XML Mejdi BLAGHGI 21


Quelques règles de syntaxe

• Le nom d’un élément ne peut commencer par un


chiffre.
• Si le nom d’un élément est composé d’un seul caractère,
il doit être dans la plage [a-zA-Z] (c’est-à-dire une lettre
minuscule ou majuscule sans accent) ou _ ou :.
• Avec au moins 2 caractères, le nom d’un élément peut
contenir _, -, . et : plus les caractères alphanumériques
(attention, le caractère : est réservé à un usage avec les
espaces de nom que nous aborderons par la suite).
• Tous les éléments ouverts doivent être fermés.
• Un élément parent est toujours fermé après la
fermeture des éléments fils.

XML Mejdi BLAGHGI 22


Quelques conventions de nommage

• Employer des minuscules pour les attributs et les


éléments.
• Eviter les accents dans les noms d’attributs et
d’éléments pour des raisons de compatibilité avec les
outils du marché qui proviennent souvent d’un univers
anglo-saxon.
• Préférer les guillemets délimitant les valeurs d’attribut.
• Séparer les noms composés de plusieurs mots par les
caractères -, _, . ou une majuscule.
• Essayer d’être homogène dans votre document en
gardant la même convention.

XML Mejdi BLAGHGI 23


Exercice

• Générer une arbre XML puis un document XML pour le système ci-dessous:
« Une bouteille d'eau Cristaline de 150 cl contient par litre 71 mg d'ions
positifs calcium, et 5,5 mg d'ions positifs magnésium. On y trouve également
des ions négatifs comme des chlorures à 20 mg par litre et des nitrates avec 1
mg par litre. Elle est recueillie à St-Cyr la Source, dans le département du
Loiret. Son code barre est 3274080005003 et son pH est de 7,45. Comme la
bouteille est sale, quelques autres matériaux comme du fer s'y trouvent en
suspension.
Une seconde bouteille d'eau Cristaline a été, elle, recueillie à la source
d'Aurèle dans les Alpes Maritimes. La concentration en ions calcium est de 98
mg/l, et en ions magnésium de 4 mg/l. Il y a 3,6 mg/l d'ions chlorure et 2 mg/l
de nitrates, pour un pH de 7,4. Le code barre de cette bouteille de 50 cl est
3268840001008.
Une bouteille de même contenance est de marque Volvic, et a été puisée à...
Volvic, bien connu pour ses sources donnant un pH neutre de 7. Elle comprend
11,5 mg/l d'ions calcium, 8,0 mg/l d'ions magnésium, 13,5 mg/l d'ions
chlorures et 6,3 mg/l d'ions nitrates. Elle contient également des particules de
silice. Son code barre est 3057640117008. »
XML Mejdi BLAGHGI 24
DTD
DTD : Défintion

• Le rôle d'une DTD (Document Type Definition) est de


définir précisément la structure d'un document.
• Il s'agit d'un certain nombre de contraintes que doit
respecter un document pour être valide.
• Ces contraintes spécifient quels sont les éléments qui
peuvent apparaître dans le contenu d'un élément,
l'ordre éventuel de ces éléments et la présence de texte
brut.
• Elles définissent aussi, pour chaque élément, les
attributs autorisés et les attributs obligatoires.
• Les DTD ont l'avantage d'être relativement simples à
utiliser mais elles sont parfois aussi un peu limitées.

XML Mejdi BLAGHGI 26


Déclaration de la DTD

• La déclaration de la DTD du document doit être placée dans


le prologue.
• La DTD peut être interne, externe ou mixte.
– Elle est interne si elle est directement incluse dans le document.
– Elle est externe si le document contient seulement une référence
vers un autre document contenant la DTD.
– Elle est finalement mixte si elle est constituée d'une partie
interne et d'une partie externe.
• Une DTD est généralement prévue pour être utilisée pour de
multiples documents.
– Elle est alors utilisée comme DTD externe. En revanche, il est
pratique d'inclure directement la DTD dans le document en phase
de développement.

XML Mejdi BLAGHGI 27


Déclaration de la DTD

• La déclaration de la DTD est introduite par le


mot clé DOCTYPE et a la forme générale
suivante où root-element est le nom de
l'élément racine du document.
<!DOCTYPE root-element ... >
• Le nom de l'élément racine est suivi :
– du contenu de la DTD dans le cas d'une DTD
interne
– ou de l'URL du fichier contenant la DTD dans le cas
d'une DTD externe.
XML Mejdi BLAGHGI 28
Validation d’un document XML par un DTD
interne
<!DOCTYPE biblio[
<!ELEMENT biblio (livre)* >
<!ELEMENT livre (titre, auteur, nb_pages) >
<!ATTLIST livre
type (roman | nouvelles | poemes | théâtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA) >
<!ELEMENT auteur (#PCDATA) >
<!ELEMENT nb_pages (#PCDATA) >
]>
XML Mejdi BLAGHGI 29
Validation d’un document XML par un DTD
externe

• Les deux types de DTD externes sont les DTD


de type public et les DTD de type system. Le
mot-clef SYSTEM indique que le fichier spécifié
se trouve sur l'ordinateur local et qu'il est
disponible uniquement à titre privé.
• Le mot-clé PUBLIC indique une ressource
disponible pour tous sur un serveur distant.

XML Mejdi BLAGHGI 30


Validation d’un document XML par un DTD
externe
• Exemple de déclaration de DTD externe de type SYSTEM :
<!DOCTYPE biblio SYSTEM "bibliographie.dtd">
• Le fichier associé est le suivant :
<!ELEMENT biblio (livre*) >
<!ELEMENT livre (titre, auteur, nb_pages) >
<!ATTLIST livre
type (roman | nouvelles | poemes | théâtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA) >
<!ELEMENT auteur (#PCDATA) >
<!ELEMENT nb_pages (#PCDATA) >
• Exemple de déclaration de DTD externe de type PUBLIC :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XML Mejdi BLAGHGI 31


Déclarations d'éléments

• Une déclaration d'élément est de la forme :


<!ELEMENT nom type_element >
• Où:
– nom est le nom de l'élément
– type_element est le type auquel il est associé.
• Un élément peut être de type texte, vide,
séquence ou choix d'élément.
• Dans ces deux derniers cas, on indique la liste
des éléments-enfants.
XML Mejdi BLAGHGI 32
Types d'éléments 1/3

• Élément texte : Cet élément est le plus répandu,


puisque c'est celui qui contient... du texte.
<!ELEMENT elt (#PCDATA) >
• Élément vide : Un élément vide est, comme son nom
l'indique, un élément qui n'a aucun contenu -que ce soit
de type texte, ou bien un autre élément.
– Le mot-clef utilisé pour la déclaration de ce type d'élément
est EMPTY :
<!ELEMENT elt EMPTY >
– Un élément vide peut cependant fort bien posséder un ou
plusieurs attributs. Par exemple
<img width="100" height="30" src="paysage.jpg" alt="Paysage
de neige" />

XML Mejdi BLAGHGI 33


Types d'éléments 2/3

• Séquence d'éléments : Une séquence d'éléments est


une liste ordonnée d’éléments qui doivent apparaître en
tant qu'éléments-enfants de l'élément que l'on est en
train de définir.
– Ce dernier ne pourra contenir aucun autre élément que
ceux figurant dans la séquence.
– Cette liste est composée d'éléments séparés par des
virgules et est placée entre parenthèses.
– Chaque élément-enfant doit de plus être déclaré par
ailleurs dans la DTD (avant ou après la définition de la liste,
peu importe). Dans le fichier XML, ils doivent apparaître
dans l'ordre de la séquence.
<!ELEMENT elt0 (elt1, elt2, elt3) >

XML Mejdi BLAGHGI 34


Choix d'éléments

• Un choix d'élément donne le choix dans une liste de plusieurs


éléments possibles.
• L'utilisation précise dépend des indicateurs d'occurrence,
• De même que pour la séquence, les éléments-enfants doivent être
déclarés dans la DTD.
• Cette liste est composée d'éléments séparés par le caractère |.
• Syntaxe : <!ELEMENT elt0 (elt1 | elt2 | elt3) >
• Exemple d'utilisation valide :
<elt0> <elt2>(...)</elt2> </elt0>
• Exemple d'utilisation non valide :
<elt0>
<elt2>(...)</elt2>
<elt3>(...)</elt3>
</elt0>

XML Mejdi BLAGHGI 35


Indicateurs d'occurence

• Lors de la déclaration de séquence ou de choix d'éléments, à


chaque élément enfant peut être attribuée une indication
d'occurence (?, + ou *).
• Exemples d'indicateur d'occurences :
<!ELEMENT elt0 (elt1, elt2?, elt3+, elt*) >
– elt1 ne comprend aucune indication d'occurence. Il doit donc
apparaître une seule et unique fois dans l'élément elt0 ;
– elt2 a pour indication d'occurence ?. Cela signifie que l'élément
doit apparaître au maximum une fois (il peut ne pas apparaître
du tout) ;
– elt3 a pour indication d'occurence +. Cela signifie que l'élément
doit apparaître au moins une fois ;
– elt4 a pour indication d'occurence *. Cela signifie que l'élément
peut apparaître autant de fois que l'auteur le désire, voire pas du
tout.
XML Mejdi BLAGHGI 36
Types d'éléments 3/3

• Élément quelconque : peut contenir tout autre élément défini dans la DTD, aussi
bien qu'être vide ou contenir du texte.
– Les éléments-enfants éventuels peuvent apparaître dans n'importe quel ordre, et en quantité
non définie.
– Il est préférable de ne pas utiliser trop souvent ce type de déclaration, car on perd les avantages
qu'offre la rédaction d'une DTD, qui sont de fixer des contraintes précises sur la structure du
document XML qui lui est lié.
– Le mot-clef utilisé pour la déclaration de ce type d'élément est ANY.
<!ELEMENT elt ANY >
• Élément à contenu mixte : peut contenir aussi bien du texte que des éléments-
enfants.
– Il se présente comme une liste de choix, avec des indicateurs d'occurence bien choisis.
– Le texte contenu peut se trouver à n'importe quel endroit dans l'élément, et peut être une
section CDATA .
<!ELEMENT citation (#PCDATA | auteur)* >
– Exemple d'utilisation :
<citation>
<auteur>Shakespeare</auteur>Être ou ne pas être
</citation>

XML Mejdi BLAGHGI 37


Exercice

– contient des livres et des articles ;


– les informations nécessaires pour un livre <!DOCTYPE biblio[
sont : son titre général ;les noms des auteurs ;ses <!ELEMENT biblio (livre)* >
<!ELEMENT livre (titre, auteur, nb_pages
tomes et pour chaque tome, leur nombre de pages <!ATTLIST livre
;des informations générales sur son édition comme type (roman | nouvelles | poemes
par exemple le nom de l'éditeur, le lieu d'édition, le théâtre) #IMPLIED
lieu d'impression, son numéro ISBN ; lang CDATA "fr"
>
– les informations nécessaires pour un <!ELEMENT titre (#PCDATA) >
<!ELEMENT auteur (#PCDATA) >
article sont : son titre ; les noms des auteurs ; ses <!ELEMENT nb_pages (#PCDATA) >
références de publication : nom du journal, numéro ]>
des pages, année de publication et numéro du
journal
– on réservera aussi un champ optionnel
pour un avis personnel.
XML Mejdi BLAGHGI 38
Déclarations d'attributs : Type chaîne de
caractères
• C’est le type d'attribut le plus courant.
• Une chaîne de caractères peut être composée de
caractères ainsi que d'entités analysables.
• Le mot-clef utilisé pour la déclaration de chaîne de
caractère est CDATA.
• Exemple de déclaration de CDATA :
<!ELEMENT elt (...) >
<!ATTLIST elt attr CDATA #IMPLIED >
• Exemples d'utilisations :
<elt attr="Chaîne de caractères">(...)</elt>
<!ENTITY car "caractères" >
<elt attr="Chaîne de &car;">(...)</elt>

XML Mejdi BLAGHGI 39


Déclarations d'attributs : Valeurs par défaut

• Chaque attribut peut être obligatoire, optionnel ou fixe et avoir une


valeur par défaut.
• Déclaration d'un attribut avec une valeur par défaut :
<!ELEMENT elt (...) >
<!ATTLIST elt attr CDATA "valeur" >
– Un tel attribut n'est pas obligatoire. S'il est omis dans le fichier XML lors
de l'utilisation de l'élément elt, il est considéré comme valant valeur.
– Dans cet exemple, si on écrit <elt>(...)</elt>, cela est équivalent à écrire
<elt attr="valeur">(...)>/elt>.
• Déclaration d'un attribut requis :
<!ELEMENT elt (...) >
<!ATTLIST elt attr CDATA #REQUIRED >
– Un tel attribut est obligatoire. Son absence déclenche une erreur du
vérificateur syntaxique sur le fichier XML.

XML Mejdi BLAGHGI 40


Déclarations d'attributs : Valeurs par défaut

• Déclaration d'un attribut optionnel :


<!ELEMENT elt (...) >
<!ATTLIST elt attr CDATA #IMPLIED >
• Déclaration d'un attribut avec une valeur fixe :
<!ELEMENT elt (...) >
<!ATTLIST elt attr CDATA #FIXED "valeur" >
– L'utilité d'un tel attribut peut sembler bizarre à
première vue, puisqu'il ne peut prendre qu'une seule
valeur.
– Cette fonctionnalité est cependant utile lors d'une mise
à jour d'une DTD, pour anticiper la compatibilité avec
des versions ultérieures.
XML Mejdi BLAGHGI 41
Déclarations d'attributs : Types ID et IDREFS

• Ce type sert à indiquer que l'attribut en question


peut servir d'identifiant dans le fichier XML.
• Deux éléments ne pourront pas posséder le même
attribut avec la même valeur.
• Exemple de déclaration de type ID optionnel :
<!ELEMENT elt (...) >
<!ATTLIST elt attr ID #IMPLIED >
<!ELEMENT elt1 (...) >
<!ATTLIST elt1 attr ID #IMPLIED >
<!ELEMENT elt2 (...) >
<!ATTLIST elt2 attr ID #IMPLIED >

XML Mejdi BLAGHGI 42


Déclarations d'attributs : Types ID et IDREFS

• La déclaration précédente interdit par exemple :


<elt1 attr="machin"> </elt1>
<elt2 attr="truc"> </elt2>
<elt1 attr="machin"> </elt1>
• ... ainsi que
<elt1 attr="machin"> </elt1>
<elt2 attr="machin"> </elt2>
<elt1 attr="truc"> </elt1>
• C’est par exemple le cas de l’attribut id en (X)HTML.
• Ce type est complété par le type IDREFS.
– Un attribut de type IDREFS contiendra une liste d’ID.
– Par exemple, si dans le document XML ont été utilisés des attributs de type ID
valant machin, vacheÀLait et ChemiseÀFleurs, alors une valeur valide pour un
attribut de type IDREFS sera "machin vacheÀLait ChemiseÀFleurs".
– L’attribut headers des éléments td en (X)HTML est de type IDREFS.

XML Mejdi BLAGHGI 43


Déclarations d'attributs : Type énuméré

• On peut parfois désirer limiter la liste de valeurs possibles pour un


attribut. On le définit alors comme étant de type énuméré.
• Donner une autre valeur dans le fichier XML provoque une erreur.
• Exemple de déclaration d'une liste de choix d'attributs :
<!ELEMENT img EMPTY >
<!ATTLIST img format (GIF | JPEG | PNG) "PNG" >
• Cet exemple déclare un attribut format d'un élément img.
– La valeur de cet attribut peut être PNG, GIF ou JPEG.
– Si aucune valeur n'est affectée à cet attribut, c'est la valeur par défaut
qui le sera, ici PNG.
– On notera l'absence de guillemets dans la liste des valeurs possibles.
– En ajouter est une erreur courante dans la rédaction d'une DTD.

XML Mejdi BLAGHGI 44


Déclarations d'attributs : Utilisation de liste
pour les attributs

• On utilise le fait qu'il est possible de « factoriser »


le nom de l'élément.
• Par exemple :
<!ELEMENT elt (...) >
<!ATTLIST elt
attr1 CDATA #IMPLIED
attr2 CDATA #REQUIRED
>
• Les retours à la ligne sont optionnels et la mise en
page n’est pas contrainte.
XML Mejdi BLAGHGI 45
Exercice

• Modifier la DTD précédente


– en ajoutant un attribut optionnel soustitre à l'élément
titre ;
– en faisant de l'élément tome un élément vide et en lui
ajoutant un attribut requis nb_pages et un attribut
optionnel soustitre ;
– en faisant de l'élément nom_journal un attribut de
l'élément journal et en lui donnant comme valeur par
défaut Feuille de Chou ;
– en faisant de l'élément annee un attribut de type
énuméré, prenant comme valeurs possibles 2021,
2022, 2023, "avant_2021" et "inconnue" et proposant
comme valeur par défaut inconnue.
XML Mejdi BLAGHGI 46

Vous aimerez peut-être aussi