Link Search Menu Expand Document

Les espaces de noms

Comme vous le constatez, cette cinquième partie est une annexe. Son objectif est multiple, à savoir revenir sur des notions qui reviennent régulièrement dans le cours et proposer quelques chapitres “bonus” pour aller toujours plus loin dans la manipulation de vos documents XML.

Le premier chapitre de cette annexe revient sur la notion d’espace de noms, notion fortement utilisé en XML et dans les différentes technologies abordées au cours de ce tutoriel comme par exemple les Schémas XML ou encore les transformations XSLT.

Définition

Définition d’un espace de noms

Lorsque l’on écrit un document XML, on utilise ce que l’on appelle un vocabulaire. Par exemple, dans les différents TP, nous avons travaillé avec des répertoires téléphoniques dans lesquels chaque personne possède :

  • Une identité (un nom et un prénom).
  • Une adresse.
  • Des numéros de téléphone.
  • Des adresses e-mail.
  • Etc.

A travers cette description, nous avons défini le vocabulaire d’une personne.

Dans notre cas, ce vocabulaire n’est pas forcément réutilisable en l’état. Pourtant, comme vous vous en êtes certainement aperçu, en informatique, on aime bien réutiliser ce que l’on a déjà effectué et ne pas toujours repartir à zéro.

Il existe plusieurs vocabulaires qui ont fait leurs preuves et qui ont été mis à dispositions des développeurs afin qu’ils puissent être réutilisés. Nous y reviendrons un peu plus tard, mais nous pouvons déjà en citer quelques uns.

  • Le vocabulaire permettant de décrire une page xHTML.
  • Le vocabulaire permettant de décrire un Schéma XML.
  • Le vocabulaire permettant de décrire des documents techniques.
  • Etc.

Identifier un espace de noms

Un espace de noms est identifié par une URI (Uniform Resource Identifier) qui permet de l’identifier de manière unique. Bien que l’on distingue 2 types d’URI, à savoir les URL (Uniform Resource Locator) et les URN (Uniform Resource Name), dans la majorité des cas, c’est une URL qui est utilisée.

Pour rappel, une URL permet d’identifier de manière unique une ressource, dans notre cas, un vocabulaire, sur un réseau.

Voyons quelques exemples d’URL permettant d’identifier des vocabulaires et donc des espaces de noms sur le réseau Internet :

Utilisation d’un espace de noms

Les espaces de noms par défaut

La déclaration d’un espace de noms par défaut se fait dans le premier élément qui utilise le vocabulaire, grâce au mot clef xmlns comme XML namespace.

xmlns="mon_uri"

Illustrons alors la déclaration et l’utilisation d’un espace de noms par défaut à travers l’exemple d’un document xHTML :

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Titre du document</title>
  </head>
  <body>
    <p>
      <img src="mon_image.png" alt="ma super image" />
      <br/>
      <a href="mon_lien">Mon super lien !</a>
    </p>
  </body>
</html>

Tous les éléments utilisés dans ce document XML comme <head />, <title />, <body />, etc., font partie du vocabulaire d’une page xHTML. C’est grâce à la déclaration de l’espace de noms dans l’élément <html /> que nous pouvons utiliser les différents éléments du vocabulaire tout en respectant les règles qui régissent leurs imbrications les uns par rapport aux autres.

Les espaces de noms avec préfixe

Utiliser un espace de noms par défaut a certaines limites. En effet, il est par exemple impossible d’utiliser au sein d’un même document deux espaces de noms par défaut qui auraient un mot de vocabulaire en commun. On obtiendrait alors une ambiguïté.

Tout problème a bien évidemment une solution 😉. Ainsi, pour contourner cette limite, nous allons utiliser des préfixes avec nos espaces de noms.

Tout comme pour un espace de noms par défaut, la déclaration d’un espace de noms avec préfixe se fait dans le premier élément qui utilise le vocabulaire, grâce au mot clef xmlns:prefixe.

xmlns:prefixe="mon_uri"

Lorsqu’un espace de noms est déclaré avec un préfixe, tous les éléments qui appartiennent au vocabulaire, et donc à l’espace de noms, doivent être précédés par ce préfixe :

