Le XML est un langage de structuration des données.
Le XML permet de créer des langages dont l'intérêt principale est de favoriser l'interopérabilité des systèmes (elle est de moi cette phrase, ça en jette). Cette compréhension entre 2 systèmes est rendu possible grâce à la DTD (mais on y reviendra plus tard). En fait le XML c'est super cool, il a d'ailleurs donné naissance à d'autres langages/formats que vous connaissez surement :
Il est issu de la norme SGML 1)
La structure d'un document XML est une arborescence de Noeuds. Cette arbre de données est constitué de 2 types de noeuds :
On appel les éléments les balises qui structurent le document XML
<?xml version="1.0" encoding="utf-8"?>
<tronc>
<branche>Une branche</branche>
<branche>Une autre branche</branche>
<branche>
<brindille>Une brindille</brindille>
<brindille />
</branche>
</tronc>
Dans cet exemple, notre document XML est constitué de nœuds tronc (Ce Nœud étant le premier, on parle aussi de racine du document).
On trouve des nœuds branche.
Les nœuds branche peuvent contenir des nœuds texte ou des nœuds brindille, etc…
Pour les éléments il existe 2 types de nœud : Les nœuds qui vont contenir des nœuds, et les nœuds vides.
Facile à repérer, il est constitué d'une balise ouvrante <noeud>, ensuite on trouve du contenu (texte ou nœud), et enfin la balise fermante </noeud>.
Les noeuds vides portent bien leurs nom car ils ne contiennent rien, ni noeud, ni texte. Ils sont facile à repérer (Attention si vous débuter, on a tendance à la confondre avec les balises fermantes) :
<noeud> <noeudVide /> <autreNoeudVide /> </noeud>
A quoi peut bien servir un noeud qui ne contient rien ???
Très bonne question qui me permet, tel un tigrou, de rebondir et d'avancer devants vos yeux admiratifs les attributs !
Les attributs servent à dispenser des informations complémentaires sur un noeud, ils se présentent toujours sous cette forme :
<?xml version="1.0" encoding="utf-8"?>
<noeuds attribut="valeur">
<noeud attr="valeur 1" />
<noeud autreAttribut="valeur A" />
<branche type="vieille">
Jeux de mot :P
</branche>
</noeuds>
Comme pour les éléments, le choix de nom des attributs est libre, mais on retrouve les mêmes règles de nommage que pour une balise.
Pour les valeurs, elles doivent toujours être placée entre guillemet (Double ou simple).
Vous pouvez mettre des espaces autour du = mais personnellement je trouve ça moins lisible.
On récapitule !
<?xml version="1.0" encoding="utf-8"?> <!-- pas bien ! Pas d'espace dans le nom d'un élément --> <noeuds mon attribut="valeur"> <!-- Pas bien ! La valeur est toujours entre guillemet --> <noeud attr=valeur /> </noeuds>
Le texte c'est du texte brut. Très simple vous vous dites… Ça serait trop facile. Pour bien comprendre le pourquoi du comment, nous allons supposer que vous venez de découvrir XML, et que vous avez décidé de vous lancer dans la rédaction d'un tutoriel sur le XML en XML… A un moment dans votre document, vous avez très envie de proposer une extrait de code :
<?xml version="1.0" encoding="utf-8"?>
<cours>
<titre>XML ça déchire</titre>
<texte>Le XML, en fait c'est tout plein de noeuds qui s'emboitent : </texte>
<exemple>
<?xml version="1.0" encoding="utf-8"?>
<tronc>
<branche>Une branche</branche>
<branche>Une autre branche</branche>
<branche>
<brindille>Une brindille</brindille>
</branche>
</tronc>
</exemple>
</cours>
Je pense que vous avez saisi le problème, le contenu de la balise <exemple> doit être affiché comme du texte et pas comme du XML… Pour résoudre ce casse-tête, vous avez le choix entre :
Votre première rencontre avec les entités. Pour l'instant elles ne sont pas très méchantes. Dans notre cas nous allons utiliser les entités prédéfinis pour afficher comme du texte les caractères réservés : Les chevrons qui encadrent les éléments, les & qui vont justement permettre d'utiliser les entités.
Voici une petite liste des entités prédéfinis :
| entité | Caractère affiché |
|---|---|
| < | < |
| > | > |
| & | & |
| " | " |
Après il suffit de remplacer dans notre exemple les caractères réservés par leurs entités respective pour voir notre problème d’évaporer comme un permis à point
Ce qui donne :
<?xml version="1.0" encoding="utf-8"?>
<cours>
<titre>XML ça déchire</titre>
<texte>Le XML, en fait c'est tout plein de noeuds qui s'emboitent : </texte>
<exemple>
<?xml version="1.0" encoding="utf-8"?>
<tronc>
<branche>Une branche</branche>
<branche>Une autre branche</branche>
<branche>
<brindille>Une brindille</brindille>
</branche>
</tronc>
</exemple>
</cours>
Facile non ? Quoi, pas pratique… En effet, c'est grave pas pratique ! Dans certains cas de figure (le notre colle bien), une autre solution existe, les CDATA ! Le principe d'un marqueur CDATA c'est d'indiquer à l'interpréteur XML que "A partir d'ici t'interprète plus !". Ça évite d'avoir à reconditionner une séquence de texte :
<?xml version="1.0" encoding="utf-8"?>
<cours>
<titre>XML ça déchire</titre>
<texte>Le XML, en fait c'est tout plein de noeuds qui s'emboitent : </texte>
<exemple><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<tronc>
<branche>Une branche</branche>
<branche>Une autre branche</branche>
<branche>
<brindille>Une brindille</brindille>
</branche>
</tronc>]]></exemple>
</cours>
Mais c'est quoi ce noeud bizare ?! En haut du document ?!
Rien n'échappe à votre oeil Derrickien ! Depuis le début nous créons des documents XML à tour de bras, mais il subsiste un noeud mystère caché tout en haut des document, le fameux :
<?xml version="1.0" encoding="utf-8"?>
Et bien ça n'est pas un noeud, c'est ce qu'on appelle la déclaration XML, elle contient plein d'information excitantes dont l'intépréteur a besoin pour savoir que ce qui suit, et bien c'est du XML. Cette déclaration contient au moins l'information de version version=1.0, et très souvent elle précise l'encodage du fichier encoding="utf-8" ou encore (malheureusement) encoding="iso-8859-1".
TODO