Formation Xtensible Markupe Language, tutoriel & guide de travaux pratiques en pdf.
Affichage d’un document XML
Mon premier document XML
Comme premier exemple de document XML, nous allons recréer2 le document suivant qui traite par exemple d’un inventaire de bandes dessinées :
La structure d’un document XML est celle d’un arbre :
Un document XML = un arbre
Un élément = un nœud de l’arbre
Un élément vide = feuille
Prologue <?xml version= »1.0″?>
<!– Nom du fichier : Inventaire.xml–>
<INVENTAIRE>
<LIVRE>
<TITRE>La Magicienne trahie</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>48</PAGES>
<PRIX>9,00€</PRIX>
</LIVRE>
<LIVRE>
racine) <TITRE>L’île des Mers gelées</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
(élément <PAGES>48</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
document <LIVRE>
<TITRE>L’épée soleil</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
Elément <PAGES>50</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
<LIVRE>
<TITRE>La galère noire</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>45</PAGES>
<PRIX>10,00€</PRIX>
</LIVRE>
</INVENTAIRE>
Commentaire
Le prologue d’un document XML comprend la déclaration XML (optionnelle)
<?xml version = »1.0″ ?>
et peut aussi comprendre des commentaires (comme en HTML entre <!– et –> )
Nous verrons plus tard qu’un prologue peut aussi contenir
une DTD (document type definition) ou un lien vers un schéma XSD
un ou plusieurs instructions de traitement (comme par exemple l’inclusion d’une feuille de style en CSS) L’élément document est la seconde partie d’un document XML, correspond à un élément unique, élément racine (comparable au <BODY> en HTML) qui peut contenir d’autres éléments.
Un document XML est caractérisé par :
le fait qu’il est un fichier XML bien formé (voir suivant)
le fait qu’il est un fichier XML valide (voir chapitre 5)
Affichage d’un document XML sans feuille de style
Si vous voulez afficher un simple document XML, il faudra ouvrir la page dans votre navigateur.
Que constatez-vous avec ce fichier? S’affiche-t-il correctement?
Vous aurez un problème avec les caractères spéciaux…
Les normes ISO servent à codifier les caractères avec accents ou symboles pour qu’ils soient lisibles partout dans le monde. Si nous ne le faisons pas il est probable qu’ils apparaissent avec des symboles illisibles pour quelqu’un qui voudrait les consulter dans un pays n’utilisant pas notre norme.
La norme internationale comprend les caractères suivants, qui sont lus par tous les ordinateurs :
! »#$%&'()*+,-./
0123456789
:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`
abcdefghijklmnopqrstuvwxyz
{|}~
Tous les autres doivent être codifiés.
Effectivement un document XML doit se conformer à la norme ISO définie par le W3C.
Les deux pages suivantes contiennent une liste des principaux caractères accentués et des caractères spéciaux. Il suffit d’insérer le code ISO du caractère pour l’obtenir dans votre page. Avec cette manipulation, vous garantissez que l’accent sera reconnu correctement par tous les navigateurs.
Le jeu de caractère ISO-8859-1 (Latin 1) permet de codifier la plupart des langues de l’Europe occidentale. Vous pouvez dès lors placer dans l’en-tête d’un document XML la ligne suivante :
<?xml version= »1.0″ encoding= »iso-8859-1″?>
Ceci, afin de ne pas devoir coder chaque caractère spécial.
L’attribut encoding permet d’indiquer la représentation physique des caractères du fichier.
Après modification, notre document devient :
<?xml version= »1.0″?>
<!– Nom du fichier : Inventaire.xml–>
<INVENTAIRE>
<LIVRE>
<TITRE>La Magicienne trahie</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>48</PAGES>
<PRIX>9,00€</PRIX>
</LIVRE>
<LIVRE>
<TITRE>L’île des Mers gelées</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>48</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
<LIVRE>
<TITRE>L’épée soleil</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>50</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
<LIVRE>
<TITRE>Les bleus de la marine</TITRE>
<AUTEUR>LAMBIL/CAUVIN </AUTEUR>
<EDITEUR>Dupuis</EDITEUR>
<PAGES>45</PAGES>
<PRIX>10,00€</PRIX>
</LIVRE>
</INVENTAIRE>
Vous pouvez maintenant ouvrir le document dans votre navigateur : (Internet explorer adaptera automatiquement une feuille de style pour le document XML)
En cliquant sur les « + » et « – », vous aurez la possibilité d’ouvrir ou de fermer des éléments du fichier XML :
Exercices
1) [traducteur.xml] Écrivez un document XML qui contiendra un élément racine <TRADUCTEUR> et qui proposera une liste mots avec leurs traductions en français, anglais et néerlandais. Par exemple, le mot Bonjour :
Sous le tag français, on aura le contenu « Bonjour » ; Sous le tag anglais, on aura le contenu « Hello » ; Sous le tag néerlandais, on aura le contenu « Dag ». Ajouter au moins 8 mots dans ce document.
2) [listedvd.xml] Faites un document XML qui reprend la liste de tous vos DVD, avec, par DVD, le titre du film, la date de sortie du film et une zone « commentaire ».
Création d’un document XML bien formé
Généralités
Un document XML bien formé dépend des conditions suivantes :
Il y a un élément racine unique qui contient tous les autres éléments (INVENTAIRE dans l’exemple),
Les éléments doivent être correctement emboîtés. Aucun chevauchement des éléments n’est accepté. L’agencement suivant est incorrect :
<LIVRE> La Magicienne trahie
<AUTEUR>Jean Van Hamme</LIVRE></AUTEUR>
Chaque élément doit avoir un marqueur d’ouverture et un marqueur de fermeture. Sauf l’élément sans contenu exemple : <LIVRE/> (Les balises uniques doivent être de la forme <balise/> )
Les noms d’éléments sont sensibles à la casse
Les commentaires se marquent comme en HTML entre < !– et –>
Dans notre premier document, l’élément <LIVRE> est appelé « élément parent », et l’élément <TITRE> un « élément enfant ».
Le nom des balises peut contenir des lettres, des chiffres, des tirets ( – ), des points, des tirets bas ( _ ),et doit contenir au moins une lettre.
Le nom doit débuter par une lettre ou un souligné (_) suivi éventuellement de plusieurs lettres, chiffres, points, tirets ou soulignés.
Les éléments des balises suivantes sont-ils légaux ?
Le non respect des conditions précédentes entraînera systématiquement une erreur. De nombreux outils, éditeurs ou « parser » XML examinent le code XML et signalent si le document XML est bien formé. Si vous commettez une erreur, le navigateur vous affichera un message du style :
Ici, il manque un « ? » à la première ligne…
<?xml version= »1.0″?>
Les commentaires et la section CDATA
En XML, les commentaires débutent par < !– et se terminent par –>. Vous pouvez placer des commentaires n’importe où dans un document XML, en dehors du marquage lui-même.
La section CDATA est un bloc de texte dans lequel vous pouvez insérer librement n’importe quel caractère (&, <, …) excepté la chaîne ]]>. La section CDATA commence par < ![CDATA[ et se termine par ]]>.
Exemple :
<LIVRE>
< ![CDATA[
<HTML>
Vous pouvez taper ici n’importe quel caractère sauf deux crochets droits suivis par un symbole plus grand que </HTML>
]]>
</LIVRE>
Sans la section CDATA, le processeur supposerait que <HTML>, par exemple, est le début d’un élément HTML à interpréter, plutôt que du texte inséré dans l’élément LIVRE.
Les attributs
<?xml version= »1.0″?>
<!– Nom du fichier : Inventaire.xml–>
<?xml-stylesheet type= »text/css » href= »inventaire.css »?>
<INVENTAIRE>
<LIVRE>
<COUVERTURE Source= »th1_cov.jpg »/>
<TITRE>La Magicienne trahie</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>48</PAGES>
<PRIX>9,00€</PRIX>
</LIVRE>
<LIVRE>
<COUVERTURE Source= »th2_cov.jpg »/>
<TITRE>L’île des Mers gelées</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>48</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
<LIVRE>
<COUVERTURE Source= »th3_cov.jpg »/>
<TITRE>L’épée soleil</TITRE>
<AUTEUR>Jean Van Hamme</AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>50</PAGES>
<PRIX>9,50€</PRIX>
</LIVRE>
<LIVRE>
<COUVERTURE Source= »th4_cov.jpg »/>
<TITRE>La galère noir</TITRE>
<AUTEUR>Jean Van Hamme </AUTEUR>
<EDITEUR>Le Lombard</EDITEUR>
<PAGES>45</PAGES>
<PRIX>10,00€</PRIX>
</LIVRE>
</INVENTAIRE>
Dans le document XML ci-dessous, un élément vide nommé COUVERTURE au début de chaque élément LIVRE a été ajouté. C’est un attribut. Le but de cet élément, dans ce cas-ci, est d’indiquer à l’application XML d’afficher
l’image spécifiée pour la couverture du livre. Cependant, pour utiliser un tel élément, nous aurons besoin des scripts ou des feuilles de style XSL (voir plus loin).
Définissons déjà les différentes propriétés des attributs
Les valeurs des attributs doivent être entre » » ou entre ‘ ‘;
Par convention, les noms des attributs sont écrits en minuscule ;
Le nom des attributs peut contenir des lettres, des chiffres, des tirets ( – ), des tirets bas ( _ ),et doit contenir au moins une lettre.
Le nom doit débuter par une lettre ou un souligné (_) suivi éventuellement de plusieurs lettres, chiffres, points, tirets ou soulignés.
Les noms d’attributs commençant par xml sont normalement réservés à des fins de standardisation.
Un nom d’attribut ne peut apparaître qu’une seule fois dans un même marqueur.
2) [commune.xml] Créez un fichier XML, pour la commune, qui contiendrait toutes les informations nécessaires de ses habitants.
3) [html.xml] Créez un fichier XML qui contient toutes les balises HTML et leurs explications.
Création d’un document XML valide
Qu’est-ce qu’un document XML valide ?
C’est un document bien formé, qui répond en outre à deux exigences :
Le prologue du document contient une DTD (déclaration de type de document) ou un schéma W3C qui définit la structure du document
Le reste du document doit se conformer à ce(tte) DTD/Schéma WC3
Pourquoi un document XML valide ?
Uniformité « grammaire pour une classe de documents »
Si plusieurs personnes travaillent sur un même document XML, la DTD garantit que tout le monde respectera la structure définie.
Rendre plusieurs documents XML utilisables par un même logiciel de traitement
Cependant, le processeur d’Internet ne vérifie pas la validité d’un document, il vérifie uniquement si le document est bien formé (pas d’erreur fatale).
Le document commence par la déclaration XML : <?xml version= »1.0″ standalone= »yes »?> (le « yes » de l’attribut standalone est une indication facultative qui signifie qu’il n’y a pas de DTD pour le document XML, « no » signifie qu’il y a une DTD)
Votre document DTD (composant optionnel d’un doc XML) peut être, entre autre, validé sur le site http://validator.w3.org, ou encore dans certains éditeurs XML (p.e. xmlSPY).
Création de la DTD
Une DTD se place dans le prologue d’un document XML.
La DTD se compose d’un crochet gauche [ suivi d’une série de déclarations de marquage, suivi d’un crochet droit ]
Exemple :
<?xml version= »1.0″ standalone= »no » ?>
<!– Nom du fichier : livresimple.xml–>
<!DOCTYPE INVENTAIRE
[
<!ELEMENT LIVRE ANY> Déclaration de type de document
]
>
<INVENTAIRE>
<LIVRE>
Voici un document XML très simple
</LIVRE>
</INVENTAIRE>
Dans cet exemple, notre document XML ne peut contenir que des éléments de type LIVRE, et un élément TITRE peut avoir tout type de contenu possible (ANY)
Une DTD peut contenir les types de déclarations de marquage suivants :
Déclarations de type d’éléments
EMPTY : signifie que l’élément doit être vide, qu’il ne peut pas y avoir de contenu
< !ELEMENT IMAGE EMPTY>
Par exemple : <IMAGE></IMAGE> ou encore <IMAGE/>
ANY : Signifie que l’élément peut contenir tout type de contenu légal. Donc zéro, un ou plusieurs éléments enfants, dans n’importe quel ordre ou avec n’importe quel nombre de répétitions avec ou sans données texte disséminées.
Contenu d’élément (contenu de filiation)
L’élément peut contenir une filiation d’élément, mais ne peut pas contenir directement du texte.
<!DOCTYPE LIVRE
[
<!ELEMENT LIVRE (TITRE,AUTEUR)>
<!ELEMENT TITRE (#PCDATA)>
<!ELEMENT AUTEUR (#PCDATA)>
]
>
L’élément LIVRE est déclaré comme ayant un contenu d’élément. L’expression (TITRE, AUTEUR) est appelé modèle de contenu. Celui-ci indique les types d’éléments enfants et leur ordre.
Le modèle de contenu peut avoir deux formes :
(TITRE, AUTEUR)
L’élément LIVRE doit avoir un élément enfant TITRE suivi d’un élément enfant AUTEUR
(TITRE | AUTEUR)
L’élément LIVRE peut contenir un élément TITRE ou un élément AUTEUR (attention il s’agit d’un ou exclusif, c’est soit l’un soit l’autre mais pas les deux !)
Vous pouvez modifier ces modèles de contenu en utilisant le « ? », « + » ou « * »
? 0 ou 1 occurrence de l’élément précédent
+ 1 ou plusieurs occurrences de l’élément précédent
* 0, 1 ou plusieurs occurrences de l’élément précédent
Par exemple :
<!ELEMENT LIVRE(NOM+, AUTEUR ?, PRIX)>
<!ELEMENT NOM (#PCDATA)>
<!ELEMENT AUTEUR (#PCDATA)>
<!ELEMENT PRIX (#PCDATA)>
L’élément suivant serait légal :
<LIVRE>
<NOM>Roméo & Juliette</NOM>
<NOM>Roméo et Juliette</NOM>
<PRIX>10,00€</PRIX>
</LIVRE>
Vous pouvez aussi emboîter des modèles de contenu dans des modèles de séquence (et vice-versa)
Exemple :
<!ELEMENT LIVRE (TITRE, PRIX,(AUTEUR | DESSINATEUR | SCENARISTE))>
<!ELEMENT TITRE (#PCDATA)>
<!ELEMENT PRIX (#PCDATA)>
<!ELEMENT AUTEUR (#PCDATA)>
<!ELEMENT DESSINATEUR (#PCDATA)>
<!ELEMENT SCENARISTE (#PCDATA)>
Contenu mixte
Un élément peut avoir un contenu mixte soit
Des données de caractères uniquement (#PCDATA) <!ELEMENT SOUSTITRE (#PCDATA)>
(nb : l’élément SOUSTITRE peut rester vide ou il peut contenir des données de caractères)
Des données de caractères plus une filiation optionnelle d’éléments <!ELEMENT TITRE (#PCDATA | SOUSTITRE)*>
Exemple :
1 Soit la DTD suivante :
<!DOCTYPE INVENTAIRE
[
<!ELEMENT INVENTAIRE (TITRE)>
<!ELEMENT TITRE (#PCDATA | SOUSTITRE)*>
<!ELEMENT SOUSTITRE (#PCDATA)>
]>
Elle signifie que pour un élément TITRE, on peut avoir :
– soit des données caractères
– soit un élément SOUSTITRE
Et ceci zéro, une ou plusieurs fois (il s’agit donc d’un OU inclusif)
Mais notre document XML ne peut contenir qu’un seul « TITRE ».
Pour les éléments XML suivants :
<INVENTAIRE>
<TITRE>
Thorgal
<SOUSTITRE>Et la magicienne trahie</SOUSTITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
<SOUSTITRE>La magicienne trahie</SOUSTITRE>
Thorgal
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
Thorgal
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
<SOUSTITRE>La magicienne trahie</SOUSTITRE>
<SOUSTITRE>Les archers</SOUSTITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
Thorgal
<SOUSTITRE>Et la magicienne trahie</SOUSTITRE>
Thorgal
<SOUSTITRE> Le viking</SOUSTITRE>
</TITRE>
</INVENTAIRE>
2 Soit la DTD suivante :
<!DOCTYPE INVENTAIRE
[
<!ELEMENT INVENTAIRE (TITRE)*> <!ELEMENT TITRE (#PCDATA | SOUSTITRE)> <!ELEMENT SOUSTITRE (#PCDATA)>
]
>
Elle signifie que pour un élément TITRE, on peut avoir :
– soit des données caractères
– soit un élément SOUSTITRE
Et ceci une et une seule fois (il s’agit donc d’un OU exclusif).
Mais le documents XML peut contenir zéro, un ou plusieurs « TITRE ».
Pour les éléments suivants :
<INVENTAIRE>
<TITRE>
Thorgal
<SOUSTITRE>Et la magicienne trahie</SOUSTITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
<SOUSTITRE>La magicienne trahie</SOUSTITRE>
Thorgal
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
Thorgal
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
<SOUSTITRE>La magicienne trahie</SOUSTITRE>
<SOUSTITRE>Les archers</SOUSTITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
</TITRE>
</INVENTAIRE>
<INVENTAIRE>
<TITRE>
Thorgal
<SOUSTITRE>Et la magicienne trahie</SOUSTITRE>
Thorgal
<SOUSTITRE> Le viking</SOUSTITRE>
</TITRE>
</INVENTAIRE>
3 Soit la DTD suivante :
<!DOCTYPE INVENTAIRE
[
<!ELEMENT INVENTAIRE (TITRE)> <!ELEMENT TITRE (#PCDATA , SOUSTITRE)*> <!ELEMENT SOUSTITRE (#PCDATA)>
]
>
Elle signifie que pour un élément TITRE, on doit avoir :
– des données caractères ET
– un élément SOUSTITRE
Et ceci zéro, une ou plusieurs fois (il s’agit donc d’un ET inclusif) Mais notre document XML ne peut contenir qu’un seul TITRE.
1. Introduction
1.1 Qu’est-ce que l’XML ?
1.2 Quelle est sa relation avec l’HTML ? Est-il destiné à remplacer l’HTML ?
1.3 Conclusion
2. Affichage d’un document XML
2.1 Mon premier document XML
2.2 Affichage d’un document XML sans feuille de style
2.3 Exercices
2.4 Création d’un document XML bien formé
2.4.1 Généralités
2.4.2 Les commentaires et la section CDATA
2.4.3 Les attributs
2.4.4 Exercices
3. Création d’un document XML valide
3.1 Création de la DTD
3.1.1 Déclarations de type d’éléments
3.1.2 Déclarations de listes d’attributs
3.2 Exercices
3.3 XML Schema Definition (XSD)
3.3.1 Exemple de base
3.3.2 Règles de base
3.3.3 Exercices
4. Affichage d’un document XML avec une feuille de style
4.1 Petit rappel sur les règles des feuilles de style
4.2 Exercices
5. Les feuilles de styles XSL
5.1 Principes de base
5.1.1 Principe de fonctionnement
5.1.2 Principales instructions XSLT
5.1.3 value of select
5.1.4 for each select
5.1.5 apply-templates select
5.1.6 sort select
5.1.7 if test= »expression »
5.1.8 choose
5.1.9 Commentaire
5.1.10 Transformation XML _ HTML
5.2 XPATH
5.2.1 Les expressions XPATH
5.2.2 Les fonctions XPATH
5.2.3 Exemples d’expressions XPATH, utilisation des filtres
5.2.4 Les axes de recherche
5.3 XSL/FO
5.4 Exercices
6. Affichage d’un document XML avec un langage de script DOM
6.1 Liste des principaux objets DOM pour un document XML
6.2 Mozilla vs Internet Explorer
6.3 Mozilla vs Internet Explorer : la fonction « childNodes »
6.4 Exercices
7. PHP 5
7.1 SimpleXML
7.2 Exercices
7.3 DOM
7.4 Inclure une page XML associée à une page XSLT dans PHP
7.5 Exercices
8. RSS
8.1 Objectifs des flux RSS :
8.2 Création d’un fichier RSS
8.3 Afficher un flux RSS
8.4 Exemple de création d’un fichier statique RSS à partir d’une table mysql
9. Pour aller plus loin
9.1 XQuery : XML comme une base de données
9.2 XForms
9.1 ASP (Active Server Page)
9.2 Liens évolués XLL : XPOINTER et XLINK
9.3 Images au format SVG
9.4 SAX
9.5 AJAX
10. Liens utiles