<prefixe:element />

Afin d’illustrer cette nouvelle notion, reprenons la page xHTML que nous avons écrit plus haut et utilisons cette fois-ci un préfixe :

<http:html xmlns:http="http://www.w3.org/1999/xhtml">
  <http:head>
    <http:title>Titre du document</http:title>
  </http:head>
  <http:body>
    <http:p>
      <http:img src="mon_image.png" alt="ma super image" ></http:img>
      <http:br></http:br>
      <http:a href="mon_lien">Mon super lien !</http:a>
    </http:p>
  </http:body>
</http:html>

La portée d’un espace de noms

Pour clore ce chapitre, il me semble intéressant de revenir sur la notion de portée d’un espace de noms. En effet, suivant la façon dont il est déclaré, un espace de noms n’est pas accessible partout dans un document, il n’est donc pas possible d’utiliser tous les mots de vocabulaire partout dans un document XML.

La règle qui régit la portée d’un espace de noms est assez simple : un espace de noms est utilisable tant que l’élément qui le déclare n’est pas refermé.

Une fois de plus, je vous propose d’illustrer cette notion par un exemple :

<!-- il est possible d'utiliser l'espace de noms http -->
<http:html xmlns:http="http://www.w3.org/1999/xhtml">
  <http:head>
    <http:title>Titre du document</http:title>
  </http:head>
  <http:body>
    <http:p>
     <!-- il est possible d'utiliser l'espace de noms ml -->
     <ml:math xmlns:ml="http://www.w3.org/1998/Math/MathML">
       <ml:matrix>
         <ml:matrixrow>
           <ml:cn>0</ml:cn>
           <ml:cn>1</ml:cn>
           <ml:cn>0</ml:cn>
         </ml:matrixrow>
         <ml:matrixrow>
           <ml:cn>0</ml:cn>
           <ml:cn>0</ml:cn>
           <ml:cn>1</ml:cn>
         </ml:matrixrow>
       </ml:matrix>
     </ml:math>
     <!-- il n'est plus possible d'utiliser l'espace de noms ml -->
    </http:p>
  </http:body>
</http:html>
<!-- il n'est plus possible d'utiliser l'espace de noms http -->

Quelques espaces de noms utilisés régulièrement

En conclusion de ce chapitre, je vous propose de revenir sur quelques espaces de noms connus, régulièrement utilisés par les développeurs. Bien évidemment cette liste n’est pas exhaustive, il en existe un très grand nombre !

DocBook

DocBook permet de décrire des documents techniques comme des livres, des articles, etc.

Cet espace de noms est identifié par l’URI http://docbook.org/ns/docbook.

MathML

MathML est une spécification du W3C qui permet d’afficher des éléments mathématiques divers et variés comme des additions, des soustractions, des matrices, etc.

Cet espace de noms est identifié par l’URI http://www.w3.org/1998/Math/MathML.

Schéma XML

Il s’agit d’une spécification du W3C qui permet de décrire des Schémas XML.

Cet espace de noms est identifié par l’URI http://www.w3.org/2001/XMLSchema.

SVG

SVG pour Scalable Vector Graphics est une spécification du W3C qui permet de décrire des images vectorielles.

Cet espace de noms est identifié par l’URI http://www.w3.org/2000/svg.

Il s’agit d’une spécification du W3C permettant de créer des liens entre plusieurs fichiers XML.

Cet espace de noms est identifié par l’URI http://www.w3.org/1999/xlink.

XSLT

XSLT pour eXtensible Stylesheet Language Transformations est une spécification du W3C qui permet de décrire des transformations à appliquer un document XML.

Cet espace de noms est identifié par l’URI http://www.w3.org/1999/XSL/Transform.

En résumé

  • Un espace de noms est identifié de manière unique par une URI.
  • Un espace de noms se déclare dans le premier élément qui utilise son vocabulaire.
  • Un espace de noms se déclare grâce à l’attribut xmlns.

Ce cours vous plait ?

Retrouvez ce cours en livre physique sur Amazon !