Les espaces de noms permettent d'identifier des groupes d'éléments par l'intermédiaire d'un URI (Uniform resource Identifier) arbitraire dans un document XHTML.

Il est souhaitable, avant d'aborder ce cours, de prendre connaissance des instructions XML relatives à la déclaration d'espace de noms dans une Définition de Type de Document.

  1. Les espaces de noms XML
<html>
  <body>
  <div>
      <espace_de_noms:element 
                 xmlns:espace_de_noms="http://uri.identifiant.com/">
        Contenu...
      </espace_de_noms:element>
  </div>
  </body>
</html>

La création d'un espace de noms personnelle commence par la conception d'un module spécifique que le développeur fabriquera lui-même.

Ce module devra spécifier un nom public éventuel et un URI (Uniform Resource Identifier) indiquant son emplacement. L'exemple ci-dessous donne un aperçu d'un entête possible de module.

<!--                           Module personnel des noms qualifiés                              -->
<!--                         Fichier : espace_de_noms-qname-1.mode                           -->
<!-- 
   PUBLIC "-//AUTEUR//ELEMENTS XHTML Espace_de_noms Qnames 1.0//EN"
   SYSTEM "http://uri.identifiant.com/dtD/espace_de_noms-qname-1.mod"

   xmlns:espace_de_noms="http://uri.identifiant.com/xmlns/espace_de_noms"
-->

La déclaration d'un espace de noms dans une Définition de Type de Document (DTD) commence par cette formule citée ci-dessous.

<!ENTITY % NS.prefixed "IGNORE"> <!ENTITY % Espace_de_noms.prefixed "%NS.prefixed;">

L'entité paramètre NS.prefixed est déclaré dans le module des noms qualifiés (xhtml-qname-1.mod).

A partir, de l'entité contenant l'espace de noms, il devient possible de lui affecter maintenant son URI d'identification par une nouvelle formule.

<!ENTITY % Espace_de_noms.xmlns "http://uri.identifiant.com/">

Ensuite, il faut définir une autre entité contenant le préfixe par défaut utilisable dans le document XHTML, comme suit :

<ENTITY % Espace_de_noms "espace_de_noms">

La déclaration du préfixe dans le module hôte s'effectue de la manière suivante :

<![%Espace_de_noms.prefixed; [
   <!ENTITY % Espace_de_noms.pfx 
                 "%Espace_de_noms.prefix;:">
]]>
<!ENTITY % Espace_de_noms.pfx "">

Une autre étape consite à déclarer l'attribut d'espace de noms XML pour le module hôte.

<![%Espace_de_noms.prefixed; [
   <!ENTITY % Espace_de_noms.xmlns.extra.attrib
                  "%xmlns:%Espace_de_noms.prefix; 
                  %URI.datatype; #FIXED 
                  '%Espace_de_noms.xmlns;'">
]]>
<!ENTITY % Espace_de_noms.xmlns.extra.attrib "">

Maintenant, il faut encore déclarer l'espace de noms supplémentaire dans les spécifications XHTML par l'intermédiaire de l'entité paramètre %XHTML.xmlns.extra.attrib définie dans le module des noms qualifiés (xhtml-qname-1.mod).

<!ENTITY % XHTML.xmlns.extra.attrib
                %Espace_de_noms.xmlns.extra.attrib;>

Enfin, la dernière étape consiste à affecter l'espace de noms aux noms qualifiés des éléments devant en dépendre.

<!ENTITY % Espace_de_noms.nom_element.qname
                 "%Espace_de_noms.pfx;nom_element">

Les préfixes spéciaux utilisés dans cette définition d'espace de noms, .prefixed, .prefix, et .pfx sont déclarés dans le module des noms qualifiés (xhtml-qname-1.mod).

Le module, ainsi créé, pourra être appelé dans une DTD par l'intermédiaire de la commande suivante :

   <!ENTITY % Espace_de_noms-qname.mod SYSTEM 
                                  "espace_de_noms-qname-1.mod">

   %Espace_de_noms-qname.mod;

ou

   <!ENTITY % Espace_de_noms-qname.mod PUBLIC
             "-//AUTEUR//ELEMENTS XHTML Espace_de_noms Qnames 1.0//EN"
             "http://uri_identifiant.com/dtD/espace_de_noms-qname-1.mod">

   %Espace_de_noms-qname.mod;