- Tous les cours
- Conditions d'utilisation
- À propos de ces cours
- Contact

# Cours de XML - Concepts de base

version 2.22, dernière mise à jour le 13 janvier 2009.

Chercher dans le cours :

## Table des matières (TdM)

1. I. Historique : de SGML à XML
   1. SGML et HTML
      1. Le SGML
      2. Le HTML
   2. XML

1. II. Mise en œuvre
   1. Procédure
   2. Exemple : une bibliographie
   3. Exercice : Structuration d'informations 1
   4. Exercice : Structuration d'informations 2

1. III. Structure d'un document XML
   1. Généralités
   2. Le prologue
      1. Déclaration XML
      2. Instructions de traitement
      3. Déclaration de type de document (DTD)
   3. Les commentaires
   4. L'arbre d'éléments
      1. Introduction
      2. Élément racine
      3. Les éléments
      4. Les attributs
      5. Les entités
      6. Les sections CDATA
   5. Règles de composition

1. IV. Support par les navigateurs
   1. Famille Mozilla et Internet Explorer
   2. Netscape
   3. Opera
   4. Conclusion

Retour au menu

## Contenu du cours

### I. Historique : de SGML à XML

`XML` dérive d'un langage développé dans les années 80, le `SGML`. Ce langage était complexe à apprendre et utiliser quotidiennement. Une version allégée, le `HTML` a donc été développée ; mais ce dernier, malgré de nombreuses adaptations, ne pouvait pas être étendu à l'infini, au fur et à mesure de l'augmentation des besoins des développeurs. C'est alors que fut créé le `XML`.

#### 1. SGML et HTML

##### a. Le SGML

Le `SGML` (Standard Generalized Markup Language, langage de balisage standard généralisé), premier essai de normalisation concernant les documents électroniques, a été adopté comme standard en 1986.

Le `SGML` est constitué de plusieurs composants. Ceux-ci changent pour chaque application `SGML` :

- Définition du type de document (`DTD`) : ce composant sert à préciser la structure du document ;

- Instance du document : il s'agit des données à stocker elle-mêmes, présentées sous une forme structurée selon les éléments `SGML` qui ont été définis dans la `DTD`. Même si une instance de document peut partager une `DTD` avec d'autres documents, elle ne peut se conformer qu'à une seule `DTD` ;

- Synthèse du document : ce composant sert à préciser les principaux aspects de l'application `SGML`. C'est à ce niveau que sont déterminées les options et qu'est précisé le jeu de caractères qui sera utilisé ainsi que les autres fonctions similaires.

Ce langage servant à préciser la structure d'un document quelconque, il est compréhensible que sa généralité le rende difficile d'apprentissage, et complexe d'emploi. En particulier, il était inadapté à l'écriture de documents pour Internet. Il a donc été nécessaire d'en dériver le langage `HTML`.

>Retour à la TdM

##### b. Le HTML

Comme il a été dit précédemment, c'est aujourd'hui le standard du développement web. Il a été étendu par le `XHTML`, un langage qui lui est extrêmement similaire, mais permettant la production de documents aux normes `XML`.

Ce langage est facile à apprendre et à utiliser ; il a d'ailleurs donné lieu au développement de nombreux outils de publication sur Internet :

- logiciels WYSIWYG -"What You See Is What You Get"- tels que `Nvu`, `FrontPage` ou `Dreamweaver` ;

- outils de publication de contenu comme SPIP, eZPublish, `Joomla`, PHPNuke...

... sans oublier qu'il est possible d'utiliser de simples éditeurs de texte comme `(X)Emacs` sous Linux ou bien le `Bloc-Notes` sous Windows.

Le `HTML` étant une application `SGML`, il est donc lié lui aussi à une `DTD`. Il en existe parfois plusieurs par version d'`HTML`. Celles de la version 4.01 se trouvent référencées sur le site web du W3C : DTD HTML 4.01 Strict, Transitional, Frameset...

Un inconvénient du `HTML` est son champ d'action limité : il n'est ainsi pas possible de définir autre chose qu'une page Web, ce qui est compréhensible puisque ce langage a été spécifiquement conçu pour cela.On ne peut par exemple pas ajouter de nouveaux éléments (on pourrait imaginer insérer des équations mathématiques, mais ce n'est pas possible en `HTML` stricto sensu).

Au bout de quelques années, la demande se faisant de plus en plus forte pour la définition d'un nouveau format, et le langage `HTML` rencontrant ses limites, le W3C a commencé à organiser des groupes de travail sur `XML`, un autre descendant du `SGML`.

