Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


xsi:schemaLocation et noNamespaceSchemaLocation.

Quelle est la différence entre xsi:schemaLocation et xsi:noNamespaceSchemaLocation? Quand faut-il utiliser l'un ou l'autre? Faut-il utiliser des chemins relatifs ou absolus pour précise l'emplacement des schémas?

Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
vendredi 17 décembre 2004

Table des matières

xsi:schemaLocation

xsi:noNamespaceSchemaLocation

Mon schéma décrit-il un espace de noms?

Chemins relatifs ou absolus?

Un souhait ou une obligation?

Références

xsi:schemaLocation et xsi:noNamespaceSchemaLocation sont deux attributs de l'espace de noms "http://www.w3.org/2001/XMLSchema-instance" qui permettent de spécifier l'emplacement des schémas W3C XML Schema que l'on souhaite utiliser pour la validation d'un document.

xsi:schemaLocation

xsi:schemaLocation est réservé aux références vers des schémas W3C XML Schema décrivant des espaces de noms et son contenu est une suite de valeurs alternant des URIs d'espaces de noms et les chemins d'accès aux schémas correspondant.

Pour associer le schéma "monSchema.xsd" à l'espace de noms "http://mondomaine.com/mesEspacesDenoms/espaceDeNom", on écrira :

<racine
   xmlns="http://mondomaine.com/mesEspacesDenoms/espaceDeNom" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:SchemaLocation="http://mondomaine.com/mesEspacesDenoms/esp
aceDeNom 
                       monSchema.xsd">
  ...
</racine>

Pour associer le schema http://www.w3.org/1999/XSL/Transform.xsd à l'espace de nom http://www.w3.org/1999/XSL/Transform et le schéma http://www.w3.org/1999/xhtml.xsd à l'espace de noms http://www.w3.org/1999/xhtml on écrira :

<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform"
            xmlns:html="http://www.w3.org/1999/xhtml"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.w3.org/1999/XSL/Transf
orm
                                http://www.w3.org/1999/XSL/Transf
orm.xsd
                                http://www.w3.org/1999/xhtml
                                http://www.w3.org/1999/xhtml.xsd"
>

xsi:noNamespaceSchemaLocation

xsi:noNamespaceSchemaLocation est réservé aux références à des schémas décrivant des vocabulaires sans espaces de noms et sa valeur est constituée du chemin permettant d'accéder au schéma correspondant :

<racine
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="monSchema.xsd">
  ...
</racine>

Mon schéma décrit-il un espace de noms?

Pour voir si un schéma décrit un espace de noms, il suffit de regarder l'attribut "targetNamespace" de l'élément xs:schema.

S'il est présent (et non vide) comme dans ce cas :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:po="http://www.example.com/PO1"
        targetNamespace="http://www.example.com/PO1"
        elementFormDefault="unqualified"
        attributeFormDefault="unqualified">

le schéma décrit un espace de noms et il faut utiliser xsi:schemaLocation dans les instances de documents.

Sinon, comme dans ce cas :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

c'est xsi:noNamespaceSchemaLocation qu'il faut utiliser.

Chemins relatifs ou absolus?

Les chemins relatifs présentent l'avantage d'être plus facilement "déménageables" : si vous déplacez, recopiez votre arborescence ou simplement décidez de la rendre accessible via un autre protocole (http par exemple), vos chemins relatifs continueront à fonctionner alors que les chemins absolus demanderont à être modifiés.

Il faut noter que les chemins absolus à la Windows tels que "c:\documents and settings\Dossier\fichier.xsd" ne sont pas des URIs valides et sont donc théoriquement interdits. Il faut les encoder sous forme d'URIs valides c'est à dire dans ce cas "file:///c:/documents%20and%20settings/Dossier/fichier.xsd".

Un souhait ou une obligation?

En introduction, j'ai dit qu'il s'agissait de spécifier l'"emplacement des schémas W3C XML Schema que l'on souhaite utiliser pour la validation d'un document". Ces attributs ne sont à prendre que comme des indications et ils n'imposent pas aux applications d'utiliser ces schémas ni même de valider le document.

Contrairement aux références aux DTDs (effectuées dans la déclaration "DOCTYPE"), les références aux schémas ne sont qu'indicatives et la recommandation W3C XML Schema spécifie que les applications peuvent utiliser d'autres schémas que ceux qui sont spécifiés dans les documents.

Cette option est utile pour forcer l'utilisation d'un schéma, par exemple quand on reçoit un document et que l'on ne fait pas confiance à l'indication présente dans le document ou que l'emplacement indiqué n'est pas accessible depuis l'environnement de réception ou que l'on souhaite appliquer des contraintes supplémentaires.

Références

Copyright 2004, Eric van der Vlist


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org