Vous êtes sur la page 1sur 7

ENI Dr RV

INITIATION A XML <sac couleur="noir" marque="decathlon">


Mon sac de cours.
1. La présentation de XML </sac>

XML est l'acronyme de «eXtensible Markup • les balises sont sensibles à la casse
Language». • Les balises peuvent contenir des attributs
même les balises vides
XML permet d'échanger des données entres • les données incluses entre les balises ne
applications hétérogènes car il permet de doivent pas contenir de caractères < et & : il
modéliser et de stocker des données de façon faut utiliser respectivement &lt ; et &amp ;
portable. • La première ligne du document devrait
normalement correspondre à la déclaration
XML est extensible dans la mesure où il n'utilise de document XML : le prologue.
pas de tags prédéfinis comme HTML et il permet • Les espaces (l'indentation) n'est pris en
de définir de nouvelles balises : c'est un compte que dans le contenu des balises
métalangage. (pas dans la zone entre crochets < ... >).

Le format HTML est utilisé pour formater et afficher Par contre à l'intérieur des balises, chaque espace
les données qu'il contient : il est destiné à compte.
structurer, formater et échanger des documents <p>Une petite phrase pour remplir la balise p
d'une façon la plus standard possible.. .</p>.
est différent de
XML est utilisé pour modéliser et stocker des <p>Une petite phrase
données. Il ne permet pas à lui seul d'afficher les pour remplir la balise p ...</p>
données qu'il contient. ou encore
<p> Une petite phrase pour remplir
la balise p ...
2. Les règles ou norme XML pour formater un
</p>
document XML
3. Structure d'un document XML
Un certain nombre de règles doivent être
respectées pour définir un document XML valide et En réalité un document XML est structuré en 3
«bien formé». Pour pouvoir être analysé, un parties :
document XML doit avoir une syntaxe correcte. Les - La première partie, appelée prologue permet
principales règles sont : d'indiquer la version de la norme XML utilisée pour
créer le document (cette indication est obligatoire)
• Un document XML ne contient qu'une balise ainsi que le jeu de caractères (en anglais
racine (parent). encoding) utilisé dans le document (attribut
• chaque balise d'ouverture (exemple <tag>) facultatif, ici on spécifie qu'il s'agit du jeu ISO-
doit posséder une balise de fermeture 8859-1, jeu LATIN, pour permettre de prendre en
(exemple </tag>). Si le tag est vide, c'est à compte les accents français). Ainsi le prologue est
dire qu'il ne possède aucune données une ligne du type
(exemple <tag></tag>), un tag abrégé peut <?xml version="1.0" encoding="ISO-8859-1"?>
être utilisé (exemple correspondant : Le prologue se poursuit avec des informations
<tag/>) facultatives sur des instructions de traitement à
• les balises ne peuvent pas être intercalées destination d'applications particulières. Leur
(exemple syntaxe est la suivante :
<liste><element></liste></element> n'est
pas autorisé) <?instruction de traitement?>
• toutes les balises du document doivent Par exemple, <?xml-stylesheet
obligatoirement être contenues entre une type="text/xsl" href="biblio.xsl"?>
balise d'ouverture et de fermeture unique
dans le document nommée élément racine Dans cet exemple, l'application est xml-stylesheet,
• les valeurs des attributs doivent le processeur de feuille de style du XML. Deux
obligatoirement être encadrées avec des feuilles de style différentes peuvent être utilisées,
quotes simples ou doubles ( par exemple, les XSL (propres au XML) ainsi que les CSS
(feuilles de style apparues avec le HTML).
1
ENI Dr RV

L'attribut type indique de quel type de fichier il </groupe>


s'agit (text/css pour les feuilles de style CSS, par </carnet_adresse>
exemple) et l'attribut href indique l'URL du fichier.
Cette instruction de traitement est notamment On peut également utiliser un attribut comme suit:
utilisée par les navigateurs Internet pour la mise
en forme du document. <groupe nom="Amis">
...
- Le second élément est une déclaration de type de </groupe>
document appelé DTD - Document Type <groupe nom="Famille">
Definition) ...
</groupe>
- Et enfin la dernière composante d'un fichier XML
est l'arbre des éléments Exemple 3 : une bibliographie

Exemple 1 : Représentation d'une personne <?xml version="1.0" encoding="ISO-8859-1"?