>Retour à la TdM

#### 2. XML

Le `XML` est un dérivé du `SGML`. Il tente de se servir des principes de simplicité du `HTML` et de la souplesse `SGML`.

Simplification de `SGML`, puisqu'il ne reste que 35 pages de spécification contre 155 pages en ce qui concerne le `SGML`, le format `XML` est rapidement apparu adapté à beaucoup plus d'usages que ses concepteurs le pensaient initialement. Il conserve certains aspects de `SGML`.

Le plus important point commun avec le `SGML` est le fait que tout document `XML` peut être basé sur une `DTD` ou un `Schéma`. Cette association n'est cependant pas obligatoire, et un fichier `XML` peut très bien se suffire à lui-même.

Une autre caractéristique importante est que dans un document `XML`, la mise en forme des données est totalement séparée des données elles-mêmes. Cela permet de séparer complètement l'information (le contenu) de son apparence (le contenant), et donc de fournir plusieurs types de sortie pour un même fichier de données, en fonction de l'utilisateur ou de l'application demandeuse (autre document `XML`, tableau, graphique, image, animation multimédia, fichier `HTML`, fichier `PDF`...).

De plus, la possibilité de créer les éléments que l'on désire permet de rendre le fichier lui-même lisible -et modifiable- par un être humain : on peut donner aux informations contenues dans un tel fichier les étiquettes que l'on veut, et les ordonner selon son désir.

Un document `XML` peut ainsi prévoir plusieurs cibles, comme par exemple l'écran d'un téléphone portable, celui d'un ordinateur de bureau, une base de données, une application logicielle, etc.

Il est également possible d'effectuer des sélections par tri, des générations automatiques de tables des matières et bien d'autres fonctions encore, grâce au langage de feuilles de style `XSLT`.

>Retour à la TdM

### II. Mise en œuvre

#### 1. Procédure

`XML` permet de nettement séparer forme et fond. Par exemple, cela signifie que pour produire un document `HTML` à partir de données en utilisant le format `XML`, il est nécessaire d'écrire au moins deux fichiers, le premier contenant les données à mettre en forme, le second les informations nécessaires à cette mise en forme. En pratique, et dans un souci de normalisation et de généralisation, il peut s'avérer nécessaire d'ajouter un troisième fichier à l'ensemble :

1. Optionnel : un fichier peut être nécessaire pour définir a priori les balises auxquelles le document `XML` pourra avoir recours. Ce fichier peut être soit une Document Type Definition soit un Schema (voir plus loin dans le cours) ;

2. Le document contenant les données elles-mêmes, c'est-à-dire le document `XML` à proprement parler (une instance du document, au sens `SGML`) ;

3. Le document contenant les informations de mise en forme, permettant de produire un fichier dans le format de sortie voulu : une feuille XSLT (eXtensive Stylesheet Language Transformations).

Dans le cas d'un format de sortie `HTML`, il peut être également nécessaire d'ajouter une feuille de style `CSS`.

En résumé, si l'on veut produire un fichier `HTML` à partir de données mises sous format `XML`, il faut :

1. Créer éventuellement un fichier définissant les balises utilisables ;

2. Créer le fichier de données `XML` ;

3. Créer la feuille de style `XSL` permettant la production du fichier `HTML` ;

4. Créer éventuellement une feuille de style `CSS`.

Nous verrons au long de ce cours successivement les étapes 2, 1 et 3.

>Retour à la TdM

#### 2. Exemple : une bibliographie

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- La ligne ci-dessus est le prologue -->
<!-- Élément racine -->
<biblio>
<!-- Premier enfant -->
<livre>
<!-- Élément enfant titre -->
<titre>Les Misérables</titre>
<auteur>Victor Hugo</auteur>
<nb_tomes>3</nb_tomes>
</livre>
<livre>
<titre>L'Assomoir</titre>
<auteur>Émile Zola</auteur>
</livre>
<livre lang="en">
<titre>David Copperfield</titre>
<auteur>Charles Dickens</auteur>
<nb_tomes>3</nb_tomes>
</livre>
</biblio>

>Retour à la TdM

#### Exercice 1. Structuration d'informations 1

##### Énoncé

##### Correction

#### Exercice 2. Structuration d'informations 2

##### Énoncé

##### Correction

### III. Structure d'un document XML

#### 1. Généralités

Les personnes ayant élaboré `XML` avaient en tête la simplicité de déclaration et la validation de la structure. De plus, elles souhaitaient tenir compte des expériences du passé en intégrant la grande souplesse syntaxique du `SGML` et la simplicité d'écriture du `HTML`.

