dernière modification : 2023

Structuration

1. Elément

Un document XML se compose d'éléments :

élément latitude
<latitude>39° 17′ N</latitude>

Un élément peut contenir du texte (comme dans l’exemple ci-dessus). Dans ce cas, il est délimité par des balises, de la forme <balise> (balise de début) et </balise> (balise de fin).

Un élément peut contenir des sous-élements :

sous-éléments latitude et longitude
<position>
  <latitude>39° 17′ N</latitude>
  <longitude>76° 36′ O</longitude>
</position>

Un élément peut être vide :

élement vide hémisphère_nord
<position>
  <latitude>39° 17′ N</latitude>
  <longitude>76° 36′ O</longitude>
  <hémisphère_nord/>  (1)
</position>
1 élément vide

auquel cas il est de la forme <balise/>

2. Entité

Certains caractères sont interdits dans le contenu d’un élément, comme par exemple < qui symbolise le début d’une balise. Une entité est une représentation alternative de ces caractères.

Table 1. Exemple d’entités
Caractère Entité

<

&lt;

>

&gt;

&

&amp;

&pos;

"

&quot;

utilité des entités
<intervals>
  <interval> x&lt;=-1 </interval> (1)
  <interval> x&gt;-1 &amp;&amp; x&lt;=1 </interval> (2)
  <interval> x&gt;1 </interval> (3)
</intervals>
1 x<=1
2 x>-1 && x<=1
3 x>1

3. Attribut

Un élément peut être caractérisé par des attributs, c’est-à-dire des couples (nom,valeur) spécifiés comme nom='valeur' ou nom="valeur" à l’intérieur de la balise ouvrante de l’élément.

attribut hémisphère
<latitude hémisphère="sud">39° 17′ N</latitude>

Etant donné un élément :

  • chacun de ses attributs doit être unique,

  • l’ordre de ses attributs n’est pas significatif

Il n’existe donc pas une façon unique d’exprimer la structure d’un ensemble de données. Par exemple, voici 2 représentations d’un même ensemble de données :

<position ville="Boston">
  <latitude>39° 17′ N</latitude>
  <longitude>76° 36′ O</longitude>
  <hémisphère hs="nord"/>
</position>
<position latitude="39° 17′ N" longitude="76° 36′ O" hémisphère="nord" >
  Boston
</position>

4. Arbre XML

Un document XML est un arbre dont les noeuds sont les éléments XML. Cet arbre est exprimé par un jeu de balises ouvrantes et fermantes, correctement parenthésées. Il n’y a donc qu’un seul élément racine.

Exemple 1 — Arbre d’éléments
<personne>
  <nom>
     <prenom>Jules</prenom>
     <patronyme>Durand</patronyme>
  </nom>
  <adresse>
     <numero>15</numero>
     <voie>rue du chat noir</voie>
     <commune>Félixville</commune>
  </adresse>
</personne>
personne
Exemple 2 — Contenu mixte : alternance de textes et d’éléments
<para>
   Du col du Crand Crêt suivre la ligne de crête qui mène
   à la pointe du Loup Noir <note>les crampons sont
   utiles au printemps</note>, puis redescendre dans la vallée.
</para>
Exemple 3 — Avec attributs
<adresses>
  <personne id ="p01">
    <type rang="maître de conférences" />
    <nom>Perrin</nom>
    <prenom>Olivier<prenom>
    <adresse>IUT Nancy-Charlemagne, Université de Nancy 2</adresse>
  </personne>
</adresses>
xml2

4.1. Elément vs attribut

Soit par exemple les données d’une bibliothèque :

<biblio nbtitre="2">
    <livre cote="681.321 A9-CHA" annee="2000">
        <titre>Programmation HTML et JavaScript</titre>
        <auteur><nom>Chaléat</nom><prenom>Philippe</prenom></auteur>
        <auteur><nom>Charnay</nom><prenom>Daniel</prenom></auteur>
        <editeur>Eyrolles</editeur>
        <pages>450</pages>
    </livre>
    <livre cote="681.321 XML-MIC" annee="2001">
        <titre>XML langage et applications</titre>
        <auteur><nom>Michard</nom><prenom>Alain</prenom></auteur>
        <editeur>Eyrolles</editeur>
        <pages>499</pages>
    </livre>
</biblio>