>
<personne> <!-- La ligne ci-dessus est le prologue -->
<nom> <!-- Élément racine -->
<prenom>Victor</prenom> <biblio>
<nom>STINNER</nom> <!-- Premier enfant -->
</nom> <livre>
<email> <!-- Élément enfant titre -->
<identifiant>victor.stinner</identifiant> <titre>Les Misérables</titre>
<serveur>haypocalc.com</serveur> <auteur>Victor Hugo</auteur>
</email> <nb_tomes>3</nb_tomes>
<adresse> </livre>
<numero>282</numero> <livre>
<rue>7e rue</rue> <titre>L'Assomoir</titre>
<ville>Québec</ville> <auteur>Émile Zola</auteur>
<pays>CANADA</pays> </livre>
</adresse> <livre lang="en">
</personne> <titre>David Copperfield</titre>
<auteur>Charles Dickens</auteur>
Exemple 2 <nb_tomes>3</nb_tomes>
</livre>
</biblio>
Maintenant qu'on a défini une personne, on va
définir comment les personnes sont stockées dans
le carnet d'adresse : Exercice . Structuration d'informations

XML permet de structurer une information. Le


<carnet_adresse> paragraphe suivant contient de l'information "en vrac".
<groupe> Réorganisez-la de manière à mettre en évidence sa
<nom>Amis</nom> structure logique, en passant par une mise en forme
<personne>...</personne> XML.
<personne>...</personne>
</groupe> Une bouteille d'eau Cristaline de 150 cl contient par litre
71 mg d'ions positifs calcium, et 5,5 mg d'ions positifs
<groupe> magnésium. On y trouve également des ions négatifs
<nom>Travail</nom> comme des chlorures à 20 mg par litre et des nitrates
avec 1 mg par litre. Elle est recueillie à St-Cyr la
<personne>...</personne> Source, dans le département du Loiret. Son code barre
<personne>...</personne> est 3274080005003 et son pH est de 7,45. Comme la
</groupe> bouteille est sale, quelques autres matériaux comme du
fer s'y trouvent en suspension. Une seconde bouteille
<groupe> d'eau Cristaline a été, elle, recueillie à la source
<nom>Famille</nom> d'Aurèle dans les Alpes Maritimes. La concentration en
<personne>...</personne> ions calcium est de 98 mg/l, et en ions magnésium de 4
<personne>...</personne> 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
2
ENI Dr RV

50 cl est 3268840001008. Une bouteille de même Les sections CDATA


contenance est de marque Volvic, et a été puisée à...
Volvic, bien connu pour ses sources donnant un pH Une section CDATA est une section pouvant contenir
neutre de 7. Elle comprend 11,5 mg/l d'ions calcium, 8,0 toutes sortes de chaîne de caractères. Une section
mg/l d'ions magnésium, 13,5 mg/l d'ions chlorures et 6,3 CDATA permet de définir un bloc de caractères ne
mg/l d'ions nitrates. Elle contient également des devant pas être analysés par le processeur XML. Cela
particules de silice. Son code barre est 3057640117008. permet entre autres de garder dans un bloc de texte un
Correction exemple de code à afficher tel quel. Les sections
<cave> CDATA commencent par la chaîne "<![CDATA[" et se
<bouteille> terminent par la chaîne "]]>". La chaîne ']]>' ne doit pas
<marque>Cristaline</marque> figurer à l'intérieur d'une section CDATA
<composition>
<ion type="positif">calcium 71mg/l</ion>
<ion type="positif">magnésium 5,5mg/l</ion>
• Section CDATA
<ion type="negatif">chlorure 20mg/l</ion>
<ion type="negatif">nitrate 1mg/l</ion>
<autre type="metal">fer</autre> Bien formé
</composition> <example>
<source> <![CDATA[ <aaa>bb&cc<<<]]>
<ville>St-Cyr la Source</ville> </example>
<departement>Loiret</departement>
</source> • Une section CDATA ne doit pas comporter la
<code_barre>3274080005003</code_barre> chaîne de caractères ']]>'
<contenance unit="cl">150</contenance>
<ph>7,45</ph> Mal formé
</bouteille> <example>
<bouteille> <![CDATA[ <aaa>bb ]]>cc<<<]]>
<marque>Cristaline</marque> </example>
<composition>
<ion type="positif">calcium 98mg/l</ion> 4. La DTD (Document Type Definition)
<ion type="positif">magnésium 4mg/l</ion>
<ion type="negatif">chlorure 3,6mg/l</ion>
<ion type="negatif">nitrate 2mg/l</ion> Le rôle de la DTD
</composition>
<source> XML permet d'utiliser un fichier afin de vérifier qu'un
<ville>Aurèle</ville> document XML est conforme à une syntaxe donnée. La
<departement>Alpes Maritimes</departement> norme XML définit ainsi une définition de document type
</source> appelée DTD (Document Type Definition), c'est-à-dire
<code_barre>3268840001008</code_barre> une grammaire permettant de vérifier la conformité du
<contenance unit="cl">50</contenance> document XML. La norme XML n'impose pas l'utilisation
<ph>7,4</ph> d'une DTD pour un document XML, mais elle impose par
</bouteille> contre le respect exact des règles de base de la norme
XML.
<bouteille>
<marque>Volvic</marque> Ainsi on parlera de:
<composition>
<ion type="positif">calcium 11,5mg/l</ion> • document valide pour un document XML
<ion type="positif">magnésium 8mg/l</ion> comportant une DTD
<ion type="negatif">chlorure 13,5mg/l</ion> • document bien formé pour un document XML
<ion type="negatif">nitrate 6,3mg/l</ion> ne comportant pas de DTD mais répondant aux
</composition> règles de base du XML
<source>
<ville>Volvic</ville>
<departement>Puy-de-Dôme</departement> Une DTD peut être définie de 2 façons :
</source>
<code_barre>3057640117008</code_barre> • sous forme interne, c'est-à-dire en incluant la
<contenance unit="cl">50</contenance> grammaire au sein même du document
<ph>7</ph> • sous forme externe, soit en appelant un fichier
</bouteille> contenant la grammaire à partir d'un fichier local
</cave> ou bien en y accédant par son URL

