Généralités sur les Espaces de Noms
Dans leur forme générale, les Espaces de Noms (Namespaces) permettent d'éviter les doubles-sens de certains éléments XML portant le même nom mais ayant des significations différentes. En d'autres termes, les Espaces de Noms permettent de différencier des éléments et des attributs provenant de vocabulaires différents avec des significations différentes et pouvant être amenés à partager le même nom.
Les Espaces de Noms sont fréquemment utilisés en XML; Soit pour faire référence à un langage défini par
le développeur pour des besoins métiers, soit pour faire référence à une spécification (ou langage)
faisant partie de la nébuleuse XML comme c'est le cas, par exemple, avec XSLT ou XLink.
La forme syntaxique d'une référence à un espace de noms est la suivante :
<element xmlns:nom_espacenoms="URI décrivant l'espace de noms">
Pour référencer un élément ou un attribut appartenant à un espace de nom particulier la syntaxe est la suivante :
<nom_espacenom:nom_element nom_espacenom:nom_attribut="val_attribut">
...
</nomespacenom:nom_element>
Pour utiliser un espace noms référencé, il faut préfixer les éléments et les attributs qui en sont issus par
le nom de l'espace de noms suivi de deux points ( : ).
Pour imager l'utilisation des Namespaces dans le cadre d'une définition de nouveaux langages inhérents à un besoin métier, je vous propose l'exemple suivant.
Imaginons, dans mon modèle de librairie XML, que nous ayons nommé l'élément correspondant à l'auteur du livre
<nom></nom> et que nous décidions d'ajouter un nouvel élément qui concernerait le traducteur du livre (si celui-ci n'a pas été rédigé dans la langue de Molière) et que nous le nommions également
<nom></nom>. Il deviendrait, bien évidemment, difficile de faire la différence entre nos deux éléments
<nom></nom>. C'est là qu'interviennent les Espaces de Noms.
Exemple 10
| ex-10.xml |  |  | |
|
<?xml version="1.0" encoding="iso-8859-1"?> <librairie xmlns:auteur="http://www.asp-php.net/auteur" xmlns:traducteur="http://www.asp-php.net/traducteur" > <livre> <titre>Formation à... XML</titre> <auteur:nom>Michael J. YOUNG</auteur:nom> <traducteur:nom>James GUERIN</traducteur:nom> <editeur>Microsoft Press</editeur> </livre> </librairie> |
Il est tout à fait possible, dans un même élément, de faire référence à plusieurs espaces de noms.
L'URI de l'espace peut être fictive.
Un exemple plus complet et valide, intégrant une DTD…
Exemple 11
| ex-11.xml |  |  | |
|
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE librairie [ <!ELEMENT librairie (livre+)> <!ATTLIST librairie xmlns:auteur CDATA #FIXED "http://www.asp-php.net/auteur"> <!ATTLIST librairie xmlns:traducteur CDATA #FIXED "http://www.asp-php.net/traducteur"> <!ELEMENT livre (titre, auteur:nom, traducteur:nom, editeur)> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur:nom (#PCDATA)> <!ELEMENT traducteur:nom (#PCDATA)> <!ELEMENT editeur (#PCDATA)> ]> <librairie xmlns:auteur="http://www.asp-php.net/auteur" xmlns:traducteur="http://www.asp-php.net/traducteur"> <livre> <titre>Formation à... XML</titre> <auteur:nom>Michael J. YOUNG</auteur:nom> <traducteur:nom>James GUERIN</traducteur:nom> <editeur>Microsoft Press</editeur> </livre> </librairie> |