Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

📜 XML – Le Guide Ultime

Deep Dive : Syntaxe, Arborescence (DOM), Validation (DTD, XSD), RequĂȘtes (XPath) & Transformation (XSLT).

1 Facile

1. C'est quoi XML ?

eXtensible Markup Language. La différence fondamentale avec HTML. Structure vs Présentation.

Syntax HTML Data
2 Facile

2. Syntaxe (RĂšgles d'Or)

Prolog, Balises (Tags), Attributs, Entités (<), Commentaires, CDATA. Sensible à la casse.

Syntax CDATA
3 Facile

3. Arborescence (DOM)

Le "Modùle Objet". Racine (Root), Parent, Enfant (Child), Frùre (Sibling). Le concept de "NƓud".

DOM Tree
4 Moyen

4. "Bien Formé" vs "Valide"

La distinction critique. "Bien formé" (syntaxe OK) vs "Valide" (respecte un contrat DTD/XSD).

Well-Formed Valid
5 Moyen

5. DTD (Validation "Legacy")

Document Type Definition. L'ancienne grammaire. Syntaxe non-XML, pas de typage.

DTD Validation
6 Avancé

6. XSD (Validation Moderne)

XML Schema Definition. Le standard. Typage fort (integer, date), syntaxe XML.

XSD Schema Data Types
7 Avancé

7. Namespaces (xmlns)

Éviter les collisions de noms. <html:table> vs <furniture:table>. PrĂ©fixes.

Namespaces xmlns
8 Moyen

8. 🔎 XPath (Le "SQL" du XML)

Le langage pour *trouver* des données. /, //, @, []. Syntaxe et exemples.

XPath Query
9 Avancé

9. XSLT (Transformation)

Transformer du XML... en autre chose (HTML, TXT, XML). template, value-of, for-each.

XSLT Transformation
10 Avancé

10. Parsing : SAX vs DOM

Comment lire du XML (Java/Python). DOM (en RAM) vs SAX (en streaming). Performance.

SAX DOM Parsing
11 Moyen

11. Cas d'Usage Réels

API (SOAP), Fichiers de config (pom.xml), Documents (SVG, .docx), Facturation.

SOAP SVG Config
12 Moyen

12. Cheat-Sheet

Syntaxe XPath (contains(), last()), Types XSD (xs:), Entités.

cheat XPath XSD
1. C'est quoi XML ? (Structure vs Présentation)

XML signifie eXtensible Markup Language (Langage de balisage extensible). C'est un langage de balisage, tout comme HTML, mais sa finalité est radicalement différente.

La Différence Fondamentale : HTML vs XML

C'est la chose la plus importante à comprendre pour un débutant.

  • HTML (HyperText Markup Language) : Son but est de dĂ©crire la prĂ©sentation des donnĂ©es. Il dit au navigateur *comment afficher* l'information. Ses balises (<h1>, <p>, <div>) sont prĂ©dĂ©finies.
    Ex: <h1>Titre</h1><p>Ceci est un paragraphe.</p> (Dit "Affiche ceci en gros" et "Affiche ceci comme un paragraphe").

  • XML (eXtensible Markup Language) : Son but est de dĂ©crire la structure et la signification des donnĂ©es. Il n'a aucune idĂ©e de *comment afficher* l'information. Ses balises sont inventĂ©es par vous (extensibles).
    Ex: <personne><nom>Dupont</nom><email>jean.dupont@mail.com</email></personne> (Dit "Ceci est une personne", "Ceci est son nom", "Ceci est son email").
Pourquoi XML ? (Les 3 Piliers)
PilierDescription
Auto-descriptifLe fichier contient non seulement la donnée ("Dupont"), but aussi sa signification ("nom"). C'est lisible par un humain.
PortableC'est un format texte standard (W3C). N'importe quel systÚme (Mainframe, Linux, Windows, Java, Python) peut lire et écrire du XML. C'est le format d'échange universel "legacy".
Verbeux (Verbose)C'est son principal défaut (comparé au JSON). Les balises ouvrantes et fermantes prennent beaucoup de place.
<nom>Dupont</nom> (XML) vs "nom": "Dupont" (JSON).
2. Syntaxe (Les 7 RĂšgles d'Or)

Un fichier XML qui respecte ces rÚgles est dit "Bien Formé" (Well-Formed). S'il manque une seule de ces rÚgles, un parseur (lecteur) plantera avec une erreur.

  1. Le Prologue (Optionnel, mais recommandé)
    Toujours la premiÚre ligne. Il définit la version XML et l'encodage (crucial pour les accents).
    <?xml version="1.0" encoding="UTF-8"?>
  2. Un ÉlĂ©ment Racine (Root) Unique
    Un document XML doit avoir une et une seule balise qui englobe toutes les autres. C'est "l'ancĂȘtre" de l'arbre.
    Exemple : <bibliotheque> ... (tous les livres ici) ... </bibliotheque>
  3. Toutes les Balises doivent ĂȘtre FermĂ©es
    Contrairement au HTML (oĂč <br> est OK), chaque balise XML doit ĂȘtre fermĂ©e.
    - Soit avec une balise fermante : <nom>Dupont</nom>
    - Soit en s'auto-fermant (pour les balises vides) : <image source="logo.png" /> (notez le />)
  4. Sensible Ă  la Casse (Case-Sensitive)
    <Nom> n'est PAS la mĂȘme chose que <nom>. <nom>Dupont</Nom> est une erreur.
  5. Imbrication Correcte (Nesting)
    Les balises doivent ĂȘtre fermĂ©es dans l'ordre inverse de leur ouverture.
    - Correct : <b><i>Texte</i></b>
    - Incorrect : <b><i>Texte</b></i> (Erreur "d'chevauchement")
  6. Les Attributs doivent avoir des Guillemets
    Toujours. Simples (') ou doubles (").
    - Correct : <personne id="123">
    - Incorrect : <personne id=123>
  7. CaractÚres Spéciaux (Entités) & CDATA
    Si votre texte contient < ou &, le parseur va croire que c'est une nouvelle balise.
    - Entités : Il faut les "échapper".
    < devient &lt; (less than)
    > devient &gt; (greater than)
    & devient &amp; (ampersand)
    " devient &quot;
    ' devient &apos;
    - CDATA : Si vous avez un gros bloc de code (JavaScript, SQL) à insérer, utilisez une section "CDATA" ("Character Data"). Le parseur ignorera tout ce qui est à l'intérieur.
    <script>
      <![CDATA[
        if (a < b && b > 5) {
          console.log("OK");
        }
      ]]>
    </script>
3. Arborescence (Le DOM)

Un document XML est fondamentalement un arbre généalogique. C'est sa structure hiérarchique. Quand un programme (Java, Python) lit un XML, il le charge en mémoire sous forme d'objet appelé le DOM (Document Object Model), qui *représente* cet arbre.

Exemple de XML
<?xml version="1.0" encoding="UTF-8"?>
<bibliotheque>
  <!-- Premier livre -->
  <livre categorie="Roman">
    <titre>Les Misérables</titre>
    <auteur>Victor Hugo</auteur>
  </livre>
  <livre categorie="Science">
    <titre>Une brĂšve histoire du temps</titre>
    <auteur>Stephen Hawking</auteur>
  </livre>
</bibliotheque>
Terminologie de l'Arbre (DOM)

En se basant sur l'exemple ci-dessus :

TermeExempleDescription
NƓud (Node)Tout.Terme gĂ©nĂ©rique pour *tout* ce qui compose l'arbre (Ă©lĂ©ment, attribut, texte, commentaire...).
Racine (Root)<bibliotheque>L'Ă©lĂ©ment unique de niveau 0. L'ancĂȘtre de tous les autres.
Parent<livre>Un nƓud qui en contient d'autres. <livre> est le parent de <titre>.
Enfant (Child)<titre> et <auteur>Les nƓuds directement sous un parent.
FrĂšre (Sibling)Les deux <livre>NƓuds qui partagent le mĂȘme parent.
Descendant<titre>N'importe quel nƓud en dessous d'un autre. <titre> est un descendant de <bibliotheque>.
Attributcategorie="Roman"Une propriĂ©tĂ© d'un nƓud Ă©lĂ©ment. (Note : En DOM, ce n'est *pas* un enfant).
NƓud Texte"Victor Hugo"La valeur textuelle d'un Ă©lĂ©ment. C'est un nƓud Ă  part entiĂšre, enfant de <auteur>.
Commentaire<!-- ... -->Un nƓud de type commentaire, ignorĂ© par le traitement (sauf si on le demande).
4. "Bien Formé" vs "Valide" (La Distinction CRITIQUE)

C'est le concept le plus confus pour les débutants, mais le plus important pour travailler en entreprise.

1. Bien Formé (Well-Formed)

Un document XML est "bien formé" s'il respecte les rÚgles de syntaxe (voir Modale 2).
C'est-à-dire : une seule racine, balises fermées, sensible à la casse, guillemets aux attributs, etc.

Analogie : C'est une phrase grammaticalement correcte.
Ex: "Le chat mange la souris." (Grammaire OK).
Ex (Non "bien formé"): "Chat le souris mange." (Le parseur syntaxique (votre cerveau) plante).

Un parseur XML plantera toujours si le fichier n'est pas "bien formé".

2. Valide (Valid)

Un document XML est "valide" s'il est bien formé ET s'il respecte les rÚgles métier définies dans un "contrat" externe.
Ce "contrat" est un fichier DTD (ancien) ou XSD (moderne).

Analogie : C'est une phrase grammaticalement correcte ET qui respecte le formulaire que vous remplissez.
Le formulaire (le XSD) dit : "Le champ 'Nom' est obligatoire", "Le champ 'Âge' doit ĂȘtre un nombre".
- Phrase : "Mon nom est Jean" (Grammaire OK, donc "bien formé").
- Validation : Le formulaire (XSD) dit que le champ "Âge" est obligatoire. Votre phrase ne le contient pas.
- Résultat : Votre document est Bien Formé, mais Non Valide.

Exemple Concret
<personne id="1">
  <nom>Dupont</nom>
  <email>jean@mail.com</email>
</personne>
<personne id="2">
  <nom>Durand</nom>
  <age>30</age> </personne>
<personne id=3> <nom>Martin
</personne> 
5. DTD (Document Type Definition)

La DTD est "l'ancĂȘtre" de la validation. C'est la premiĂšre façon qui a existĂ© pour dĂ©finir le "contrat" (la grammaire) d'un fichier XML.

Point clé : La syntaxe d'une DTD n'est PAS du XML. C'est un format propriétaire (hérité de SGML).

Liaison (Comment lier un XML Ă  une DTD)

La liaison se fait via une balise <!DOCTYPE ...> juste aprĂšs le prologue.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bibliotheque SYSTEM "biblio.dtd">
<bibliotheque>
  ...
</bibliotheque>
Exemple de Syntaxe (fichier biblio.dtd)
<!-- Définit l'élément "bibliotheque" :
     Il doit contenir UN OU PLUSIEURS (+) "livre" -->
<!ELEMENT bibliotheque (livre+)>

<!-- Définit l'élément "livre" :
     Il doit contenir "titre" PUIS "auteur", dans cet ordre.
     "resume" est optionnel (?) -->
<!ELEMENT livre (titre, auteur, resume?)>

<!-- Définit les éléments "titre", "auteur", "resume" :
     Ils contiennent du texte analysable (#PCDATA) -->
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT resume (#PCDATA)>

<!-- Définit les attributs de "livre" :
     "categorie" est du texte (CDATA) et est REQUIS (#REQUIRED)
     "annee" est du texte (CDATA) et est OPTIONNEL (#IMPLIED) -->
<!ATTLIST livre
    categorie CDATA #REQUIRED
    annee     CDATA #IMPLIED
>
Limites (Pourquoi on utilise XSD maintenant)
  • Pas de Typage de DonnĂ©es : Tout est du texte (CDATA ou #PCDATA). annee="abc" est valide pour la DTD, car elle ne peut pas forcer un "nombre". C'est le plus gros problĂšme.
  • Syntaxe Non-XML : Vous devez apprendre un langage diffĂ©rent (le <!ELEMENT ...>) et les outils XML (parseurs, XPath) ne peuvent pas lire la DTD.
  • Pas de Namespaces : Ne gĂšre pas les namespaces (voir Modale 7).
6. XSD (XML Schema Definition) - Le Standard Moderne

Le XSD (aussi appelé "XML Schema") est le successeur moderne et surpuissant de la DTD. Il résout toutes ses limitations.

Les Avantages du XSD
  • C'est du XML : Un fichier .xsd est lui-mĂȘme un fichier XML. On peut le lire, le valider, et le requĂȘter (XPath) avec les outils standards.
  • Typage de DonnĂ©es Fort : C'est sa plus grande force. Il supporte xs:string, xs:integer, xs:decimal, xs:date, xs:boolean, etc. Vous pouvez forcer annee Ă  ĂȘtre un nombre.
  • Restrictions (Patterns) : Vous pouvez dĂ©finir des rĂšgles complexes (ex: "ce string doit matcher ce Regex", "ce nombre doit ĂȘtre entre 18 et 65").
  • Support des Namespaces : GĂšre parfaitement les espaces de noms.
Liaison (Comment lier un XML Ă  un XSD)
<?xml version="1.0" encoding="UTF-8"?>
<bibliotheque xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="biblio.xsd">
  ...
</bibliotheque>
Exemple de Syntaxe (fichier biblio.xsd)

C'est plus verbeux que la DTD, mais 1000x plus puissant.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- 1. Définir l'élément racine "bibliotheque" -->
  <xs:element name="bibliotheque">
    <xs:complexType>
      <xs:sequence>
        <!-- 2. Il contient des "livre", de 1 (minOccurs) Ă  plusieurs (unbounded) -->
        <xs:element name="livre" type="LivreType" minOccurs="1" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- 3. Définir un type réutilisable "LivreType" (comme une "classe") -->
  <xs:complexType name="LivreType">
    <!-- 4. Dans un ordre fixe (sequence) -->
    <xs:sequence>
      <xs:element name="titre" type="xs:string" />
      <xs:element name="auteur" type="xs:string" />
      <xs:element name="resume" type="xs:string" minOccurs="0" /> <!-- Optionnel -->
    </xs:sequence>
    
    <!-- 5. Définir les attributs -->
    <xs:attribute name="categorie" type="xs:string" use="required" />
    
    <!-- 6. Typage fort + Restriction ! -->
    <xs:attribute name="annee" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:integer">
          <xs:minInclusive value="1400" /> <!-- Doit ĂȘtre >= 1400 -->
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

</xs:schema>
7. Namespaces (Éviter les Collisions)

Le ProblÚme : L'XML est "extensible", n'importe qui peut inventer des balises. Que se passe-t-il si j'inclus (j'importe) deux fichiers XML dans un seul document, et que les deux définissent une balise <table> ?

  • Le premier <table> vient du HTML, et signifie "tableau d'affichage".
  • Le second <table> vient d'un XML de mobilier, et signifie "meuble Ă  4 pieds".

Le parseur est perdu. C'est une collision de noms.

La Solution : Les Namespaces (Espaces de Noms)

Un namespace est un identifiant unique (une URI, qui ressemble Ă  une URL mais n'a pas besoin de pointer vers un site web) qui donne un "contexte" Ă  vos balises.

On l'utilise avec un préfixe (ex: html:) que l'on déclare avec l'attribut xmlns (XML NameSpace).

Exemple de Syntaxe
<?xml version="1.0" encoding="UTF-8"?>
<!-- 1. Déclaration des préfixes sur l'élément racine -->
<rapport xmlns:h="http://www.w3.org/1999/xhtml"
         xmlns:f="http://www.example.com/mobilier/schema">

  <description>Mon rapport de stock.</description>

  <!-- 2. Utilisation : Ce 'table' est différent... -->
  <h:table>
    <h:tr>
      <h:td>Cellule HTML</h:td>
    <h:tr>
  </h:table>

  <!-- 3. ...de ce 'table'. -->
  <f:table>
    <f:pieds>4</f:pieds>
    <f:materiau>ChĂȘne</f:materiau>
  </f:table>

</rapport>

Désormais, le parseur sait que <h:table> et <f:table> sont deux concepts totalement différents. Il n'y a plus d'ambiguïté.

Namespace par Défaut

Si on omet le préfixe (xmlns="..." au lieu de xmlns:f="..."), ce namespace s'applique à l'élément et à tous ses enfants qui n'ont pas de préfixe. C'est trÚs courant dans les XSD.

8. 🔎 XPath (Le "SQL" du XML)

XPath signifie XML Path Language. C'est un langage de requĂȘtes pour naviguer dans l'arbre DOM (Modale 3) et sĂ©lectionner des nƓuds.

Pensez-y comme aux adresses de fichiers sur votre PC (C:/Dossier/Fichier.txt), mais pour XML.

Syntaxe de Base (Les Sélecteurs)
SélecteurDescription
/Part de la racine. (Chemin absolu).
//SĂ©lectionne les nƓuds n'importe oĂč dans le document (chemin relatif).
.Le nƓud courant.
..Le nƓud parent.
@Sélectionne un attribut.
*Joker (wildcard). Sélectionne n'importe quel élément.
Exemples (basés sur notre XML de bibliothÚque)
<bibliotheque>
  <livre categorie="Roman" annee="1862">
    <titre>Les Misérables</titre>
    <auteur>Victor Hugo</auteur>
  </livre>
  <livre categorie="Science" annee="1988">
    <titre>Une brĂšve histoire du temps</titre>
    <auteur>Stephen Hawking</auteur>
  </livre>
</bibliotheque>

RequĂȘtes XPath et leurs rĂ©sultats :

  • /bibliotheque/livre
    Résultat : Sélectionne les deux éléments <livre> (enfants directs de la racine).
  • //livre
    RĂ©sultat : SĂ©lectionne les deux Ă©lĂ©ments <livre> (oĂč qu'ils soient).
  • //livre/titre
    Résultat : Sélectionne les deux éléments <titre>.
  • //livre[1]
    Résultat : Sélectionne le *premier* <livre> (celui de Victor Hugo).
  • //livre[last()]
    Résultat : Sélectionne le *dernier* <livre> (celui de Stephen Hawking).
  • //livre/titre/text()
    RĂ©sultat : SĂ©lectionne les nƓuds texte : "Les MisĂ©rables" et "Une brĂšve histoire du temps".
  • //@categorie
    Résultat : Sélectionne les deux attributs categorie ("Roman", "Science").
  • //livre[@categorie="Science"]
    Résultat : Sélectionne le <livre> de Stephen Hawking (filtre sur attribut).
  • //livre[auteur="Victor Hugo"]
    Résultat : Sélectionne le <livre> des Misérables (filtre sur texte d'un enfant).
  • //livre[@annee > 1900]
    Résultat : Sélectionne le <livre> de Stephen Hawking (XPath peut comparer des nombres !).
  • //livre[contains(titre, "histoire")]
    Résultat : Sélectionne le <livre> de Stephen Hawking (utilisation de fonctions).
9. XSLT (eXtensible Stylesheet Language Transformations)

XSLT est un langage (lui-mĂȘme en XML) pour transformer un document XML en... autre chose.
Le cas d'usage le plus courant est XML -> HTML (pour l'afficher dans un navigateur). Mais il peut aussi transformer du XML en XML (restructuration) ou du XML en Texte (CSV).

Il utilise massivement XPath (Modale 8) pour sélectionner les données à transformer.

Exemple : Transformer notre XML de bibliothĂšque en page HTML
1. Fichier d'Entrée (biblio.xml)
<bibliotheque>
  <livre categorie="Roman">
    <titre>Les Misérables</titre>
    <auteur>Victor Hugo</auteur>
  </livre>
  <livre categorie="Science">
    <titre>Une brĂšve histoire du temps</titre>
    <auteur>Stephen Hawking</auteur>
  </livre>
</bibliotheque>
2. Fichier de Transformation (style.xsl)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" /> <!-- On veut générer du HTML -->

  <!-- RÚgle n°1 : Quand tu rencontres la racine (match="/"), fais ceci : -->
  <xsl:template match="/">
    <html>
      <body>
        <h1>Ma BibliothĂšque</h1>
        <table border="1">
          <tr><th>Titre</th><th>Auteur</th><th>Catégorie</th></tr>
          <!-- Applique maintenant les templates pour tous les 'livre' -->
          <xsl:apply-templates select="//livre" />
        </table>
      </body>
    </html>
  </xsl:template>
  
  <!-- RÚgle n°2 : Quand tu rencontres un "livre" (match="livre"), fais ceci : -->
  <xsl:template match="livre">
    <tr>
      <!-- Prend la valeur (value-of) du 'titre' enfant -->
      <td><xsl:value-of select="titre" /></td>
      <td><xsl:value-of select="auteur" /></td>
      <!-- Prend la valeur de l'attribut 'categorie' -->
      <td><xsl:value-of select="@categorie" /></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
3. Fichier de Sortie (Résultat)
<html>
  <body>
    <h1>Ma BibliothĂšque</h1>
    <table border="1">
      <tr><th>Titre</th><th>Auteur</th><th>Catégorie</th></tr>
      <tr>
        <td>Les Misérables</td>
        <td>Victor Hugo</td>
        <td>Roman</td>
      </tr>
      <tr>
        <td>Une brĂšve histoire du temps</td>
        <td>Stephen Hawking</td>
        <td>Science</td>
      </tr>
    </table>
  </body>
</html>
10. Parsing : DOM vs SAX (Le dilemme de la performance)

Le "Parsing" est l'acte, pour un programme (Java, Python, C#), de lire un fichier XML. Il existe deux philosophies radicalement opposées pour le faire.

1. DOM (Document Object Model) Parser

Comment il fonctionne : Le parseur lit l'intégralité du fichier XML, du début à la fin, et construit l'arbre hiérarchique (Modale 3) entiÚrement en mémoire RAM.
Il ne vous donne la main que lorsque l'arbre *entier* est chargé.

AvantagesInconvénients
Navigation Facile : Une fois chargĂ©, vous pouvez aller partout (getParent(), getFirstChild(), getSiblings()). Vous pouvez mĂȘme modifier l'arbre en RAM.Consommation MĂ©moire (RAM) : C'est le "tueur". Si votre fichier XML fait 2 Go, votre programme aura besoin d'au moins 2 Go de RAM (souvent plus). Il plantera (OutOfMemoryError) sur des fichiers volumineux.
XPath Natif : Les requĂȘtes XPath fonctionnent parfaitement car tout l'arbre est connu.Lent au dĂ©marrage : Il ne se passe rien tant que le fichier *entier* n'est pas lu.

Cas d'usage : Petits fichiers de configuration (pom.xml, web.xml), petits fichiers de données (< 10 Mo).

2. SAX (Simple API for XML) Parser

Comment il fonctionne : C'est un parseur "événementiel" (streaming). Il lit le fichier XML ligne par ligne (ou plutÎt, balise par balise) et ne stocke rien en mémoire.
Il vous "appelle" (via des callbacks) Ă  chaque fois qu'il rencontre quelque chose :
1. startDocument() : "OK, je commence."
2. startElement() : "HĂ©, je viens de trouver une balise ouvrante <livre>."
3. characters() : "Hé, j'ai trouvé du texte : 'Victor Hugo'."
4. endElement() : "HĂ©, je viens de trouver une balise fermante </livre>."
5. endDocument() : "OK, j'ai fini."

AvantagesInconvénients
Consommation Mémoire (RAM) : Quasi-nulle. Peut parser des fichiers de plusieurs Téraoctets sans transpirer.Complexité de Programmation : C'est à *vous* de gérer l'état (ex: "Attends, si je vois du texte 'Victor Hugo', est-ce que je suis bien dans une balise <auteur> ?").
Instantané : Le traitement commence dÚs la premiÚre ligne, pas besoin d'attendre.Navigation Impossible : Vous ne pouvez pas "revenir en arriÚre" (getParent()). L'information est perdue dÚs qu'elle est lue.

Cas d'usage : Fichiers de logs trÚs volumineux, flux de données (streaming), import/export de masse (ex: Talend utilise SAX en interne).

11. Cas d'Usage RĂ©els (OĂč est l'XML en 2025 ?)

Le JSON a gagné la guerre des "API web légÚres", mais l'XML reste le pilier indétrÎnable de l'informatique d'entreprise "sérieuse" et des formats de documents.

DomaineCas d'UsageDescription
API d'EntrepriseSOAP (Simple Object Access Protocol)L'ancĂȘtre de REST/JSON. Toutes les API "legacy" (banques, assurances, tĂ©lĂ©coms) tournent sur SOAP. La requĂȘte et la rĂ©ponse sont des enveloppes XML (<soap:Envelope>) validĂ©es par des XSD.
Configuration Logiciellepom.xml (Maven), web.xml (Java Tomcat), .csproj (C#), log4j.xml (Logging)Quasiment tout l'écosystÚme Java et .NET est configuré via XML. C'est idéal car c'est structuré, validable (XSD) et on peut y mettre des commentaires.
Documents & BureautiqueOOXML (.docx, .xlsx) et ODF (.odt)Un fichier Word .docx n'est qu'un fichier .zip. Renommez-le et ouvrez-le : vous y trouverez des dizaines de fichiers XML (document.xml, styles.xml...).
Graphisme VectorielSVG (Scalable Vector Graphics)Une image SVG (logo, icÎne) n'est pas une grille de pixels (comme .png). C'est un fichier XML qui *décrit* des instructions de dessin ("trace un cercle ici", "écrit ce texte là").
Échange de DonnĂ©es (EDI)Factur-X, E-procurementLes formats standardisĂ©s pour l'Ă©change de factures, bons de commande, etc., entre entreprises (EDI) sont trĂšs souvent basĂ©s sur des grammaires XML (XSD) strictes.
12. Cheat-Sheet (XPath & XSD)
XPath (Sélecteurs & Filtres)
// ---- SĂ©lection de NƓuds ----
/racine/element     // Chemin absolu
//element          // N'importe oĂč
.                  // NƓud courant
..                 // NƓud parent
@attribut          // Sélectionne un attribut
* // Joker (tout élément)

// ---- Prédicats (Filtres) [ ... ] ----
//livre[1]             // Le premier
//livre[last()]        // Le dernier
//livre[position() > 1] // Tous sauf le premier

// ---- Filtres sur Attributs ----
//livre[@cat="Roman"]
//livre[@annee > 2000]
//livre[@cat or @annee] // A 'cat' OU 'annee'

// ---- Filtres sur Texte Enfant ----
//livre[auteur="Victor Hugo"]
//livre[prix > 10]

// ---- Fonctions ----
//livre[contains(titre, "Histoire")]
//livre[starts-with(titre, "Les")]
count(//livre)       // Compte le nombre de livres
string-length(titre) // Longueur du texte
not(@cat)            // N'a pas d'attribut 'cat'

// ---- Opérateurs ----
|                  // Union (ex: //titre | //auteur)
XSD (Types & Quantificateurs)

Types de Données (xs:)

TypeExemple
xs:string"Du texte"
xs:integer"123" (Pas de décimale)
xs:decimal"123.45"
xs:boolean"true", "false", "1", "0"
xs:date"2025-12-31" (AAAA-MM-JJ)
xs:dateTime"2025-12-31T13:30:00"
xs:IDUn ID unique (type string)
xs:IDREFUne réf. à un xs:ID (clé étrangÚre)

Quantificateurs (minOccurs / maxOccurs)
(Par défaut : minOccurs="1", maxOccurs="1")

  • Requis, unique : (DĂ©faut)
    <xs:element name="nom" ... />
  • Optionnel :
    <xs:element name="email" ... minOccurs="0" />
  • Un ou plusieurs :
    <xs:element name="enfant" ... maxOccurs="unbounded" />
  • ZĂ©ro ou plusieurs :
    <xs:element name="enfant" ... minOccurs="0" maxOccurs="unbounded" />

Indicateurs (Conteneurs)

  • <xs:sequence> : Les enfants doivent apparaĂźtre dans cet ordre.
  • <xs:all> : Les enfants peuvent apparaĂźtre dans n'importe quel ordre.
  • <xs:choice> : Un seul des enfants listĂ©s doit ĂȘtre prĂ©sent.