XML : Premiers pas

Prenons comme exemple un fichier XML qui décrit des livres à vendre.

Un fichier XML de base

Tout fichier XML commence et se termine systématiquement par un "encadrement" (le marqueur d'ouverture) : voici un exemple de fichier XML réduit à sa plus simple expression

<Ouvrage>
</Ouvrage>

A l'intérieur de ces balises extrêmes se trouvent des "sous-balises" :

<Ouvrage>
 
<Titre>
  </Titre>
</Ouvrage>

Et dans ces balises se trouvent les données proprement dites :

<Ouvrage>
 
<Titre>
    La vie des animaux
  </Titre>
</Ouvrage>

Chaque balise ouvrante DOIT AVOIR sa correspondance fermante (avec le / ).

Caractères autorisés

Les éléments dans la balise :

Le texte entre les balises

Eléments vides

Exception : les éléments vides. Ici, nous avons un ouvrage sans titre comme ceci :

<Ouvrage>
 
<Titre/>
  <Chapitre>
    Ceux qui vivent sur terre
  </Chapitre>
  <Chapitre>
    Ceux qui vivent dans les mers
  </Chapitre>
</Ouvrage>

Attributs (paramètres)

Il est possible de donner un paramètre aux balises. Par exemple le code suivant :

<Ouvrage>
  <Titre>La vie des animaux</Titre>
  <Chapitre>
    <Numero>
      1
    </Numero>
    Ceux qui vivent sur terre
  </Chapitre>

  <Chapitre>
    <Numero>
      2
    </Numero>
    Ceux qui vivent dans les mers
  </Chapitre>
</Ouvrage>

Ressemble beaucoup au code suivant

<Ouvrage>
  <Titre> La vie des animaux</Titre>
  <Chapitre Numero="1">
    Ceux qui vivent sur terre
  </Chapitre>

  <Chapitre Numero="2">
    Ceux qui vivent dans les mers
  </Chapitre>
</Ouvrage>

Les guillemets sont obligatoires dans les attributs :

<Chapitre Numero=1>

Tranformerait le document en document "mal formé". On peut indiféremment utiliser les guillemets ou les apostrophes pour encadrer les paramètres :

<Chapitre Numero="1">
<Chapitre Numero='1'>

Sont valides. Ce qui permet, en cas de besoin d'avoir un paramètre qui contient lui même des guillemets ou des apostrophes, comme ceci :

<Chapitre Titre="L'elixir">
<Chapitre Titre='Ma femme est un "Top-Model"'>

Si maintenant il y a à la fois des guillemets et des apostrophes, je ne sais plus... :-)

Les restrictions au niveau des caractères sont identiques à celles des balises vues plus haut.

Exemple avec une balise vide pourvue d'un paramètre

<Client>
  <CouleurCheveux="Blond"/>
  <Nom>Dupond</Nom>
</Client>

Différence entre les attributs et les balises

Un attribut est particulièrement élégant dans le cas ou nous avons une balise principale et des sous balises, mais la balise principale contient une valeur elle-même. Je m'explique : imaginons que nous devions modéliser en XML une collection de logiciels. Nous aurons pour chaque logiciel Le nom, la version et l'éditeur.

Lorsque nous utiliserons CSS, nous verrons que les attributs ne seront simplement pas affichés.

Manière 1- Tout dans les balises:
<LOGITHEQUE>
  <Logiciel>
    <Nom>Outlook</Nom>
    <Version>XP</Version>
    <Editeur>Microsoft</Editeur>
  </Logiciel>

  <Logiciel>
    <Nom>Word</Nom>
    <Version>2003</Version>
    <Editeur>Microsoft</Editeur>
  </Logiciel>
</LOGITHEQUE>
Aperçu dans Internet Explorer :

Aperçu dans Microsoft XML Notepad :

Manière 2 - Tout dans les attributs:

<LOGITHEQUE>
  <Logiciel Nom="Outlook" Version="XP" Editeur="Microsoft">
  </Logiciel>

  <Logiciel Nom="Word" Version="2003" Editeur="Microsoft">
  </Logiciel>
</LOGITHEQUE>

Aperçu dans Internet Explorer :

Aperçu dans Microsoft XML Notepad :

Manière 3 - Mix Attributs/balises
<LOGITHEQUE>
  <Logiciel Nom="Outlook">
    <Version>XP</Version>
    <Editeur>Microsoft</Editeur>

  </Logiciel>
  <Logiciel Nom="Word">
    <Version>2003</Version>
    <Editeur>Microsoft</Editeur>
  </Logiciel>
</LOGITHEQUE>
Aperçu dans Internet Explorer :

Aperçu dans Microsoft XML Notepad

Manière 4 - Balises SAUF pour le nom

Un peu comme si <Logiciel> avait une sorte d'attribut, il "vaut" "outlook" ou "Word"

<LOGITHEQUE>
  <Logiciel>
    Outlook
    <Version>XP</Version>
    <Editeur>Microsoft</Editeur>
  </Logiciel>
  <Logiciel>
    Word
    <Version>2003</Version>
    <Editeur>Microsoft</Editeur>
  </Logiciel>
</LOGITHEQUE>

Aperçu dans Internet Explorer :

L'affichage est très cohérent :

Aperçu dans Microsoft XML Notepad

Bien que le document soit "bien formé", on constate une sorte de pseudo balise [text] ainsi que l'apparition de caractères ASCII bizarres (les petits carrés blancs), plus encore quelques espaces que vous ne voyez pas sur l'illustration mais qui existent après le nom du logiciel. J'ai essayé de les retirer et d'enregistrer le document, mais à la réouverture, il les remet...

Pas les mêmes balises

Il est très possible d'avoir un fichier XML bien formé qui ressemble à ceci :

<LOGITHEQUE>
  <Logiciel Nom="Excel">
    <Version>5</Version>
  </Logiciel>
  <Logiciel Name="Excel" Version="97">
    Microsoft Excel
    <Editeur>
      Microsoft

    </Editeur>
    <Prix>39.50</Prix>
  </Logiciel>
</LOGITHEQUE>

Commentaires

Des commentaires peuvent être insérés de cette manière :

<!-- Ceci est un commentaire -->

Les commentaires peuvent être installés à l'importe quelle ligne du document.

Attention : il ne peut pas y avoir de double tiret -- dans un commentaire

La ligne d'entête

Bien que ce soit optionnel, chaque fichier XML devrait (d'après le W3C) commencer tout en haut par une ligne qui précise de quelle version XML on parle, comme ceci :

<?xml version="1.0" ?>
<Ouvrage>
 
<Titre>
    La vie des animaux
  </Titre>
  <Chapitre Numero="1">
    Ceux qui vivent sur terre
  <Chapitre>
  <Chapitre Numero="2" >
    Ceux qui vivent dans les mers
  <Chapitre>
</Ouvrage>

Attention : les espaces blancs ne sont PAS autorisé dans la ligne d'enb-tête. Par exemple :

<? xml version="1.0" ?>

provoquera une erreur dans Internet explorer

En 2003, nous sommes toujours à la version 1.0. Le W3C n'a pour l'instant pas l'intention de produire une autre version, mais cette éventualité n'étant pas exclue, cette ligne reste importante

Un fichier XML qui contient bien la ligne d'en-tête, ainsi que toutes les balises ouvrantes et leur correspondance fermante est appelé "Fichier BIEN FORMÉ"

Il est possible et même recommandé de préciser qu'on utilise l'alphabet occidental :

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

D'une façon générale, tout ce qui se trouve avant la première balise est appelé "Prologue"