"Схема должна начинаться с элемента <schema>в пространстве имен 'http://www.w3.org/2001/XMLSchema'" Ошибка? - PullRequest
1 голос
/ 21 декабря 2009

При попытке отобразить XML-схему в XML-шпионе я получаю следующую ошибку. "Схема должна начинаться с элемента в пространстве имен" http://www.w3.org/2001/XMLSchema'"

Я попробовал это с простым примером XML и получаю ту же ошибку

<?xml version="1.0"?>
<Book xmlns:lib="http://www.library.com">
  <lib:Title>Sherlock Holmes</lib:Title>
  <lib:Author>Arthur Conan Doyle</lib:Author>
</Book>

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 23 декабря 2009

Пример, который вы включили, является экземпляром документа; это не схема. Схема должна начинаться с чего-то вроде:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:lib="http://www.library.com"
   targetNamespace="http://www.library.com"
   elementFormDefault="qualified">

Ваш пример документа не обязательно искажен, но необычен тем, что для его проверки потребуются две схемы: одна для пространства имен http://www.library.com и одна без пространства имен для элемента Book.

Предлагаю прочитать XMLSchema Primer .

0 голосов
/ 30 июля 2010

Ваш валидатор xml пытается проверить документ. В документе говорится, что он соответствует схеме в каком-то месте. Валидатор выбирает эту схему. Но, боже мой, этот документ вообще не является XML-схемой! Это просто какой-то случайный бит XML.

Чтобы это исправить:

Имя пространства имен xml - это просто имя. В этом случае http://www.library.com. Приложение проверки схемы должно знать, как получить документ схемы xml + для этого имени. В отсутствие чего-либо еще, вероятно, просто выполняет http-выборку и получает html-страницу.

Вы должны сообщить своему валидатору , что пространство имен http://www.library.com определяется документом схемы в http://www.library.com/static/theschema.xsd (или любым другим). Связывание пространств имен xml с документами схемы зависит от приложения. Большинство приложений, работающих с XML, имеют какой-то кеш, который необходимо настроить и настроить.

Если вы работаете в Java, то вам нужно реализовать EntityResolver (я думаю), который, когда анализатор запрашивает http://www.library.com, возвращает входной поток, содержащий XML. Вы обычно делаете это как файл ресурсов Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...