PRATIQUE ALGO/METHODES 
Expliquez-moi... Les espaces de noms, pour lever les ambiguïtés
 
Les espaces de noms associent à des contextes les extensions de nommage permises par les langages de nouvelle génération. L'objectif de cette technique : éviter les conflits de noms de classes ou de fonctions. (13/11/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Les espaces de noms, ou namespaces, sont par définition des conteneurs d'éléments (ou "noms"), servant principalement à fournir un contexte, c'est-à-dire distinguer les noms identiques, mais appartenant à un autre contexte - donc logiquement, se trouvant un autre espace de noms.

Il s'agit à l'origine d'un terme lié à la linguistique, mais comme souvent, ce qui s'applique au langage parlé/écrit peut être repris par les langages de programmation, et plus globalement en informatique. En l'occurrence, les espaces de noms peuvent s'appliquer aux langages (C++, Java, C#, Python, etc.), aux formats (XML) et aux systèmes (DNS). Danc chaque cas, l'idée reste de lever les ambiguïtés potentielles.

Les langages de programmation font ainsi un usage extensif des espaces de noms. L'intérêt réside dans le fait d'éviter les collisions de noms : pour les langages disposant de mécanismes d'extensions (bibliothèque et autres), le risque est grand de voir deux ajouts utiliser les mêmes noms de classes ou fonction, rendant la combinaison de deux extensions inenvisageable.

C'est ainsi que la bibliothèque standard de C++ réside au sein de l'espace de noms std, ou encore que le langage Java place toutes ses classes dans des paquetages (packages). Les paquetages fournis en standard commencent avec "java." ou "javax." (comme java.math.BigInteger), et les paquetages tiers doivent utiliser l'URL inversée de leur éditeur (par exemple com.journaldunet.math.BigInteger).

Dans le cas de C#/.Net, la convention de Java sur l'utilisation de l'URL ne s'applique pas, mais il est fortement recommandé de choisir un nom unique, aussi cet usage existe-t-il aussi sur cette plate-forme. Les namespaces de .Net sont appelés des assemblages, et sont disponibles sous forme de fichiers DLL.

Les espaces de noms XML disposent de leur propre spécification, Namespaces in XML 1.0. L'objectif de cette recommandation est de définir la syntaxe de l'instance XML hébergeant les éléments et attributs uniques d'un vocabulaire XML donné. Celle-ci est déclarée au moyen d'un attribut du document nommé xmlns (par exemple, <html xmlns="http://www.w3.org/1999/xhtml" lang="EN" xml:lang="EN">), contenant une URL.

Cette URL n'a pas à contenir de données, mais sert à déclarer l'utilisation d'un espace de noms précis. Si plusieurs espaces de noms sont utilisés dans le document, plusieurs attributs xmlns seront utilisés, chacun ajoutant un mot clef pour définir l'espace utilisé : <html xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:math="http://www.w3.org/1998/Math/MathML" lang="EN" xml:lang="EN">.

DNS, le service de gestion de domaine Internet, repose également sur le principe des espaces de noms. Et de fait, il sert souvent de base aux usages des espaces de noms dans les autres contextes : en effet, un nom de domaine appartient assurément à une seule entité, ce qui limite les ambiguïtés. Les espaces de noms des DNS identifient la structure des domaines qui se combinent pour donner le nom de domaine complet.

Ces espaces de noms se groupent donc en domaines de premier niveau (.com, .net, .fr), domaines secondaires (amazon, ebay, yahoo) qui identifient le plus souvent l'entité elle-même), et les sous-domaines (www, developpeurs, java), qui identifient un service de l'entité. Il reste par ailleurs possible de disposer de ses propres domaines de premier niveau sur un réseau privé...

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page