Espace de noms

De Guide utilisateur des messages comptables UN/XML

Comme XML est extensible, tout le monde définit ses balises. Mais il y a un risque que deux organisations utilisent la même balise avec des significations différentes.

Principes généraux

Le mécanisme des espaces de nom (namespaces) est une petite extension à XML qui permet d’indiquer clairement le propriétaire de chaque balise. Le principe est simple, il est d’ailleurs directement inspiré des codes Gencod ou des adresses IPs, et parfaitement adaptés à l’environnement du W3C.

Avec les espaces de noms, chaque balise est composé de deux parties :

  • une partie locale, lisible et dont l’unicité ne peut pas être garantie
  • une partie globale, représentés par une URI (URL ou URN) qui identifie l’organisation utilisatrice et est unique dans le monde.

On retrouve bien le principe des codes Gencod où le préfixe du code identifie l’organisation émettrice (garantie unique par son affiliation à Gencod) alors que le suffixe représente un code produit interne (sans garantie d’unicité puisqu’il est propre à l’entreprise). La combinaison des deux est garantie unique. Seule différence pour les espaces de noms, c’est une URI qui garanti l’unicité (en pratique les URIs sont souvent des URLs). La mise en œuvre des espaces de nom s’appuie sur un attribut réservé qui déclare l’espace de nom et lui associe un préfixe pour le document.

Par exemple, on ré-écrira notre exemple dans un espace de nom comme suit :

<m:message xmlns:m="http://psol.com/2011/message">

  Contactez <m:nom><m:prénom>Jean</m:prénom>
 <m:famille>Dupont</m:famille></nom>,
  <m:profession>expert-comptable</m:profession> à <m:lieu>Paris</m:lieu>,
  au <m:téléphone>01 50 50 50 50</m:téléphone>.
</m:message>

Le concept d'espace de nom est simple mais source de beaucoup de confusion. Examinons rapidement les deux erreurs les plus fréquentes :

  • l'URI n’est qu’un identifiant ; il n’a pas besoin de pointer vers une description de l’élément ;
  • le préfixe n’est utilisé que comme raccourci pour l’URI. En effet, les URI sont généralement assez longues et incluent des caractères non valides pour les noms de balise XML.

La notion d'identifiant

Il est essentiel de comprendre que, pour les espaces de noms, les URIs sont des identifiants universels. Pour comprendre cela définissons trois termes :

  • URI : Uniform Resource Identifier
  • URL : Uniform Resource Locator
  • URN : Uniform Resource Name

L'URL est familière, il s'agit de l'adresse d'une ressource : http://www.uncefact.org, par exemple, est l'adresse de la homepage de l'UN/CEFACT. Notons que les URLs peuvent représenter des pages web, des adresses email, des sites FTP, etc.

Les URIs sont une extension des URLs pour gérer des ressources de façon plus large. En pratique une URI est soit une URL (mécanique connue), soit une URN c'est à dire un identifiant unique.

Pour discuter d'une resources on va, en pratique, l'identifier soit par son emplacement ("la boîte sur l'étagère du haut"), soit par sa description ("le produit dont le GENCOD est 3290123456786. Le premier correspond à l'URL, le second à l'URN. Dans un cas comme dans l'autre, on identifie (URI) la ressource. Bien entendu, au quotidien, il y a grosse différence entre avoir l'adresse d'une ressource et son nom… si vous avez déjà perdu vos clés de voiture cette différence saute aux yeux.

Dans le contexte des espaces de nom, le besoin est très limité. Il ne s'agit pas de connaître la liste des balises (c'est le rôle des schémas XML), de trouver l'adresse de l'auteur du vocabulaire (c'est le rôle des commentaires dans le schéma) ou de trouver les logiciels permettant de traiter ce vocabulaire. Il s'agit simplement de pouvoir identifier de façon unique chaque vocabulaire.

Aussi les espaces de noms utilisent des URIs strictement comme identifiant. En pratique, bien que l'URI doit suivre les règles de syntaxe des URIs, elles ne sont jamais traitées comme des adresses. L'URI ne sert que d'identifiant… un nom unique donc. C'est sans doute la principale source de confusion.

En pratique le nom de domaine dans l'URL suffit à garantir l'unicité.

Retour au sommaire