Проверить XML-схему на XMLSchema.xsd

Я пытаюсь проверить простейший возможный XSD файл против XMLSchema.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 </xs:schema>

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

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

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

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

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

Однако, когда я комментирую весь раздел 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 тестовым примером.

1 ответ

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

licensed under cc by-sa 3.0 with attribution.