Как правильно ссылаться на локальный файл XML-схемы?

У меня возникла проблема со ссылкой на мою XML-схему в XML-файле.

У меня есть мой XSD в этом пути:

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

Но когда в моем XML-файле я пытаюсь найти схему, подобную этой, XSD не найден:

<?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">

Единственный способ найти XSD - это когда он находится в той же папке:

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

Таким образом, вопрос заключается в следующем: как должен выглядеть путь, чтобы XSD был найден, если файл XML не находился в той же папке, что и файл XSD?

Кстати, пример, который я использовал, был из MSDN: они утверждают, что он должен работать так, как я пытался. Но это не так.

4 ответа

Решение

Добавьте еще одну косую черту после file:// в значении xsi:schemaLocation, (У вас есть два; вам нужно три. Подумайте protocol://host/path где protocol является 'file' а также host здесь пусто, получая три косых черты подряд.) Вы также можете устранить двойные косые черты вдоль path, Я считаю, что двойная косая черта помогает с файловыми системами, которые допускают пробелы в именах файлов и каталогов, но вы мудро избежали этого усложнения в именовании путей.

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

До сих пор не работает? Я предлагаю вам тщательно скопировать полную спецификацию файла для XSD в адресную строку Chrome или Firefox:

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

Если XSD не отображается в браузере, удалите все, кроме последнего компонента пути (email.xsd), и посмотрите, не удается ли отобразить родительский каталог. Продолжайте в том же духе, поднимаясь по структуре каталогов, пока не обнаружите, где путь отличается от реальности вашей локальной файловой системы.

Если XSD отображается в браузере, укажите, какой XML-процессор вы используете, и будьте готовы услышать, что он сломан или вам нужно обойти некоторые ограничения. Я могу сказать вам, что вышеупомянутое исправление будет работать с моим валидатором на основе Xerces-J.

Может быть, может помочь проверить, что путь к файлу xsd не содержит "странных" символов, таких как "é" или похожих: у меня возникла та же проблема, но когда я перешел на путь без "é", ошибка исчезла.

Я думаю, вы можете использовать это:

      xsi:noNamespaceSchemaLocation="relativePATH/file.xsd"

Если вы работаете в MS Visual Studio, просто сделайте следующее

  1. Поместите файл WSDL и файл XSD в одну папку.
  2. Исправьте файл WSDL, например, YourSchemeFile.xsd

  3. Используйте Visual Studio на этом замечательном примере. Как создать ссылку на службу только с помощью физического файла WSDL.

Обратите внимание, что вы должны указать путь к файлу WSDL вручную. Там нет никакого способа использовать диалоговое окно Открыть файл там.

Другие вопросы по тегам