Une déclaration de type de document est de la forme :

3
ENI Dr RV

<!DOCTYPE elt.racine ... "..." "..."> <!ELEMENT titre (#PCDATA)>


<!ELEMENT auteur (#PCDATA)>
<!ELEMENT nb_pages (#PCDATA)>
L'élément racine du document XML rattaché à cette <biblio>
DTD est alors obligatoirement elt.racine. Par exemple... ………
<?xml version="1.0" encoding="ISO-8859-1"?> </biblio>
<!DOCTYPE commande ... "..."
"boncommande.dtd"> Exemple de déclaration de DTD externe de type
<commande> PUBLIC :
<item>(...)</item> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
<item>(...)</item> 1.0 Strict//EN"
<item>(...)</item> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
</commande> strict.dtd">

Syntaxe DTD interne Déclarer un élément

Le contenu ne change pas suivant le type de DTD, mais


Pour pouvoir créer un document XML il est utile dans un
les déclarations d'une DTD interne sont écrites à
premier temps de définir les éléments pouvant être
l'intérieur du prologue du document XML alors que
utilisés, ou plus exactement les informations que l'on
celles d'une DTD externe sont stockées dans un
désire utiliser.
fichier... externe.

Exemple de déclarations pour une DTD interne : Ainsi pour définir un élément on utilisera la syntaxe
<!DOCTYPE biblio[ suivante :
<!ELEMENT biblio (livre)*>
<!ELEMENT livre (titre, auteur, <! ELEMENT Nom Modèle >
nb_pages)>
<!ATTLIST livre Le paramètre modèle représente soit un type de donnée
type (roman | nouvelles | poemes | prédéfini, soit une règle d'utilisation de l'élément.
théâtre) #IMPLIED
lang CDATA "fr" Les types prédéfinis utilisables sont les suivants :
>
<!ELEMENT titre (#PCDATA)>
Type
<!ELEMENT auteur (#PCDATA)> Description
prédéfini
<!ELEMENT nb_pages (#PCDATA)>
<biblio> L'élément ne contient pas de données
EMPTY
……… spécifiques
</biblio> L'élément doit contenir une chaîne de
#PCDATA
caractères
DTD externe
a) Un élément vide est, comme son nom l'indique, un
Les deux types de DTD externes sont les DTD de type
élément qui n'a aucun contenu -que ce soit de type
public et les DTD de type system. Le mot-clef SYSTEM
texte, ou bien un -autre élément. Le mot-clef utilisé pour
indique que le fichier spécifié se trouve sur l'ordinateur
la déclaration de ce type d'élément est EMPTY :
local et qu'il est disponible uniquement à titre privé. Le
<!ELEMENT elt EMPTY>
mot-clé PUBLIC indique une ressource disponible pour
tous sur un serveur distant.
Exemple d'utilisation : <elt />
Exemple de déclaration de DTD externe de type
SYSTEM : Un élément vide peut cependant fort bien posséder un
<!DOCTYPE biblio SYSTEM "bibliographie.dtd"> ou plusieurs attributs. Par exemple
<img width="100" height="30" src="paysage.jpg"
alt="Paysage de neige" />
Le fichier associé est le suivant :
<!ELEMENT biblio (livre*)>
<!ELEMENT livre (titre, auteur, b) Un élément nommé Nom contenant un type
nb_pages)> #PCDATA sera déclaré de la façon suivante dans la
<!ATTLIST livre DTD :
type (roman | nouvelles | poemes |
théâtre) #IMPLIED <! ELEMENT Nom (#PCDATA) >
lang CDATA "fr"
>
4
ENI Dr RV

Le mot clé #PCDATA doit nécessairement être <elt0>


écrit entre parenthèses, au risque sinon d'obtenir <elt1>(...)</elt1>
une erreur du parseur ! <elt3>(...)</elt3>
<elt2>(...)</elt2>
Cet élément pourra être écrit de la façon suivante dans </elt0>
le document XML :
... car l'ordre des éléments n'est pas respecté.
Ainsi on peut créer la déclaration suivante dans la DTD :
<Nom>Pillou</Nom>
<!ELEMENT personne (nom,prenom,telephone),email?
>
D'autre part il est possible de définir des règles
d'utilisation, c'est-à-dire les éléments XML qu'un élément <!ELEMENT nom (#PCDATA) >
peut ou doit contenir. Cette syntaxe se fait à l'aide de
notations spécifiques dont voici un récapitulatif : <!ELEMENT prenom (#PCDATA) >

Opérateur Signification Exemple <!ELEMENT telephone (#PCDATA) >


L'élément doit être présent au
+ A+ <!ELEMENT email (#PCDATA) >
minimum une fois
L'élément peut être présent Cette déclaration pourra donc donner un document XML
* A* du style :
plusieurs fois (ou aucune)
L'élément peut être <personne>
? A?
optionnellement présent
<nom>Pillou</nom>
L'élément A ou l'élément B peuvent
| A|B <prenom>Jean-Francois</prenom>
être présents
<telephone>555-123456</telephone>
L'élément A doit être présent et
, A,B
suivi de l'élément B <email>webmaster@commentcamarche.net</email>
Les parenthèses permettent de
() regrouper des éléments afin de leur (A,B)+ </personne>
appliquer les autres opérateurs ou bien
<personne>
c) Séquence d'éléments
<nom>Pillou</nom>
Une séquence d'éléments est une liste ordonnée des
éléments qui doivent apparaître en tant qu'éléments- <prenom>Jeff</prenom>
enfants de l'élément que l'on est en train de définir. Ce
dernier ne pourra contenir aucun autre élément que <telephone>555-542136</telephone>
ceux figurant dans la séquence. Cette liste est
composée d'éléments séparés par des virgules et est </personne>
placée entre parenthèses.
Chaque élément-enfant doit de plus être déclaré par d) Indicateurs d'occurence
ailleurs dans la DTD (avant ou après la définition de la
liste, peu importe). Dans le fichier XML, ils doivent Syntaxe
apparaître dans l'ordre de la séquence. Lors de la déclaration de séquence ou de choix
<!ELEMENT elt0 (elt1, elt2, elt3)> d'éléments, à chaque élément enfant peut être attribuée
une indication d'occurence (?, + ou *).

Exemple d'utilisation valide : Exemples d'indicateur d'occurences :


<elt0> <!ELEMENT elt0 (elt1, elt2?, elt3+, elt*)>
<elt1>(...)</elt1>
<elt2>(...)</elt2>
<elt3>(...)</elt3> • elt1 ne comprend aucune indication
</elt0> d'occurence. Il doit donc apparaître une seule et
unique fois dans l'élément elt0 ;
• elt2 a pour indication d'occurence ?. Cela
Exemples d'utilisations non valides : signifie que l'élément doit apparaître au
<elt0> maximum une fois (il peut ne pas apparaître du
<elt1>(...)</elt1> tout) ;
<elt3>(...)</elt3> • elt3 a pour indication d'occurence +. Cela
</elt0> signifie que l'élément doit apparaître au moins
une fois ;
... car l'élément elt2 est manquant.
5
ENI Dr RV

• elt4 a pour indication d'occurence *. Cela


signifie que l'élément peut apparaître autant de 1. Déclaration d'un attribut avec une valeur par défaut :
fois que l'auteur le désire, voire pas du tout. <!ELEMENT elt (...)>
<!ATTLIST elt attr CDATA "valeur">
Exemples
Les indicateurs d'occurence peuvent être utilisés en Un tel attribut n'est pas obligatoire. S'il est omis dans le
conjonction avec les séquences ou les choix d'éléments. fichier XML lors de l'utilisation de l'élément elt, il est
Ainsi... considéré comme valant valeur. Dans cet exemple, si on
<!ELEMENT elt0 (elt1+, elt2*, elt3?)> écrit <elt>(...)</elt>, cela est équivalent à écrire <elt
attr="valeur">(...)>/elt>.

2. Déclaration d'un attribut requis :


... permet d'indiquer une séquence composée d'au
moins un élément elt1, puis d'un nombre indéterminé <!ELEMENT elt (...)>
d'éléments elt2 (éventuellement nul), enfin au plus un <!ATTLIST elt attr CDATA #REQUIRED>
élément elt3.
Un tel attribut est obligatoire. Son absence déclenche
Exemple d'utilisation d'un choix d'éléments avec une erreur du vérificateur syntaxique sur le fichier XML.
indicateurs d'occurence par élément :
3. Déclaration d'un attribut optionnel :
<!ELEMENT choix.elt0 (elt1* | elt2* | elt3*)>
<!ELEMENT elt (...)>
Exemple d'utilisation valide : <!ATTLIST elt attr CDATA #IMPLIED>
<elt0>
<elt2>(...)</elt2> 4. Déclaration d'un attribut avec une valeur fixe :
<elt2>(...)</elt2> <!ELEMENT elt (...)>
</elt0> <!ATTLIST elt attr CDATA #FIXED "valeur">

Exemples d'utilisation non valide : b) Type énuméré


<elt0> On peut parfois désirer limiter la liste de valeurs
<elt3>(...)</elt3> possibles pour un attribut. On le définit alors comme
<elt2>(...)</elt2> étant de type énuméré. Donner une autre valeur dans le
</elt0> fichier XML provoque une erreur.

La syntaxe de ce type d'attribut est :


<elt0>
<elt2>(...)</elt2> <! ATTLIST Elément Attribut (Valeur1 | Valeur2 ) "valeur
<elt3>(...)</elt3> par défaut" >
</elt0>
Exemple de déclaration d'une liste de choix d'attributs :
Exemple d'utilisation d'un choix d'éléments avec <!ELEMENT img EMPTY>
indicateur d'occurence global : <!ATTLIST img format (GIF | JPEG | PNG) "PNG">
<!ELEMENT elt0 (elt1 | elt2 | elt3)*>

Exemple d'utilisation valide : Cet exemple déclare un attribut format d'un élément
<elt0> img. La valeur de cet attribut peut être PNG, GIF ou
<elt2>(...)</elt2> JPEG. Si aucune valeur n'est affectée à cet attribut,
<elt3>(...)</elt3> c'est la valeur par défaut qui le sera, ici PNG. On notera
<elt1>(...)</elt1> l'absence de guillemets dans la liste des valeurs
</elt0> possibles. En ajouter est une erreur courante dans la
rédaction d'une DTD.

Dans ce dernier cas, il n'y a pas de contrainte visible sur Un autre exemple concerne une déclaration d'attribut du
l'ordre d'apparition des éléments. C'est la déclaration la type :
plus souple possible. <! ATTLIST disque IDdisk ID #REQUIRED type(K7|
MiniDisc|Vinyl|CD)"CD" >
Déclarer des attributs
Ce qui signifie que l'on affecte à l'élément disque deux
a) Valeurs par défaut attributs IDdisk et type. Le premier attribut est de type
Chaque attribut peut être requis, optionnel ou fixe et atomique, il s'agit d'un identifiant unique obligatoire.
avoir une valeur par défaut. Les exemples suivants L'élément type peut être soit K7, MiniDisc, Vinyl ou CD,
montrent la déclaration d'un attribut appelé attr attaché sachant que ce dernier sera affecté par défaut...
à un élément nommé elt.
6
ENI Dr RV

c) Type ID
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 atribut possédant 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>

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>

Avantages

1. Un document XML est hiérarchisé sous forme


d'arbre. Cette représentation est logique est
permet de faire des recherches très pointues à
l'intérieur d'un document XML.
2. Le nom des balises, leur quantité, ainsi que les
attributs ne sont pas limités. Si on veut les
limiter, on peut passer par les DTD ou XML
Schema.
3. Portabilité : un document XML est très portable
et facilement lisible. Il existe des outils XML pour
tous les langages courants (C/C++, Java, PHP,
etc.).

ENI, Université de Fianarantsoa

Vous aimerez peut-être aussi