Comme cela est illustré par l'exemple précédent, un fichier `XML` est composé d'un prologue, d'un élément racine et d'un arbre. Cet arbre est constitué d'éléments imbriqués les uns dans les autres (ayant une relation parent-enfant) et d'éléments adjacents.

- Les premières lignes forment le prologue, constitué dans l'exemple précédent de la déclaration `XML`, puis éventuellement d'une déclaration de type de document (une `DTD`) ;

- L'élément `biblio` est notre élément racine (en anglais : document element) ; il est constitué de trois éléments `livre`. Dans chacun d'entre eux nous retrouvons la même composition, c'est-à-dire : un élément `titre`, un élement `auteur` et éventuellement un élément `nb_tomes`. L'élément `livre`, de plus, peut avoir un attribut `lang` ;

Même s'il est simple de comprendre ce code, on s'aperçoit mieux d'une éventuelle erreur lorsqu'on visualise ce même fichier dans un navigateur.

>Retour à la TdM

#### 2. Le prologue

##### a. Déclaration XML

Cette déclaration fait partie des « instructions de traitement ». Exemple de déclaration `XML` :

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

On distingue trois informations fournies dans cette déclaration :

1. `version` : version du `XML` utilisée dans le document, 1.0 en ce qui nous concerne (la dernière version du langage, 1.1, date de février 2004 mais ne change rien quant à ses bases) ;

2. `encoding` : le jeu de codage de caractères utilisé. Le jeu de caractères habituel pour le français est le ISO-8859-1. Il a tendance à être remplacé par l'ISO-8859-15 en attendant la généralisation de l'Unicode. Par défaut, l'attribut `encoding` a la valeur `UTF-8`. Cela permet à l'ordinateur de « savoir » quel caractère il doit afficher en réponse aux combinaisons de 1 et de 0 que contient le fichier sur le disque dur ;

3. `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 `no`.

Cette déclaration est facultative, mais il est préférable de l'utiliser. Dans ce cas les attributs `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 une simple ligne vide avant elle.

>Retour à la TdM

##### b. Instructions de traitement

Une instruction de traitement est une instruction interprétée par l'application servant à traiter le document `XML`. Elle ne fait pas totalement partie du document. Les instructions de traitement qui servent le plus souvent sont la déclaration `XML` ainsi que la déclaration de feuille de style. Exemple d'instruction de traitement :

<?xml-stylesheet type="text/xsl" href="biblio.xsl"?>

Dans cet exemple, l'application est `xml-stylesheet`, le processeur de feuille de style du `XML`. Deux feuilles de style différentes peuvent être utilisées, les `XSL` (propres au `XML`) ainsi que les `CSS` (feuilles de style apparues avec le `HTML`). L'attribut `type` indique de quel type de fichier il s'agit (`text/css` pour les feuilles de style `CSS`, par exemple) et l'attribut `href` indique l'URL du fichier. Cette instruction de traitement est notamment utilisée par les navigateurs Internet pour la mise en forme du document.

>Retour à la TdM

##### c. Déclaration de type de document (DTD)

Cette déclaration, lorsqu'elle est présente, permet de définir la structure du document. Elle peut être de deux types, externe ou interne. Exemple de déclaration de type de document :

<!DOCTYPE biblio SYSTEM "biblio.dtd">

Ce type de déclaration est celui d'une déclaration de type de document externe (voir le chapitre sur les DTD). Elle définit l'ensemble des éléments utilisables dans le document, y compris l'élément-racine (ici `biblio`) ainsi que l'emplacement où se trouve le fichier `biblio.dtd` dans lequel se trouve définie la structure du document.

Bien que facultative, il est souvent très intéressant de posséder une `DTD`, en particulier externe, simplement pour vérifier la validité du document `XML`. Il est ainsi recommandé d'en utiliser une dans le cas du développement parallèle de plusieurs fichiers `XML` destinés à subir un traitement particulier (développement par plusieurs personnes par exemple).

L'autre type de document permettant de définir la structure d'un fichier, le schéma XML, s'utilise autrement, comme nous le verrons plus tard.

>Retour à la TdM

#### 3. Les commentaires

En `XML`, les commentaires se déclarent de la même façon qu'en `HTML`, car ils reprennent la syntaxe du `SGML`. Ils commencent donc par `<!--` et se terminent par `-->`. Ils peuvent être placés à n'importe quel endroit tant qu'ils se trouvent à l'extérieur d'une autre balise.

Exemples de commentaires valides :

<!-- ceci est correct -->
<elt> <!-- ceci est correct aussi -->
Un peu de texte </elt>

