5. Espaces de nom

L'importation d'éléments externes dans un document n'est pas sans conséquence.

Lorsque nous avons dans un même document XML, des éléments qui sont au même niveau, qui portent le même nom et qui sont différents du point de vue sémantique, il y a conflit de noms. 

Ces conflits peuvent être évités en utilisant les espaces de nom. Les espaces de nom sont un moyen d'identifier de façon universelle les noms d'élément utilisés dans un document. 

Les espaces de nom peuvent définis par défaut ou avec des préfixes.

La déclaration d'un espace de nom par défaut se fait avec l'attribut: 

xmlns="URI de l'espace de noms"

Exemple: 

<?xml version="1.0" encoding="UTF-8" ?>

<dossier>

      <!-- la dénomination suivante désigne un étudiant -->        

      <dénomination xmlns="http://uadb.edu.sn/etudiants">

                  Abdou Gaye

      </dénomination>

      <!-- la dénomination suivante désigne un diplôme -->

      <dénomination xmlns="http://uadb.edu.sn/diplomes">

                  Mastère

      </dénomination>

      <!-- la dénomination suivante désigne une matière -->

      <dénomination xmlns="http://uadb.edu.sn/matieres">

                  Informatique

      </dénomination>

</dossier>

La déclaration d'un espace par préfixe se fait en utilisant la notation suivante:

xmlns:préfixe="URI de l'espace de noms"

Exemple:

<base xmlns:liv="monSite/dtdLivre.xml">

      <!-- Ici les livres sont définis avec un  espace de nom préfixé-->

      <liv:livre>

                  <liv:titre>Une si longue lettre</liv:titre>

                  <liv:auteur>Mariama BA</liv:auteur>

                  <liv:editeur> Nouvelles éditions africaines</liv:editeur>

                  <liv:annee>1979</liv:annee>

      <liv:livre>      

      …

      <!-- Ici, les livres sont définis en local-->

      <livre>

                  <titre>Une vie de boy</titre>

                  <auteur>Ferdinand Leopold OYONO</auteur>

                  <editeur> Éditions R. Julliard</editeur>

                  <annee>1956</annee>

      </livre>

      …

</base>