Exemple 1. Un premier document XML, fichier
marins.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- un premier marin --> <marin id="12"> <nom>Surcouf</nom> <prenom>Robert</prenom> <remarque lang="FR">Capitaine corsaire</remarque> </marin>
<?
et se termine par un
?>
. Elle est facultative, mais on la trouve systématiquement. Les éditeurs de fichiers XML la mettent souvent par défaut. Elle signifie simplement que le XML contenu dans ce fichier correspond à la version 1.0 de la norme W3C, et que le fichier est encodé avec le jeu de caractères UTF-8.
La deuxième ligne est blanche ; à la différence des fichiers HTML ancienne génération. Cette ligne blanche n’a aucun caractère obligatoire.
La troisième ligne est un commentaire. En XML, les commentaires sont écrits entre une séquence de caractères
<!--
et
-->
. Un commentaire peut s'étaler sur plusieurs lignes.
Enfin suit le contenu du document proprement dit. Un document est composé d’éléments. Un élément XML est composé d’une balise ouvrante :
<marin>
, d’un contenu, et d’une balise fermante
</marin>
. Un élément peut ne pas avoir de contenu, auquel cas on peut utiliser une notation contractée :
<marin/>
.
Un élément peut contenir un ou plusieurs sous-éléments, comme c’est le cas sur notre exemple. En revanche, deux éléments ne peuvent pas se chevaucher : il n’est pas légal d’avoir deux balises ouvrantes à la suite, puis la balise fermante de la première balise, suivie de la balise fermante de la deuxième.
La première règle de validité d’un document XML, est qu’il ne doit posséder qu’un seul nœud racine. Dans notre exemple, il ne serait pas possible d’ajouter un deuxième nœud
marin
à la suite du premier. Notre document possèderait alors deux nœuds racine, ce qui est illégal.
Enfin, il est possible de créer des attributs sur un élément. Il n’y a pas de limite au nombre d’attributs que l’on peut mettre dans un élément. Un attribut possède un nom et une valeur. Deux exemples d’attributs sont donnés :
id
pour l’élément
marin
, et
lang
pour l’élément
commentaire
. La valeur d’un attribut est nécessairement rangée entre deux
"
, à la différence du HTML où l’on peut aussi utiliser le
'
.
Comme on le voit, le format d’un fichier XML est une chose très simple, facilement lisible par un humain et compréhensible.
nom
et
prenom
par exemple. Cela peut poser un problème en cas d’échange de documents XML entre deux systèmes différents : que se passera-t-il si un autre système a également défini des éléments
nom
et
prenom
, mais possédant un sens différent, voire des contraintes différentes ? Le problème se pose dans les mêmes termes lorsque l’on crée des classes Java, et est résolu de la même façon. En Java, on range nos éléments et classes dans des espaces de nom, implémentés sous forme de packages. Cette notion existe également en XML.
Un espace de nom en XML est défini par deux choses : une référence, et le nom de cet espace. En général, le nom de cet espace est une URL (en toute rigueur il s’agit d’une URI), et sa référence une simple chaîne de caractères. Reprenons notre exemple précédent en l’écrivant dans l’espace de nom
galilee
.
Exemple 2. Première utilisation d'un espace de nom
<?xml version="1.0" encoding="UTF-8"?> <!-- un premier marin --> <galilee:marin id="12" xmlns:galilee="http://www.galilee.org/cours-xml"> <galilee:nom>Surcouf</galilee:nom> <galilee:prenom>Robert</galilee:prenom> <galilee:remarque lang="FR">Capitaine corsaire</galilee:remarque> </galilee:marin>
xmlns:galilee
, qui prend pour valeur
http://www.galilee.org/cours-xml
. Cette déclaration définit un espace de nom, de valeur «
http://www.galilee.org/cours-xml
», référencé par le préfixe
galilee
.
Ensuite, les éléments de notre document ont été préfixés par
galilee:
, de façon à les attacher à l’espace de noms que l’on vient de définir.
Notons que l’URL qui sert de nom à notre espace peut prêter à confusion : il s’agit juste d’un nom générique, et non pas d’une ressource qui doit être disponible sur l’Internet. Java préconise de prendre des noms de domaine lus à l’envers pour créer des noms de packages, dans le but de garantir leur unicité. Le W3C a fait un peu la même chose : sauf qu’il préconise de prendre les URL sans les changer. Cela crée toutefois une ambigüité, que nous verrons par la suite.
On peut bien sûr définir et utiliser plusieurs espaces de noms pour un même document, comme nous le verrons dans la suite.
Node
NodeList
Element
Attr
CharacterData
Comment
CDATASection
Text
Entity
EntityReference
ProcessingInstruction
Document
DocumentFragment
DocumentType