Les espaces de noms (namespace) permettent de regrouper des éléments XML autour d'un nom unique.

Ainsi, des éléments portant un nom identique peuvent faire partie de sources différentes, et partant, doivent pouvoir se combiner lors de fusions, ou doivent pouvoir cohabiter au sein d'un même document, tout en évitant des collisions.

Les éléments appartenant à un espace de noms se distinguent des autres éléments par l'ajout d'un préfixe symbolisant cette singularité.

Les préfixes d'espace de noms se placent au sein d'un marqueur XML, avant le nom de l'élément et séparés par le caractère deux-points (:).

Le préfixe doit être constitué de lettres (a-zA-Z et les caractères accentués), de caractères de soulignement (_), de chiffres (0-9) ou de tout autres caractères autorisés (voir W3C).

<Préfixe:Elément>
   donnée
</Préfixe:Elément>

La balise XML ainsi constituée, possède désormais un nom qualifié (Préfixe:Elément), qui est lui même composé d'un préfixe (Préfixe) et d'un nom local (Elément).

NomQalifié = xsl:stylesheet
Préfixe = xsl
NomLocal = stylesheet

Les espaces de noms peuvent être déclarés dans les éléments contenant les préfixes d'espace de noms ou pour plus de clarté et de commodité dans l'élément racine, par l'intermédiaire de l'attribut xmlns.

<Préfixe:Elément xmlns:Préfixe="URI">
   ...
</Préfixe:Elément>

L'adresse URI (Uniform Resource Identifier) permet d'associer une adresse Internet à l'espace de noms.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

Les espaces de noms multiples permettent d'accueillir au sein d'un élément parent, plusieurs préfixes différents.

Par exemple, les espaces de noms xsl associé à l'URI http://www.w3.org/XSL/Transform/1.0 et html accouplé à l'URI http://www.w3.org/TR/REC-html40, pourraient constituer la structure d'une feuille de style (XSLT) et combiner ainsi deux types de préfixes : xsl et html.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
   <xsl:template match="/">
      <html:p xmlns:html="http://www.w3.org/TR/REC-html40"
                        html:style="color:red">
         </xsl:apply-templates/>
      </html:p>
   </xsl:template>
</xsl:stylesheet>

Dans l'exemple ci-dessus les déclarations xmlns sont placées dans deux éléments différents. Il est également possible de les regrouper dans la balise parente pour un fonctionnement équivalent.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
                      xmlns:html="http://www.w3.org/TR/REC-html40">
   <xsl:template match="/">
      <html:p html:style="color:red">
         </xsl:apply-templates/>
      </html:p>
   </xsl:template>
</xsl:stylesheet>

Un espace de noms implicite évite la répétition du préfixe dans les marqueurs XML tout au long du document. Sauf spécifications contraires, tous les éléments fils appartiendront au même espace de noms par défaut.

<stylesheet xmlns="http://www.w3.org/XSL/Transform/1.0">
   <template match="/">
      ...
   </template>
</stylesheet>

La déclaration de l'attribut de déclaration d'espace de noms (xmlns), dans la Définition de Type de Document (DTD) s'effetue comme suit :

<!ELEMENT Préfixe:Elément Spécifications>
<!ATTLIST Préfixe:Elément 
             xmlns:Préfixe CDATA (#REQUIRED| #IMPLIED | #FIXED "URI")>

<!ELEMENT lal:balise ANY>
<!ATTLIST lal:balise 
             xmlns:lal CDATA #FIXED "http://laltruiste.com">

Les éléments et attributs compris dans un espace de noms doivent être déclarés avec leur nom qualifié.

<!DOCTYPE NomQualifié [
  <!ELEMENT NomQualifié Spécification>
  <!ATTLIST NomQualifiéElement NomQualifiéAttribut Spécification>
]>

Les noms xml et xmlns sont interdits comme espace de noms, tout les deux faisant l'objet d'une utilisation spécifique.

Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE lal:librairie [
  <!ELEMENT lal:auteur (#PCDATA)>
  <!ELEMENT lal:decription (xhtml:p)>
  <!ELEMENT lal:librairie (lal:livre+)>
  <!ATTLIST lal:librairie
        xmlns:lal CDATA #FIXED "http://www.laltruiste.com/">
  <!ELEMENT lal:livre (lal:titre, lal:auteur, lal:decription)>
  <!ATTLIST lal:livre lal:id ID #REQUIRED>
  <!ELEMENT lal:titre (#PCDATA)>
  <!ELEMENT xhtml:p (#PCDATA)>
  <!ATTLIST xhtml:p
        xmlns:xhtml CDATA #FIXED "http://www.w3.org/1999/xhtml">
]>
<lal:librairie xmlns:lal="http://www.laltruiste.com/">
  <lal:livre lal:id="ISBN-2-7460-1969-8">
    <lal:titre>
      XML et XSL
    </lal:titre>
    <lal:auteur>
      Cyril Vincent
    </lal:auteur>
    <lal:decription>
      <xhtml:p xmlns:xhtml="http://www.w3.org/1999/xhtml">
        XML s'est imposé dans la plupart des champs de l'informatique 
        moderne et est un outil de travail difficilement contournable 
        pour les développeurs et les webmasters.
      </xhtml:p>
    </lal:decription>
  </lal:livre>
  <lal:livre lal:id="ISBN-2-84177-353-1">
    <lal:titre>
      XML en concentré
    </lal:titre>
    <lal:auteur>
      Elliotte Rusty Harold
    </lal:auteur>
    <lal:decription>
      <xhtml:p xmlns:xhtml="http://www.w3.org/1999/xhtml">
        XML est devenu un outil essentiel pour la création de sites 
        Web dynamiques (B2C) et l'échange de données entre des 
        systèmes hétérogènes sur Internet.
      </xhtml:p>
    </lal:decription>
  </lal:livre>
  <lal:livre lal:id="ISBN-2-84177-215-2">
    <lal:titre>
      XML Schema
    </lal:titre>
    <lal:auteur>
      Eric Van Der Vlist
    </lal:auteur>
    <lal:decription>
      <xhtml:p xmlns:xhtml="http://www.w3.org/1999/xhtml">
        Parmi les langages de définition de types récemment proposés 
        pour succéder aux DTD, la Recommandation XML Schéma du W3C 
        est certainement la plus utilisée.
      </xhtml:p>
    </lal:decription>
  </lal:livre>
</lal:librairie>
En savoir plus: