XML (eXtensible Markup Language) est un langage de balisage extensible permettant de structurer des données de manière hiérarchique et lisible par les humains comme par les machines. Contrairement à HTML qui définit l'apparence du contenu, XML se concentre exclusivement sur la structure sémantique des données.
XML est utilisé dans de nombreux contextes : fichiers de configuration, échange de données entre systèmes, stockage de documents structurés, services web (SOAP), formats de fichiers (DOCX, SVG, RSS), et bien sûr comme format de base pour les bases de données XML.
Un document XML se compose de plusieurs parties distinctes, chacune ayant un rôle précis :
Le prologue est la première ligne du document. Il est optionnel mais fortement recommandé. Il définit la version XML et l'encodage des caractères utilisé.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
| Attribut | Valeurs | Description |
|---|---|---|
version | "1.0" ou "1.1" | Version XML (1.0 est la plus courante) |
encoding | "UTF-8", "ISO-8859-1", etc. | Encodage des caractères (UTF-8 recommandé) |
standalone | "yes" ou "no" | Indique si le document dépend de ressources externes (DTD) |
Après le prologue vient le corps du document, qui contient un élément racine unique englobant tous les autres éléments.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Commentaire : ceci est un catalogue de livres -->
<bibliotheque nom="Ma Bibliothèque" version="2.0">
<livre isbn="978-2-07-036822-8" disponible="true">
<titre>Le Petit Prince</titre>
<auteur nationalite="FR">
<prenom>Antoine</prenom>
<nom>de Saint-Exupéry</nom>
</auteur>
<annee>1943</annee>
<prix devise="EUR">7.90</prix>
<resume>Un pilote échoué dans le désert rencontre un petit prince...</resume>
</livre>
<livre isbn="978-2-07-040850-4" disponible="false">
<titre>1984</titre>
<auteur nationalite="UK">
<prenom>George</prenom>
<nom>Orwell</nom>
</auteur>
<annee>1949</annee>
<prix devise="EUR">8.50</prix>
</livre>
</bibliotheque>
Un document XML est dit bien-formé s'il respecte les règles syntaxiques de base du langage XML. Un document mal formé sera rejeté par tout parseur XML.
Tout document XML doit avoir un seul et unique élément racine qui englobe tous les autres éléments.
<!-- CORRECT -->
<racine>
<element1/>
<element2/>
</racine>
<!-- INCORRECT -->
<element1/>
<element2/>
Chaque balise ouvrante doit avoir sa balise fermante correspondante, ou être auto-fermante.
<!-- CORRECT -->
<element>contenu</element>
<vide/>
<!-- INCORRECT -->
<element>contenu
<br>
Les éléments doivent être correctement imbriqués sans chevauchement.
<!-- CORRECT -->
<a><b>texte</b></a>
<!-- INCORRECT -->
<a><b>texte</a></b>
XML est sensible à la casse : les balises ouvrantes et fermantes doivent correspondre exactement.
<!-- CORRECT -->
<Element>texte</Element>
<!-- INCORRECT -->
<Element>texte</element>
Les valeurs d'attributs doivent toujours être entre guillemets (simples ou doubles).
<!-- CORRECT -->
<element attr="valeur"/>
<element attr='valeur'/>
<!-- INCORRECT -->
<element attr=valeur/>
Certains caractères réservés doivent être échappés avec des entités.
<!-- Les 5 entités prédéfinies -->
< → <
> → >
& → &
' → '
" → "
Les noms d'éléments et d'attributs en XML doivent respecter des règles précises :
| Règle | Valide | Invalide |
|---|---|---|
| Commence par une lettre ou underscore | <livre>, <_livre> | <1livre>, <-livre> |
| Peut contenir lettres, chiffres, tirets, underscores, points | <livre-2023>, <livre.info> | <livre info> |
| Pas d'espaces | <monElement> | <mon element> |
| Ne commence pas par "xml" (réservé) | <donnees> | <xmlDonnees> |
En XML, les données peuvent être représentées soit comme éléments enfants, soit comme attributs. Le choix dépend de la nature des données.
| Critère | Éléments | Attributs |
|---|---|---|
| Syntaxe | <nom>valeur</nom> | nom="valeur" |
| Contenu | Peut contenir d'autres éléments, texte mixte | Valeur textuelle simple uniquement |
| Multiplicité | Peut apparaître plusieurs fois | Unique par élément |
| Ordre | L'ordre est significatif | L'ordre n'est pas significatif |
| Usage typique | Données principales, contenu | Métadonnées, identifiants, options |
<!-- Version avec éléments -->
<personne>
<nom>Dupont</nom>
<prenom>Jean</prenom>
<age>30</age>
</personne>
<!-- Version avec attributs -->
<personne nom="Dupont" prenom="Jean" age="30"/>
<!-- Version mixte (recommandée) -->
<personne id="P001" actif="true">
<nom>Dupont</nom>
<prenom>Jean</prenom>
<age>30</age>
</personne>
XML réserve certains caractères pour sa syntaxe. Pour les inclure dans le contenu, utilisez les entités prédéfinies :
| Caractère | Entité | Description | Obligatoire ? |
|---|---|---|---|
< | < | Inférieur (less than) | Oui dans le contenu |
> | > | Supérieur (greater than) | Non (mais recommandé) |
& | & | Esperluette (ampersand) | Oui |
' | ' | Apostrophe | Oui dans les attributs avec ' Non dans le contenu |
" | " | Guillemet | Oui dans les attributs avec " Non dans le contenu |
<!-- Exemple d'utilisation des entités -->
<condition>prix < 100 && stock > 0</condition>
<!-- Affiche : prix < 100 && stock > 0 -->
<citation auteur="Victor Hugo">Il dit : "C'est bien."</citation>
<!-- Affiche : Il dit : "C'est bien." -->
Pour inclure du texte contenant beaucoup de caractères spéciaux (comme du code), utilisez une section CDATA. Le contenu n'est pas analysé par le parseur XML.
<script><![CDATA[
function compare(a, b) {
if (a < b && b > 0) {
return a & b;
}
}
]]></script>
<![CDATA[]]>]]> à l'intérieurLes espaces de noms permettent d'éviter les conflits de nommage lorsque des éléments de différentes sources sont combinés dans un même document.
<!-- Namespace par défaut -->
<bibliotheque xmlns="http://exemple.org/bibliotheque">
<livre>...</livre>
</bibliotheque>
<!-- Namespace avec préfixe -->
<bib:bibliotheque xmlns:bib="http://exemple.org/bibliotheque">
<bib:livre>...</bib:livre>
</bib:bibliotheque>
<catalogue
xmlns="http://exemple.org/catalogue"
xmlns:livre="http://exemple.org/livre"
xmlns:auteur="http://exemple.org/auteur">
<livre:edition isbn="978-2-123">
<livre:titre>Introduction XML</livre:titre>
<auteur:personne auteur:id="A001">
<auteur:nom>Martin</auteur:nom>
</auteur:personne>
</livre:edition>
</catalogue>
| Critère | Bien-formé | Valide |
|---|---|---|
| Définition | Respecte les règles syntaxiques XML | Respecte une grammaire définie (DTD/XSD) |
| Vérification | Par tout parseur XML | Par un validateur avec DTD/XSD |
| Prérequis | Aucun | Doit être bien-formé + avoir une DTD/XSD |
| Implication | Peut être lu et parsé | Structure et contenu garantis conformes |
<!-- Ceci est un commentaire XML -->
<!--
Les commentaires peuvent
s'étendre sur plusieurs lignes
-->
Règles :
-- (double tiret)--->Les PI permettent de transmettre des informations à l'application qui traite le document.
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<?application-name instruction="valeur"?>
Testez vos connaissances sur les fondamentaux XML.
Q1. Lequel de ces noms d'élément est invalide ?
Q2. Quelle entité représente le caractère & ?
Q3. Un document XML bien-formé est-il nécessairement valide ?
Q4. Quelle syntaxe délimite une section CDATA ?
Q5. Combien d'éléments racine un document XML peut-il avoir ?
Q6. Quel attribut du prologue indique si le document dépend de ressources externes ?