Как правильно ссылаться на локальный файл 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, просто сделайте следующее
- Поместите файл WSDL и файл XSD в одну папку.
Исправьте файл WSDL, например, YourSchemeFile.xsd
Используйте Visual Studio на этом замечательном примере. Как создать ссылку на службу только с помощью физического файла WSDL.
Обратите внимание, что вы должны указать путь к файлу WSDL вручную. Там нет никакого способа использовать диалоговое окно Открыть файл там.