1.XML

1.6.La déclaration XML

Comme nous l'avons dit précédemment les documents XML commencent par une ligne <?xml (...)>. Cette ligne doit contenir l'attribut version afin de préciser quelle version de la norme XML est appliquée (autrement dit "1.0").
Elle permet également de préciser le type d'encodage[C'est quoi?] utilisé avec l'attribut encoding (ex: ISO-8859-1 pour les caractères utilisés en Europe occidentale). Si cet attribut n'est pas précisé, l'encodage est supposé être de l'unicode UTF-8.
<?xml version="1.0"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
Nous vous conseillons de toujours utiliser un encodage de type unicode comme l'UTF-8 afin de supporter le plus grand nombre de caractères possibles... ne serait-ce que le caractère €

1.7.Ecrire un document XML bien-formé

Un document XML bien-formé est un document XML qui respecte les règles suivantes:
  • Il ne doit exister qu'une seule balise racine (i.e. première balise du document après la déclaration xml et les directives), le choix de son nom est laissé libre. Ainsi, si l'on choisi "baliseracine" comme balise racine alors l'ensemble des balises du document doit être compris entre <baliseracine> et </baliseracine>
  • Toute balise ouverte doit être refermée (i.e. à <balise> doit être associé </balise>). Si une balise est vide (i.e. n'englobe pas de texte) alors elle pourra être simplifiée en une balise auto-fermante et s'écrira <balise />
  • Les balises doivent-être imbriquées les unes dans les autres (i.e. une balise ouverte ne peut pas être fermée tant que toutes les balises incluses dedans n'ont pas été fermées. Il ne peut pas y avoir chevauchement de balises).
En outre:
  • Les noms des balises doivent commencer par une lettre ou "_", les caractères suivants peuvent être des chiffres, des lettres, "_", "." ou "-".
  • Les noms des balises ne doivent pas commencer par "xml" (réservé pour un éventuel usage futur)
Les balises peuvent être en majuscules ou minuscules (voire un mix) mais sont, dans la plupart des normes, en minuscules.
Le document que nous avions vu en introduction
<?xml version="1.0"?>
<annuaire>
    <personne>
        <nom>HAWKING</nom>
        <prenom>Stephen</prenom>
    </personne>
    <personne>
        <nom>REEVES</nom>
        <prenom>Hubert</prenom>
    </personne>
    <personne>
        <nom>EINSTEN</nom>
        <prenom>Albert</prenom>
    </personne>
</annuaire>
répond bien à ces critères:
  • une seule racine (annuaire)
  • 3 éléments (personne)
  • avec chacun des éléments imbriqués (nom et prénom)
Un document XML représente syntaxiquement un arbre, l'arbre correspondant au document donné en exemple est le suivant:

1.8.Les documents XML et les caractères qui posent problème

Afin de ne pas rompre la structure d'un document XML, vous ne pouvez pas utiliser le caractère < tel quel au sein de votre texte (contenu de la balise) ni même en tant que valeur d'un attribut. De même il est préférable (même s'il est généralement possible de le faire) de ne pas utiliser le caractère > tel quel.
Le document XML suivant n'est donc pas correct.
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom>Garage Dupond et Fils</nom>
        <description>Distance du centre ville < 2 km</description>
    </societe>
</annuaire>
Vous devez donc remplacer ces deux caractères par une notation sous forme d'entité. Vous pouvez opter pour la notation "lisible" à savoir:
  • &lt; en remplacement de <
  • &gt; en remplacement de >
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom>Garage Dupond et Fils</nom>
        <description>Distance du centre ville &lt; 2 km</description>
    </societe>
</annuaire>
Vous pouvez aussi opter pour une notation s'appuyant sur le code UNICODE du caractère, ce qui donne alors:
  • &#x3C; (pour la notation hexadécimale ou &#60; si vous préférez la notation décimale) en remplacement de <
  • &#x3E; (pour la notation hexadécimale ou &#62; si vous préférez la notation décimale) en remplacement de >
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom>Garage Dupond et Fils</nom>
        <description>Distance du centre ville &#x3C; 2 km</description>
    </societe>
</annuaire>
Du coup, le caractère & est lui-même un caractère qui peut poser problème s'il est utilisé tel quel au sein du texte ou des valeurs d'attribut. Comme dans l'exemple suivant:
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom>Garage Dupond & Fils</nom>
        <description>Distance du centre ville &lt; 2 km</description>
    </societe>
</annuaire>
Vous veillerez donc à le remplacer par &amp; ou &#x26; (ou &#38;).
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom>Garage Dupond &amp; Fils</nom>
        <description>Distance du centre ville &lt; 2 km</description>
    </societe>
</annuaire>
Vous trouver le code UNICODE hexadécimal de bon nombre de caractères sur la page suivante:Table UNICODE

1.9.Les documents XML sans problème avec CDATA

Si vous souhaitez insérer de nombreux caractères "spéciaux" dans du texte inclus dans une balise (ceci n'est pas valable pour les valeurs d'attribut) vous pouvez vous passer de faire appel à la notation d'entité simplement en précisant à l'analyseur XML de ne pas interpréter les caractères spéciaux. Pour cela, vous devez saisir le texte entre <![CDATA[ et ]]>.
<?xml version="1.0"?>
<annuaire>
    <societe>
        <nom><![CDATA[Garage Dupond & Fils]]></nom>
        <description><![CDATA[Distance du centre ville < 2 km]]></description>
    </societe>
</annuaire>