web-dev-qa-db-fra.com

Comment référencer correctement un fichier de schéma XML local?

Je rencontre ce problème avec le référencement de mon schéma XML dans un fichier XML.

J'ai mon XSD dans cette voie:

C:\environment\workspace\maven-ws\ProjectXmlSchema\email.xsd

Mais quand dans mon fichier XML j'essaie de localiser le schéma comme ceci, le XSD n'est pas trouvé:

<?xml version="1.0" encoding="UTF-8" ?>
    <email xmlns="http://www.w3schools.com"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.w3schools.com
                 file://C://environment//workspace//maven-ws//ProjextXmlSchema//email.xsd">

La seule façon de trouver le fichier XSD est de le placer dans le même dossier:

           xsi:schemaLocation="http://www.w3schools.com email.xsd"

La question est donc la suivante: À quoi doit ressembler le chemin pour que le fichier XSD soit trouvé si le fichier XML ne se trouvait pas dans le même dossier que le fichier XSD?

En passant, l'exemple que j'ai utilisé était tiré de MSDN : ils prétendent que cela est censé fonctionner comme je l'ai essayé. Mais ce n'est pas le cas.

45
Arturas M

Ajouter une barre oblique après file:// dans la valeur de xsi:schemaLocation. (Vous en avez deux; vous en avez besoin de trois. Pensez protocol://Host/pathprotocol est 'file' et Host est vide ici, générant trois barres obliques.) Vous pouvez également éliminer les doubles barres obliques le long de path. Je crois que les doubles barres obliques aident avec les systèmes de fichiers qui permettent les espaces dans les noms de fichiers et de répertoires, mais vous avez judicieusement évité cette complication dans la dénomination de votre chemin.

xsi:schemaLocation="http://www.w3schools.com file:///C:/environment/workspace/maven-ws/ProjextXmlSchema/email.xsd"

Vous ne travaillez toujours pas? Je vous suggère de bien vouloir copiez la spécification de fichier complète du XSD dans la barre d'adresse de Chrome ou Firefox:

file:///C:/environment/workspace/maven-ws/ProjextXmlSchema/email.xsd

Si le XSD n'est pas affiché dans le navigateur, supprimez tout sauf le dernier composant du chemin (email.xsd) et voyez si vous ne pouvez pas afficher le parent annuaire. Continuez de cette manière en remontant la structure de répertoires jusqu'à ce que vous découvriez où le chemin diverge de la réalité de votre système de fichiers local.

Si le XSD fait affiché dans le navigateur, indiquez le processeur XML que vous utilisez et soyez prêt à entendre dire qu'il est en panne ou que vous devez contourner certaines limitations. . Je peux vous dire que le correctif ci-dessus fonctionnera avec mon validateur basé sur Xerces-J.

41
kjhughes

Peut-être peut-être utile de vérifier que le chemin du fichier xsd ne contient pas de caractères "étranges" comme "é", ou similaire: je rencontrais le même problème, mais lorsque je suis passé à un chemin sans le "é", l’erreur a disparu.

3
gamoz