Namespace
Principe
Un namespace (ou espace de noms en français) est une mécanique qui permet d'assurer l'unicité des noms des éléments utilisés au sein des fichiers XML, dans l'objectif de pouvoir « mélanger » différents schémas.
Soit un extrait de schéma S1 qui définit un élément de syntaxe en informatique comme contenant du code : ... {element syntaxe {code {...}}}*
Soit un extrait de schéma S2 qui définit un élément de syntaxe en mathématique comme contenant une équation : ... {element syntaxe {equation {...}}}*
Si je souhaite, dans un schéma S3 réutiliser les éléments syntaxe issus de S1 et S2, je rencontre un conflit de noms : en effet, deux éléments portant le même nom, « syntaxe », définissent en fait des éléments différents.
Le namespace va me permettre de différencier ces deux éléments, en associant un nom unique aux schémas S1 et S2, par exemple une adresse web.
Si j'associe www.utc.fr/S1 au premier schéma et www.utc.fr/S2 au second, j'obtiens alors deux noms de balises différents :
www.utc.fr/S1:syntaxe
www.utc.fr/S2:syntaxe
Préfixe
Cette écriture étant quelque peu fastidieuse, il est également possible d'associer un préfixe au namespace. La correspondance entre le namespace et le préfixe est déclarée dans le fichier XML, ce qui permet à un programme informatique de remplacer les préfixes par les namespaces.
Finalement, on obtient :
Préfixe s1 associé au namespace www.utc.fr/S1 et écriture XML s1:syntaxe
Préfixe s2 associé au namespace www.utc.fr/S2 et écriture XML s2:syntaxe
Remarque : Namespace par défaut
Il est possible de définir un namespace par défaut ce qui permet d'avoir un namespace pour chaque balise, sans avoir à utiliser de préfixe.
Syntaxe :
<elementRacine
xmlns:prefixe1="namespace1"
xmlns:prefixe2="namespace2" ...
xmlns:prefixeN="namespaceN"
xmlns="namespaceDesÉlémentsNonPréfixés"
>
Définition : Nom développé
Un nom développé (expanded name) est le couple constitué par un nom d'espace de nommage (namespace name) et par un nom local (local name).