Les Namespace (espace de nommages)

Intérêt des namespaces

Les espaces de noms sont une recommandation W3C depuis janvier 1999. Ils permettent de qualifier de manière unique des éléments et des attributs définis dans un document XML. On peut ainsi savoir à quel domaine de définition se rapporte un objet et comment il doit être interprété.

Il devient alors possible de faire coexister dans un même document des balises de noms identiques mais de signification et/ou de grammaire différente (nous abordons cette notion de grammaire dans la partie DTD).

On peut ainsi effectuer des traitements différents sur une même balise suivant le namespace dont elle dépend; on enlève les confusions possibles sur le nom de balise.
Cette normalisation des noms de balises permet une meilleure interopérabilité des données. Ainsi, avec l'utilisation des namespace, on s'assure que nos données XML pourront être différencier d'autres données XML et ce, quels que soient nos choix de noms de balises.

Utilisation des namespaces

Le fonctionnement des espaces de nom est assez simple : on défini un préfixe au sein même des éléments contenant les préfixes d'espace de noms avec l'attribut "xmlns". En fait, pour plus de clarté on défini généralement le préfixe dans la balise racine du document.
On associe ce préfixe à une URI (qui peut être fictive mais qui représente souvent l'organisme auteur de l'espace de nom).
On fait ensuite précédé chaque élément concerné, de ce préfixe :

<EspaceDeNom:Elément xmlns:EspaceDeNom="URI">donnée</EspaceDeNom:Elément>

N'importe quelle chaîne de caractères (lettres, chiffres et caractères de soulignement), à l'exception des chaînes "xml" et "xmlns", peut servir de préfixe. Le préfixe "xml" est en effet lié, par définition, à l'espace de nommage "http://www.w3.org/XML/1998/namespace". Le préfixe "xmlns", quant à lui, ne s'utilise que pour le rattachement à un espace de nommage mais ne peut pas être rattaché à un nom d'espace de nommage.

Reprenons notre exemple de message. On va y utiliser les espace de noms.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<chacha:message xmlns:chacha='http://etudiant.univ-mlv.fr/~gcharpen/xml/message'>
  <chacha:expediteur>
  <chacha:identite>
  <chacha:prenom>Guillaume</chacha:prenom>
  <chacha:nom>Charpentier</chacha:nom>
  <chacha:email>gcharpen@etudiant.univ-mlv.fr</chacha:email>
  </chacha:identite>
  </chacha:expediteur>
  <chacha:destinataire>
  <chacha:identite>
  <chacha:prenom>Gérard</chacha:prenom>
  <chacha:nom>Dupont</chacha:nom>
  <chacha:email>gerarddupont@provider.com</chacha:email>
  </chacha:identite>
  </chacha:destinataire>
  <chacha:texte>mon message</chacha:texte>
</chacha:message>

L'URI que nous utilisons ici est une URI fictive.

Nous l'avons signalé, on peut faire cohabiter plusieurs espxaces de noms dans un même document. Imaginons donc que l'on insère des données définies par quelqu'un d'autre dans le fichier précédent :

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<chacha:message xmlns:chacha='http://etudiant.univ-mlv.fr/~gcharpen/xml/message' xmlns:autre="http://www.autre.com/namespace">
  <chacha:expediteur>
  <chacha:identite>
  <chacha:prenom>Guillaume</chacha:prenom>
  <chacha:nom>Charpentier</chacha:nom>
  <chacha:email>gcharpen@etudiant.univ-mlv.fr</chacha:email>
  </chacha:identite>
  </chacha:expediteur>
  <chacha:destinataire>
  <chacha:identite>
  <chacha:prenom>Gérard</chacha:prenom>
  <chacha:nom>Dupont</chacha:nom>
  <chacha:email>gerarddupont@provider.com</chacha:email>
  </chacha:identite>
  </chacha:destinataire>
  <chacha:texte>mon message</chacha:texte>
  <autre:titre>titre du texte</autre:titre>
  <autre:texte>ceci est un texte</autre:texte>
</chacha:message>

On constate que les deux vocabulaires cohabitent sans soucis et ce, même si une balise "texte" est présente dans les deux. Elles sont différenciées grâce à leur préfixe.

Les namespaces implicites

Pour plus de simplicité, on peut définir un espace de nommage implicite pour un document. Ainsi, si aucun préfixe n'est défini, c'est lui qui sera utilisé. Pour cela on ne défini pas de préfixe lors de sa déclaration.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<message xmlns='http://etudiant.univ-mlv.fr/~gcharpen/xml/message' xmlns:autre="http://www.autre.com/namespace">
  <expediteur>
  <identite>
  <prenom>Guillaume</prenom>
  <nom>Charpentier</nom>
  <email>gcharpen@etudiant.univ-mlv.fr</email>
  </identite>
  </expediteur>
  <destinataire>
  <identite>
  <prenom>Gérard</prenom>
  <nom>Dupont</nom>
  <email>gerarddupont@provider.com</email>
  </identite>
  </destinataire>
  <texte>mon message</texte>
  <autre:titre>titre du texte</autre:titre>
  <autre:texte>ceci est un texte</autre:texte>
</message>

Cela facilite la lecture du document, surtout si, comme dans notre cas, l'un des vocabulaires est plus utilisé que l'autre.

On voit donc que la syntaxe XML est relativement poussée et permet un grand nombre de possibilités. Néanmoins nous ne pouvons pour le moment que structurer des données. Pour pouvoir être exploiter, ces données doivent être récupérées. Ce sont les analyseurs syntaxiques qui effectuent cette mission. Nous allons maintenant nous y intéresser.

<< Page Précédente
Structure du XML

Plan complet du site

Page Suivante >>
Les analyseurs syntaxiques XML

-- ©
Guillaume Charpentier - Dernière mise à jour de cette page le 27/02/04 0:26 --