1. Introduction à XML

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.

Définition XML est un méta-langage standardisé par le W3C qui permet de créer ses propres balises personnalisées pour décrire des données de manière auto-documentée, portable et indépendante de toute plateforme ou technologie.

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.

Structure arborescente d'un document XML
Structure arborescente d'un document XML : chaque élément peut contenir des éléments enfants

1.1 Structure d'un Document XML

Un document XML se compose de plusieurs parties distinctes, chacune ayant un rôle précis :

Le Prologue XML

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"?>
AttributValeursDescription
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)
Attention Le prologue doit être tout au début du fichier, sans espace ni ligne vide avant. Si vous utilisez un BOM (Byte Order Mark), il doit précéder le prologue.

Le Corps du Document

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>

1.2 Règles d'un Document Bien-Formé

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.

1. Élément Racine Unique

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/>
2. Balises Correctement Fermées

Chaque balise ouvrante doit avoir sa balise fermante correspondante, ou être auto-fermante.

<!-- CORRECT -->
<element>contenu</element>
<vide/>

<!-- INCORRECT -->
<element>contenu
<br>
3. Imbrication Correcte

Les éléments doivent être correctement imbriqués sans chevauchement.

<!-- CORRECT -->
<a><b>texte</b></a>

<!-- INCORRECT -->
<a><b>texte</a></b>
4. Sensibilité à la Casse

XML est sensible à la casse : les balises ouvrantes et fermantes doivent correspondre exactement.

<!-- CORRECT -->
<Element>texte</Element>

<!-- INCORRECT -->
<Element>texte</element>
5. Valeurs d'Attributs entre Guillemets

Les valeurs d'attributs doivent toujours être entre guillemets (simples ou doubles).

<!-- CORRECT -->
<element attr="valeur"/>
<element attr='valeur'/>

<!-- INCORRECT -->
<element attr=valeur/>
6. Caractères Spéciaux Échappés

Certains caractères réservés doivent être échappés avec des entités.

<!-- Les 5 entités prédéfinies -->
&lt;   → <
&gt;   → >
&amp;  → &
&apos; → '
&quot; → "

1.3 Règles de Nommage des Éléments

Les noms d'éléments et d'attributs en XML doivent respecter des règles précises :

RègleValideInvalide
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>
Point Examen Un nom d'élément valide peut commencer par une lettre ou un underscore (_), mais jamais par un chiffre ou un caractère spécial. Le préfixe "xml" est réservé quelle que soit la casse (xml, XML, Xml...).

1.4 Éléments vs Attributs

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émentsAttributs
Syntaxe<nom>valeur</nom>nom="valeur"
ContenuPeut contenir d'autres éléments, texte mixteValeur textuelle simple uniquement
MultiplicitéPeut apparaître plusieurs foisUnique par élément
OrdreL'ordre est significatifL'ordre n'est pas significatif
Usage typiqueDonnées principales, contenuMétadonnées, identifiants, options

Exemple Comparatif

<!-- 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>
Bonnes Pratiques

1.5 Entités Prédéfinies et Sections CDATA

Les 5 Entités Prédéfinies

XML réserve certains caractères pour sa syntaxe. Pour les inclure dans le contenu, utilisez les entités prédéfinies :

CaractèreEntitéDescriptionObligatoire ?
<&lt;Inférieur (less than)Oui dans le contenu
>&gt;Supérieur (greater than)Non (mais recommandé)
&&amp;Esperluette (ampersand)Oui
'&apos;ApostropheOui dans les attributs avec '
Non dans le contenu
"&quot;GuillemetOui dans les attributs avec "
Non dans le contenu
<!-- Exemple d'utilisation des entités -->
<condition>prix &lt; 100 &amp;&amp; stock &gt; 0</condition>
<!-- Affiche : prix < 100 && stock > 0 -->

<citation auteur="Victor Hugo">Il dit : &quot;C&apos;est bien.&quot;</citation>
<!-- Affiche : Il dit : "C'est bien." -->

Sections CDATA

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>
Point Examen Une section CDATA :

1.6 Espaces de Noms (Namespaces)

Les 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.

Déclaration d'un Namespace

<!-- 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>

Combinaison de Namespaces

<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>
Important L'URI du namespace n'a pas besoin d'être une URL valide ou accessible. C'est simplement un identifiant unique, par convention sous forme d'URI.

1.7 Document Bien-Formé vs Document Valide

Hiérarchie de Conformité XML
Document XML

Bien-formé : respecte la syntaxe XML

Valide : conforme à une DTD ou XSD
CritèreBien-forméValide
DéfinitionRespecte les règles syntaxiques XMLRespecte une grammaire définie (DTD/XSD)
VérificationPar tout parseur XMLPar un validateur avec DTD/XSD
PrérequisAucunDoit être bien-formé + avoir une DTD/XSD
ImplicationPeut être lu et parséStructure et contenu garantis conformes
Point Examen Crucial Un document peut être bien-formé sans être valide (pas de DTD/XSD associée ou non conforme). Mais un document ne peut pas être valide sans être bien-formé : la validité implique la bonne formation.

1.8 Commentaires et Instructions de Traitement

Commentaires XML

<!-- Ceci est un commentaire XML -->
<!-- 
    Les commentaires peuvent
    s'étendre sur plusieurs lignes
-->

Règles :

Instructions de Traitement (Processing Instructions)

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"?>

Quiz - Module 1 : XML

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 ?