Espaces de noms XML

Espaces de noms XML


XML cours tutorial

Les espaces de noms XML (namespaces en anglais) sont une des spécifications XML les plus simples mais aussi les plus mal comprises.

Espaces de noms XML   fournissent une méthode pour éviter les conflits de noms d’élément.


Conflits de nom

En XML, noms des éléments sont définis par le développeur. Cela aboutit souvent à un conflit lorsque vous tentez de mélanger des documents XML à partir de différentes applications XML.
Exemple 1 : voici un exemple pour comprendre le problème de conflit de noms
Ce texte XML comporte des informations de la table HTML :

Sélectionner le code

  <table>
    <tr>
      <td>Pommes</td>
      <td>Bananes</td>
    </tr>
  </table>

 

Ce texte XML comporte des informations sur une table (une pièce de mobilier) :

Sélectionner le code

  <table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
  </table>

 

Si ces fragments XML ont été ajoutés ensemble, il y aurait un conflit de nom. Les deux comportent un élément  <table>, mais les éléments ont des sens et contenu différent.
Exemple 2 : un second exemple pour comprendre encor plus ce problème.
Imaginez que nous avons un document XML contenant une liste de livres. Quelque chose comme ceci :

Sélectionner le code

<books>
<book>
<title>Le rouge et le noir</title>
<author>Madame Bovarie</author>
</book>
...
</books>

 

Et Imaginez que nous voulons  combiner le fichier XML ci-dessus avec la page HTML suivante :

Sélectionner le code

<html>
  <head>
    <title>Liste de livres intéressants </title>
  </head>
  <body>
  <h2>Liste de livres...</h2>
  <p>Livre 1 . .. </p>
  .
  .
  .
  (XML content goes here)
 
  </body>
</html>

 

Nous rencontrerons un problème si nous essayons de combiner les documents ci-dessus. C'est parce qu'ils ont tous deux un élément appelé title. L'un est le titre du livre, l'autre est le titre de la page HTML. Nous avons donc un conflit de nom.
Un analyseur XML ne saura pas comment gérer ces différences.
Ce que nous pouvons faire pour empêcher ce conflit de nom est, créer un espace de noms pour le document XML.


Résoudre le conflit de nom à l'aide d'un préfixe

Les conflits de nom XML peuvent facilement être évitées à l'aide d'un préfixe de nom.
Ce fichier XML comporte des informations sur un tableau HTML et une pièce de mobilier :

Sélectionner le code

  <h:table>
    <h:tr>
      <h:td>Pommes</h:td>
      <h:td>Bananes</h:td>
    </h:tr>
  </h:table>
  
  <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>

 

Dans l'exemple ci-dessus, il n'y aura aucun conflit parce que les deux éléments  <table> ont des noms différents.


Espaces de noms XML - le xmlns attribut

Lors de l'utilisation de préfixes en XML, un soi-disant espace de noms pour le préfixe doit être défini.
L'espace de noms est défini par l' attribut xmlns dans la balise de début d'un élément.
La déclaration d'espace de noms a la syntaxe suivante. xmlns :préfixe= "URI".

Sélectionner le code

  <racine>
  
  <h:table xmlns:h="http://www.w3.org/TR/html4/">

    <h:tr>
      <h:td>Pommes</h:td>
      <h:td>Bananes</h:td>
    </h:tr>
  </h:table>
  
  <f:table xmlns:f="http://www.site.com/furniture">
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
  
  </racine>

 

Dans l'exemple ci-dessus, l'attribut xmlns dans la balise <table> donnent les préfixes h: et f: un espace de noms qualifié.
Lorsqu'un espace de noms est défini pour un élément, tous les éléments enfants avec le même préfixe sont associées avec le même espace de noms.
Espaces de noms peuvent être déclarés dans les éléments où ils sont utilisés ou dans l'élément racine XML :

Sélectionner le code

  <racine
  xmlns:h="http://www.w3.org/TR/html4/" mlns:f=" http://www.site.com/furniture">
  
  <h:table>
    <h:tr>
      <h:td>Pommes</h:td>
      <h:td>Bananes</h:td>
    </h:tr>
  </h:table>
  
  <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
  
  </racine>

 

Note : L'espace de noms URI n'est pas utilisée par l'analyseur pour rechercher des informations. Le but est de donner à l'espace de noms un nom unique. Toutefois, souvent les entreprises utilisent l'espace de noms comme un pointeur vers une page web contenant des informations de l'espace de noms.
Essayez d'aller à http://www.w3.org/TR/html4/.


Identificateur de ressource uniforme (URI)

L'Identificateur de ressource uniforme (URI : Uniform Resource Identifier) est une chaîne de caractères qui identifie une ressource Internet.
Le type d’URI  la plus courante est le Uniform Resource Locator (URL) qui identifie une adresse de domaine Internet. Un autre type d'URI, pas tellement répandue est le Nom de ressource universel (URN).


Espaces de noms par défaut

Définir un espace de noms par défaut pour un élément nous sauve de l'utilisation de préfixes dans tous les éléments de l'enfant. Il a la syntaxe suivante :

  xmlns="namespaceURI"

Cette XML comporte des informations de la table HTML :

Sélectionner le code

  <table xmlns="http://www.w3.org/TR/html4/">
    <tr>
      <td>Pommes</td>
      <td>Bananes</td>
    </tr>
  </table>

 

Cette XML comporte des informations sur une pièce de mobilier dans un site par exemple:

Sélectionner le code

  <table xmlns="http://www.site.com/furniture">

    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
  </table>

 

Espaces de noms en usage réel

XSLT est un langage XML qui peut être utilisé pour transformer des documents XML dans d'autres formats, comme le HTML.
Dans le document XSLT ci-dessous, vous pouvez voir que la plupart des balises sont des balises HTML.
Les balises qui ne sont pas des balises HTML ont le préfixe xsl, identifié par l'espace de noms xmlns = "http://www.w3.org/1999/XSL/Transform" :

Sélectionner le code

  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
  <xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
      <tr>
        <th align="left">Title</th>
        <th align="left">Artist</th>
      </tr>
      <xsl:for-each select="catalog/cd">
      <tr>
        <td><xsl:value-of
  select="title"/></td>
        <td><xsl:value-of
  select="artist"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
  </xsl:template>
  
  </xsl:stylesheet>

 

Si vous souhaitez en savoir plus sur XSLT, vous trouverez notre tutoriel XSLT à notre page d'accueil.



Cours precedent:
cours precedent  XPATH operateurs et fonction
    Sommaire de :
Le langage XML
         
Par carabde 10 mai 2014