Remarque : En raison de la compatibilité `XML`/`SGML`, la chaîne de caractères `--` est interdite dans un commentaire.

>Retour à la TdM

#### 4. L'arbre d'éléments

##### a. Introduction

Un document `XML` peut se représenter sous la forme d'une arborescence d'éléments. Cette arborescence comporte une racine (unique), des branches et des feuilles. Reprenons l'exemple précédent.

<?xml version="1.0" encoding="ISO-8859-1"?>
<biblio>
<livre>
<!-- Élément enfant titre -->
<titre>Les Misérables</titre>
<auteur>Victor Hugo</auteur>
<nb_tomes>3</nb_tomes>
</livre>
<livre>
<titre>L'Assommoir</titre>
<auteur>Émile Zola</auteur>
<couverture couleur="rouge" />
</livre>
<livre lang="en">
<titre>David Copperfield</titre>
<auteur>Charles Dickens</auteur>
<nb_tomes>3</nb_tomes>
</livre>
</biblio>

>Retour à la TdM

##### b. Élément racine

L'élément-racine (en anglais : document element) est, comme son nom l'indique, la base du document `XML`. Il est unique et englobe tous les autres éléments. Il s'ouvre juste après le prologue, et se ferme à la toute fin du document. Dans l'exemple ci-dessus, l'élément racine est `biblio`.

>Retour à la TdM

##### c. Les éléments

Les éléments forment la structure même du document : ce sont les branches et les feuilles de l'arborescence. Ils peuvent contenir du texte, ou bien d'autres éléments, qui sont alors appelés « éléments enfants », l'élément contenant étant quant à lui appelé logiquement « élément parent ».

Exemple d'élément contenant du texte :

<titre>Les Misérables</titre>

Exemple d'élément contenant d'autres éléments :

<livre>
<titre>L'Assommoir</titre>
<auteur>Émile Zola</auteur>
<couverture couleur="rouge" />
</livre>

D'autres éléments sont vides : ils ne contiennent pas d'élément-enfant. Exemple d'élément vide :

<couverture couleur="rouge" />

Il faut prendre garde à ne pas confondre la balise `<elt>` avec l'élément `elt`.

>Retour à la TdM

##### d. Les attributs

Tous les éléments peuvent contenir un ou plusieurs attributs. Chaque élément ne peut contenir qu'une fois le même attribut. Un attribut est composé d'un nom et d'une valeur. Il ne peut être présent que dans la balise ouvrante de l'élément (par exemple, on n'a pas le droit d'écrire `</livre lang="en">`).

Exemple d'utilisation d'un élément avec attribut :

<instrument type="vent">trompette</instrument>

Exemple d'utilisation d'un élément vide avec attributs :

<img src="ours.png" alt="Gros ours" width="56" height="100" />

>Retour à la TdM

##### e. Les entités

Il existe des entités définissables et définies. Elles peuvent être analysables ou non, internes ou externes. La déclaration des entités s'effectue au sein de la `DTD`. Elles peuvent être utilisées aussi bien dans la `DTD` que dans le document `XML`. Nous reviendrons plus en détails sur les entités et leur utilisation ultérieurement.

Certains caractères ayant un sens précis en `XML`, il est nécessaire de leur trouver un remplaçant lorsque l'on a besoin de les insérer dans un document. On a recours dans ce cas à des entités prédéfinies. Ces entités sont :

Caractère | Entité
--- | ---
& | &amp;
< | &lt;
> | &gt;
" | &quot;
' | &aquot;

Table 1. Liste des entités prédéfinies

Il n'existe pas d'entité prédéfinie pour les lettres accentuées ou pour les alphabets latins. Il faut utiliser à la place les entités numériques du type `&#n;` (où `n` est une valeur décimale). La valeur numérique correspond au code ISO 10646 ; par exemple le caractère é est codé par l'entité numérique `&#233;`. Il est néanmoins possible d'importer des entités en provenance d'une autre `DTD`, par exemple celle du `HTML`.

>Retour à la TdM

##### f. Les sections CDATA

Une section `CDATA` est une section pouvant contenir toutes sortes de chaîne de caractères. Une section `CDATA` permet de définir un bloc de caractères ne devant pas être analysés par le processeur `XML`. Cela permet entre autres de garder dans un bloc de texte un exemple de code à afficher tel quel.

Exemple d'utilisation de `CDATA` :

<![CDATA[Une balise commence par un < et se termine par un >.]]>

>Retour à la TdM

#### 5. Règles de composition

Un certain nombre de règles de base doivent être respectées :

