TUTORIELS 
Les "espaces de nom" XML
Définir des "espaces de nom" permet d'utiliser au sein d'un même document des objets (éléments, attributs) de même nom, mais de significations différentes. Mode d'emploi.  (16 juillet 2001)
 

Introduction
XML est un langage de structuration de document utilisant des balises (de la même manière qu'HTML est un langage de présentation). La puissance du langage XML réside dans la possibilité de définir ses propres balises (XML est donc un méta-langage), et donc de créer une sémantique appropriée à un certain type de métier ou de relation d'affaires. La définition d'une sémantique est contenue dans une DTD (Document Type Definition), à laquelle se réfèrent les documents XML.

Les espaces de nom (namespaces) permettent de disposer, dans un document XML, de balises provenant de différentes sémantiques (DTD): par exemple des balises HTML, MathML, etc. Il se peut que deux sémantiques fournissent des balises de même nom, mais de significations différentes. Les espaces de nom résolvent ce problème en qualifiant de manière unique un objet (élément ou attribut), caractérisé par un nom et un domaine de définition sur lequel il a telle signification. En pratique, on préfixera l'objet de l'espace de nom correspondant.

Exemple
Les espaces de nom sont identifiés par des URIs (Uniform Resource Identifiers), mais l'on précise pour chacun d'eux un "label" qui servira de préfixe aux balises concernés. Ainsi, on écrira par exemple:

<UnElement xmlns:UnEspaceDeNom="UneURI">

xmlns étant le "mot-clé" XML permettant de définir un espace de nom.
Le champ d'utilisation de notre espace de nom est délimité par les balises d'ouverture et de fermeture de l'élément auquel il est associé (UnElement ici); l'URI (UneURI ici) peut par exemple être:

http://www.w3.org/REC-html40 pour les balises HTML 4.0
http://www.w3.org/REC-MathML pour les balises MathML

quant au préfixe, il n'est pas signifiant (seul l'URI caractérise l'espace de nom) mais commode. Si l'on écrit:

<exemple xmlns:H="http://www.w3.org/REC-html40"
                   xmlns:M="http://www.w3.org/REC-MathML">

    <H:b><M:mn>2</M:mn></H:b>

</exemple>

Les balises HTML et MathML sont parfaitement identifiées grâce aux préfixes H et M qui renvoient aux URI correspondantes. Remarquons que notre élément "exemple" doit avoir été défini au préalable et correspondre à une DTD. On peut ainsi écrire:

<exemple xmlns="UneURI"
                   xmlns:H="http://www.w3.org/REC-html40"
                   xmlns:M="http://www.w3.org/REC-MathML">


L'intérêt des espaces de nom est particulièrement notable dans le cas où il y a "conflit" de signification. Si l'on fait appel à une DTD contenant des balises nommées B, et que l'on inclut dans le même document XML du code HTML utilisant la balise B, il faudra définir un espace de nom (par exemple xmlns:H="http://www.w3.org/REC-html40) qui permettra de lever l'ambiguité (la balise <b> étant sémantiquement distincte de la balise <H:b> dans notre exemple).

Les applications e-business tirent également profit des espaces de nom, et notamment les portails: les espaces de nom leur permettent en effet d'identifier la source des données présentées, mais également, si besoin est, de disposer (via les balises spécifiques) des outils d'affichage, par exemple, propres à la source des données.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page