2014-09-02 2 views
0

Я пытаюсь проверить простейший файл XSD против XMLSchema.xsd:Проверка правильности XML-схемы против XMLSchema.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="a" type="xs:int"/> 
</xs:schema> 

Для этого я скачал файл XMLSchema.xsd и передать его в мой org.w3c.dom.ls.LSResourceResolver в убедитесь, что локально предоставлено XMLSchema.XSD, а не выбрано через Интернет. Код работает с Saxon-HE-9.4.jar на моем пути к классам.

Однако это не удается с:

org.xml.sax.SAXParseException; cvc-elt.1: Не удается найти объявление элемента 'xs: schema'.

, который, как представляется, связано с предыдущим сообщением (излучаемый мой заказ LSResourceResolver подкласса):

Не удалось прочитать документ схемы '[...] XMLSchema.xsd', потому что 1) может не найти документ; 2) документ не может быть прочитан; 3) корневой элемент документа не < xsd: схема >.

Когда же я закомментировать весь DOCTYPE раздел в файле XMLSchema.XSD она работает.

Я думаю, это означает, что анализатор не может обрабатывать статьи DOCTYPE и ATTLIST в XMLSchema.xsd.

Поэтому у меня есть два вопроса:

  1. почему анализатор не в состоянии справиться с XMLSchema.xsd XML пролог? и есть ли способ исправить это, не редактируя файл XMLSchema.xsd?
  2. , если нет пути вокруг # 1, как я могу загрузить файл XMLSchema.xsd с http://www.w3.org/2001/XMLSchema.xsd без пролога XML, поэтому мне не нужно редактировать вручную. Простой wget также извлекает пролог XML (что BTW не появляется, когда ссылка посещается в браузере).

Это действительно слишком большое, чтобы обеспечить SSCCE, но если кто-то хочет взглянуть, я предоставил хранилище github тестовым случаем.

+0

Просто интересно: используете ли вы документ DOM? Если это так, вы установили проверку на false или вы оставили его по умолчанию по умолчанию? – nablex

+0

@nablex yes Файл читается как 'org.w3c.dom.Document'; на объекте 'DocumentBuilderFactory' я вызываю:' setValidating (false); ' –

+0

Вы отметили это как с« саксоном », так и« скерами ». Оба они предоставляют валидаторы схемы, но вы не дали понять, что используете. Я получаю впечатление от сообщений об ошибках, что вы используете валидатор схемы xerces; так почему вы отметили вопрос «саксоном»? –

ответ

1

Если это не ссылка на XMLSchema.dtd, то одно очевидное решение (отличное от комментирования объявления DOCTYPE, которое вы уже нашли) должно было бы загружать файлы DTD (XMLSchema.dtd и datatypes.dtd) и поставлять их на местном уровне.

Смежные вопросы