1. Un nom d'élément ne peut commencer par un chiffre. Si le nom n'est composé que d'un seul caractère, ce doit être une lettre comprise entre « a » et « z » pour les minuscules, « A » et « Z » pour les majuscules. S'il est composé d'au moins deux caractères, le premier peut être « _ » ou « : ». Le nom peut ensuite être composé de lettres, chiffres, tirets, tirets bas et deux points. La syntaxe `XML` est sensible à la casse (le format distingue majuscules et minuscules).

2. Toutes les balises portant un contenu non vide doivent être fermées. La balise de début, la balise de terminaison et le contenu entre deux sont globalement appelés élément ;

3. Les balises n'ayant pas de contenu doivent se terminer par /> (voir la balise `<img .../>` ci-dessus) ;

4. Les valeurs d'attributs doivent être entre guillemets ;

Un document respectant ces critères est dit bien formé (well formed).

Il est aussi possible de définir des règles plus strictes indiquant quelles sont les séquences et imbrications de balises ou les attributs autorisés. Cela se fait à l'aide d'une `DTD` ou d'un `Schéma`. Il est alors possible d'effectuer une validation des documents faisant référence à une `DTD` pour s'assurer qu'ils respectent bien les règles qui y sont mentionnées. Un document bien formé dont la syntaxe est conforme aux règles stipulées dans une `DTD` ou un Schema XML est dit valide. Nous reviendrons sur cette notion ultérieurement.

>Retour à la TdM

### IV. Support par les navigateurs

#### 1. Famille Mozilla et Internet Explorer

Ces navigateurs (à partir de la version 5 pour `Internet Explorer`) permettent l'affichage des documents `XML` sous la forme d'une arborescence dans le cas général ; si une feuille de style est spécifiée, le navigateur l'interprète (à partir de la version 6 pour `Internet Explorer`).

>Retour à la TdM

#### 2. Netscape

Le tour de la question est vite fait en ce qui concerne les navigateurs de la famille Netscape, puisque seules les versions égales ou supérieures à 6 affichent les fichiers `XML` à condition toutefois qu'une feuille de style `XSL` soit déclarée dans le prologue. Néanmoins son implémentation est encore partielle.

>Retour à la TdM

#### 3. Opera

`Opera` supporte `XML` depuis la version 8, et le langage `XSL` depuis la version 9.

>Retour à la TdM

#### 4. Conclusion

En définitive, deux solutions se présentent :

1. Soit on veut visualiser le source `XML`. Dans ce cas, mieux vaut ne pas fournir de feuille de style dans le prologue et utiliser `Internet Explorer` ou un navigateur de la famille `Mozilla`. ;

2. Soit on veut tester la feuille de style. Dans ce cas, on peut ajouter l'appel à la feuille de style dans le fichier `XML`, et constater le résultat sous n'importe quel navigateur récent.

>Retour à la TdM

## Historique de ce document

- Le 13 janvier 2009, version 2.22. Corrections syntaxiques.
- Le 25 janvier 2008, version 2.21. Correction d'une erreur (copier/coller!) sur les normes pour les documents bien formés.
- Le 15 janvier 2008, version 2.20. Syntaxe. Ajout d'un complément sur les éléments vides et du support par Opera.
- Le 27 octobre 2005, version 2.12. Quelques corrections de syntaxe et suppression d'un paragraphe introductif.
- Le 17 octobre 2005, version 2.11. Correction typographique.
- Le 8 juillet 2005, version 2.10. Mise à jour pour Netscape et réécriture des exemples.
- Le 15 février 2005, version 2.03. Corrections typographiques.
- Le 7 février 2005, version 2.02. Corrections typographiques.
- Le 4 février 2005, version 2.01. Corrections typographiques.
- Le 6 décembre 2004, version 2.00. Réécriture.
- Le 22 mai 2004, version 1.21. Corrections typographiques.
- Le 2 février 2004, version 1.20. Ajouts de Mozilla et d'Opera.
- Le 29 juillet 2003, version 1.10. Corrections typographiques. Quelques mises à jour sur le fond.
- Le 31 mai 2002, version 1.01. Corrections typographiques.
- Le 16 mai 2002, version 1.00. Création du cours

## Bibliographie

### De l'auteur (G. Chagnon)

- XML, publié par Pearson Education en septembre 2007. Livre de cours et exercices écrit en collaboration avec Florent Nolot (Université de Reims). Consulter la fiche sur Eyrolles. Consulter la fiche sur Amazon.

## Conditions d'utilisation et licence

Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

Retour au menu