Cette information aurait pu être représentée à l’extrême sans attribut :

<biblio>
    <nbtitre>2 </nbtitre>
    <livre>
        <cote>681.321 A9-CHA</cote>
        <titre>Programmation HTML et JavaScript</titre>
        <auteur><nom>Chaléat</nom><prenom>Philippe</prenom></auteur>
        <auteur><nom>Charnay</nom><prenom>Daniel</prenom></auteur>
        <editeur>Eyrolles</editeur>
        <annee>2000</annee>
        <pages>450</pages>
    </livre>
    <livre>
        <cote>681.321 XML-MIC</cote>
        <titre>XML langage et applications</titre>
        <auteur><nom>Michard</nom><prenom>Alain</prenom></auteur>
        <editeur>Eyrolles</editeur>
        <annee>2001</annee>
        <pages>499</pages>
    </livre>
</biblio>

ou au contraire avec un minimum d’éléments :

<biblio nbtitre="2">
    <livre
         cote="681.321 A9-CHA"
         titre="Programmation HTML et JavaScript"
         auteur_1="Chaléat Philippe"
         auteur_2="Charnay Daniel"
         editeur="Eyrolles"
         annee="2000"
         pages="450"/>
    <livre
         cote="681.321 XML-MIC"
         titre="XML langage et applications"
         auteur="Michard Alain"
         editeur="Eyrolles"
         annee="2001"
         pages="499"/>
</biblio>

4.2. Utiliser un élément ou un attribut ?

Conceptuellement, un sous-élément caractérise une relation de composition (un sous-élement est un composant de l’élément parent), alors qu’un attribut qualifie l’élément auquel il se rattache (un attribut est une propriété). Choisir entre élément et attribut revient donc à choisir entre relation de composition et relation de qualification.

Dans la pratique, sous-élément et attribut sont des noeuds de l’arbre XML, et on y accède de la même façon. Seulement, l’attribut est un noeud terminal, ce qui n’est pas forcément le cas d’un sous-élément.

Concrétement, on utilise un élément
  • lorsque l’ordre est important (l’ordre des attributs n’est pas significatif),

  • lorsqu’on veut une entité multi-valuée (plusieurs occurrences d’un élément sont possibles au sein d’un même élément, alors qu’un attribut ne peut pas apparaître plusieurs fois dans un élément),

  • lorsqu’on veut se réserver la possibilité d’avoir une descendance (un attribut est une feuille dans l’arbre),

On utilise un attribut
  • lorsque l’on veut une valeur par défaut (spécifiée alors dans la DTD ou le schéma).

5. Document XML

Un document XML contient un arbre XML. Mais divers documents peuvent aussi y être liés : une feuille de style (pour définir une présentation du document), une feuille XSL (pour la transformer), une DTD ou un schéma, etc.

5.1. Prologue

Le prologue, ou déclaration XML, est facultatif mais sa présence est recommandée. S’il est présent il doit apparaitre en première ligne et ne doit être précédé d’aucun blanc.

Le prologue minimum informe sur la version du langage :

<?xml version="1.0" ?>

On peut y ajouter l’encodage (en l’absence de cette indication, UTF-8 est pris par défaut) :

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

5.2. Commentaires

La syntaxe est :

<!-- texte du commentaire -->

Les commentaires peuvent apparaître n’importe où dans un contenu d’élément, mais pas à l’intérieur d’une balise. Ils ne peuvent pas être imbriqués.

5.3. Exemple

Exemple de document XML complet
<?xml version="1.0" encoding="utf-8"?>
<!-- itinéraire fictif -->
<itineraire>
  <etape distance="0km">départ</etape>
  <etape distance="13km">tourner à droite</etape>
  <etape distance="22km">arrivée</etape>
</itineraire>

5.4. Document bien formé

Un document XML est dit bien formé (well-formed) s’il est syntaxiquement correct, c’est-à-dire s’il respecte les règles d’XML comme :

  • à toute balise ouvrante correspond une balise fermante,

  • les zones balisées sont correctement imbriquées,

  • il existe une racine unique,

  • aucun élément ne possède 2 attributs de même nom,

  • les valeurs d’attributs sont entre apostrophes ou guillemets, etc.

On vérifie qu’un document est bien formé à l’aide d’un valideur XML, comme par exemple :