Les espaces de noms

Dans XML, les espaces de noms servent à identifier formellement la provenance de chaque élément et, le cas échéant, de chaque attribut. De cette façon, on évite les confusions lors du nommage. S'il arrive que plusieurs éléments portent le même nom, mais ont une signification différente dans un contexte donné, ils seront différenciés grâce à l'espace de noms qui leur est attribué. Le préfixe d'un élément (par exemple xsl: dans <xsl:value-of>) sert d'abréviation à l'espace de noms URI qui lui est attribué et qui est habituellement indiqué dans l'élément racine. Le préfixe est également nécessaire dans les expressions XPath, afin de pouvoir accéder aux éléments dans le bon espace de noms.


L'élément <ns> est nécessaire dans notre exemple, car l'espace de noms "http://www.schematron.info/arche" a été utilisé dans l´instance arche.xml. Lorsque dans un schéma Schematron, des éléments faisant partie de cet espace de noms sont adressés à l'aide de XPath, l'élément <ns> doit être rajouté, afin de définir un préfixe pour cet espace de noms.

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns uri="http://www.schematron.info/arche" prefix="arc"/>        (1)
  <pattern>
    <rule context="arc:animal[@carnivore='oui']">                  (2)
      <report test="parent::*/arc:animal[@carnivore='non']">       (2)
      Il y a un carnivore et un herbivore dans le même
      compartiment. Les animaux ne sont pas une ressource alimentaire!
      </report>
    </rule>
  </pattern>
</schema>
(1) L'élément <ns> assigne un préfixe à l'espace de noms indiqué dans l'attribut uri.
(2) C'est grâce à l'emploi de l'élément <ns> que le préfixe peut être utilisé dans
les expressions XPath. Sans l'élément <ns> aucun préfixe n'est défini.

Remarque pour les spécialistes en matière d' XML et XPath:
En théorie, l'élément <ns> peut toujours être omis. Cependant, lors d'un adressage en dehors de l'espace de noms NULL, cela conduit à une manœuvre compliquée pour éviter l'utilisation de préfixes; par exemple, en interrogeant le nom local par le biais de la fonction local-name(). L'expression *[local-name()='animal'] convient à tous les éléments <animal>, indépendamment de l'espace de noms de l'élément.
Veuillez noter que contrairement à XSLT, Schematron n'offre pas la possibilité de définir un espace de noms par défaut. Ce qui signifie que tous les éléments qui appartiennent à un espace de noms dans l'instance, reçoivent un préfixe lors de l'adressage. Ce préfixe doit être défini par l'élément <ns> pour l'espace de noms correspondant. Si plusieurs espaces de noms apparaissent dans l'instance, le schéma Schematron doit comporter un élément <ns> approprié pour chacun d'entre eux.  

<< précédent suivant >>

 

 

 


Copyright © dpunkt.verlag GmbH 2011
Vous pouvez imprimer cette version en ligne pour un usage privé. Par ailleurs, ce chapitre du livre "Schematron - Effiziente Business Rules für XML-Dokumente" est soumis aux mêmes clauses prévues pour la version papier : L'intégralité de l'oeuvre est protégée par les droits d'auteurs. Tous droits réservés y compris la copie, la traduction, la reproduction sur microfilm, tout comme l'enregistrement et le traitement dans des systèmes électroniques.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, téléphone + 49 (0)6221-14830, fax + 49 (0)6221-148399, hallo(at)dpunkt.de