đ XML â Le Guide Ultime
Deep Dive : Syntaxe, Arborescence (DOM), Validation (DTD, XSD), RequĂȘtes (XPath) & Transformation (XSLT).
1. C'est quoi XML ?
eXtensible Markup Language. La différence fondamentale avec HTML. Structure vs Présentation.
Syntax HTML Data2. Syntaxe (RĂšgles d'Or)
Prolog, Balises (Tags), Attributs, Entités (<), Commentaires, CDATA. Sensible à la casse.
3. Arborescence (DOM)
Le "ModĂšle Objet". Racine (Root), Parent, Enfant (Child), FrĂšre (Sibling). Le concept de "NĆud".
DOM Tree4. "Bien Formé" vs "Valide"
La distinction critique. "Bien formé" (syntaxe OK) vs "Valide" (respecte un contrat DTD/XSD).
Well-Formed Valid5. DTD (Validation "Legacy")
Document Type Definition. L'ancienne grammaire. Syntaxe non-XML, pas de typage.
DTD Validation6. XSD (Validation Moderne)
XML Schema Definition. Le standard. Typage fort (integer, date), syntaxe XML.
7. Namespaces (xmlns)
Ăviter les collisions de noms. <html:table> vs <furniture:table>. PrĂ©fixes.
8. đ XPath (Le "SQL" du XML)
Le langage pour *trouver* des données. /, //, @, []. Syntaxe et exemples.
9. XSLT (Transformation)
Transformer du XML... en autre chose (HTML, TXT, XML). template, value-of, for-each.
10. Parsing : SAX vs DOM
Comment lire du XML (Java/Python). DOM (en RAM) vs SAX (en streaming). Performance.
SAX DOM Parsing11. Cas d'Usage Réels
API (SOAP), Fichiers de config (pom.xml), Documents (SVG, .docx), Facturation.
12. Cheat-Sheet
Syntaxe XPath (contains(), last()), Types XSD (xs:), Entités.
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)
| Pilier | Description |
|---|---|
| Auto-descriptif | Le fichier contient non seulement la donnée ("Dupont"), but aussi sa signification ("nom"). C'est lisible par un humain. |
| Portable | C'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). |
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.
- 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"?> - 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> - 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/>) - Sensible Ă la Casse (Case-Sensitive)
<Nom>n'est PAS la mĂȘme chose que<nom>.<nom>Dupont</Nom>est une erreur. - 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") - Les Attributs doivent avoir des Guillemets
Toujours. Simples (') ou doubles (").
- Correct :<personne id="123">
- Incorrect :<personne id=123> - 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<(less than)>devient>(greater than)&devient&(ampersand)"devient"'devient'
- 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>
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 :
| Terme | Exemple | Description |
|---|---|---|
| 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>. |
| Attribut | categorie="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). |
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>
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 (
CDATAou#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).
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
.xsdest 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 forceranneeĂ ĂȘ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>
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.
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électeur | Description |
|---|---|
/ | 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 attributscategorie("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).
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>
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é.
| Avantages | Inconvé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."
| Avantages | Inconvé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).
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.
| Domaine | Cas d'Usage | Description |
|---|---|---|
| API d'Entreprise | SOAP (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 Logicielle | pom.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 & Bureautique | OOXML (.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 Vectoriel | SVG (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-procurement | Les 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. |
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:)
| Type | Exemple |
|---|---|
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:ID | Un ID unique (type string) |
xs:IDREF | Une 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.
