Si vous n'en avez rien à faire des règles de syntaxe de XML, passez à la section suivante. Sinon, suivez le guide

: je vais vous "apprendre" XML !
Les règles de base
Tout d'abord, sachez que XML ressemble par certains points à XHtml. Normal, XHtml
est du XML

(mais nous y reviendrons plus tard).
En effet, XML est un langage de balisage : une balise commence par le signe < et se termine par >. Il doit toujours y avoir une balise ouvrante et une balise fermante. La balise fermante commence par </, comme ceci :
Code : XML
Une balise peut contenir du texte, d'autres balises, les deux ou rien. Par exemple :
Code : XML | <balise><superbalise>Du texte</superbalise> et encore du texte</balise>
|
Les balises ne doivent pas se chevaucher. Ceci est interdit :
Code : XML | <balise1><balise2>Du texte</balise1></balise2>
|
Lorsqu'il n'y a pas de texte entre deux balises, on peut écrire une forme raccourcie :
Code : XML devient
Code : XML
Les éléments peuvent porter des attributs (trop cool

), délimités par des " ou des ' :
Code : XML | <mabalise attribut1="Salut" attribut2="tout" attribut3="le" attribut4="monde"/>
|
En général, on utilise les guillemets doubles ".
C'est bien beau tout ça, mais si j'ai un attribut nom dedans, je fais comment ? L'apostrophe va tout faire bugger, non ?
Et bien si ! C'est pour ça qu'il existe avec XML cinq entités prédéfinies :
- < remplace <;
- > remplace >;
- ' remplace ';
- " remplace ";
- et & remplace & !
Pour information, lt signifie "lower than" (plus petit que, <) et gt signifie "greater than" (plus grand que, >).
Plus de problème avec O'Neill donc

:
Code : XML | <personne nom='O'Neill' métier="secret défense"/>
<personne nom="O'Neill" métier="secret défense"/>
<personne nom="O'Neill" métier="secret défense"/>
|
Les trois balises sont équivalentes. En fait, on ne doit utiliser les entités prédéfinies que quand il y a ambiguïté. Mais ça ne pose pas de problème de les utiliser quand il n'y a pas d'ambiguïté, et c'est d'ailleurs souvent plus simple de procéder comme ça.
Les documents XML doivent respecter une autre règle : un élément (ou balise) doit contenir tous les autres. On appelle cette élément "élément racine".
Code : XML | <racine>
<balise1>
<balise2>Du texte</balise2>
</balise1>
<balise1>Bla bla bla</balise1>
</racine>
|
Le prologue XML
Un prologue peut être placé au tout début du fichier pour indiquer différentes informations (il est optionnel). Ça ressemble à ça :
Code : XML | <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
|
- On indique d'abord la version de XML qu'on utilise. Vous n'utiliserez que la version 1.0 (sauf si vous avez l'envie subite d'écrire vos balises en chinois traditionnel) ;
- la seconde information est l'encodage du document. L'encodage par défaut de XML est l'UTF-8, mais votre éditeur de texte enregistre probablement vos fichiers en iso-8859-1. Regardez dans ses options pour en être sûrs ;
- la dernière information sert à indiquer si le fichier XML est susceptible de recevoir une DTD externe (no) ou non (yes).
Les instructions de traitement
Les instructions de traitement, ou
processing-instruction en anglais (PI), s'adressent à un langage-cible qui se sert des informations fournies pour faire une action... quelconque !
La syntaxe est la suivante :
Code : XML | <?langage-cible instructions?>
|
Attention : malgré les apparences, le prologue XML n'est pas une PI !
Prenons pour exemple la PI
xml-stylesheet qui permet de lier une feuille de style à un document XML :
Code : XML | <?xml-stylesheet type="text/css" href="print.css" title="Imprimer un couleur" media="print" charset="iso-8859-1" alternate="yes"
|
Ça vous rappelle quelque chose, non

?
Attention, encore une fois malgré les apparences,
type, href, title, etc ne sont pas des attributs ! Quand on vous dit qu'il ne faut pas se fier aux apparences.
Certains d'entre vous connaissent sans le savoir une autre PI : il s'agit de
<?php instructions?>.
C'est pour cela qu'il faut écrire :
Code : PHP
Les sections CDATA
Voici une facette un peu méconnue de XML : la section CDATA. Une section CDATA sert à s'affranchir de l'échappement des caractères spéciaux XML (cf les cinq entitées). Bref, plus besoin d'utiliser les entités. L'exemple suivant (en XHtml) n'est pas très élégant :
Code : XML | <p>Hier j'ai écrit un fichier XML de ouf !</p>
<p><monfichierXML>
<balise1>
<balise2>Du texte</balise2>
</balise1>
<balise1 truc="pouf" paf="pif"/>
</monfichierXML></p>
|
tandis qu'avec une section CDATA, plus aucun problème :
Code : XML | <p>Hier j'ai écrit un fichier XML de ouf !</p>
<p><![CDATA[<monfichierXML>
<balise1>
<balise2>Du texte</balise2>
</balise1>
<balise1 truc="pouf" paf="pif"/>
</monfichierXML>]]></p>
|
Le code entre
<![CDATA[ et
]]> n'est pas interprété, c'est-à-dire qu'il est considéré comme du texte, pas comme du XML. La chaîne de caractères
"]]>" est interdite dans une section CDATA (logique, puisque cette séquence de caractères indique la fin d'une section CDATA). Une section CDATA ne peut donc pas contenir de section CDATA (mais qui aurait une idée aussi tordue

? ).
Les commentaires
Comme dans tous les langages de programmation, il est possible d'inclure des commentaires dans le code source. C'est encore une fois très simple :
Code : XML | <!--le commentaire se place ici-->
|
La seule chose à retenir est que la séquence "--" est
interdite dans un commentaire. Mais croyez moi, il ne servent pas à grand chose !
Voilà, vous connaissez XML ! C'est pas sorcier, hein

?
Si toutes ces règles sont respectées, on dit que le document XML est bien formé (
well-formed, en anglais). S'il n'est pas bien formé, c'est une erreur et le document XML est inutilisable.