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
|