Как я могу проанализировать / проверить XML в JAXP, используя старую (1999) версию схемы?

У меня есть схема XML, которая была построена со старой версией спецификации XML (http://www.w3.org/1999/XMLSchema). Я пытаюсь проанализировать XML-сообщения, используя схему (показано ниже). По умолчанию парсер Xerces 1.1 ищет схему в корневом каталоге домена приложения. Я пытаюсь переместить схему в общедоступное место в нашем веб-каталоге. Кажется, я не могу указать URL-адрес в качестве расположения схемы в моей программе синтаксического анализа, использующей библиотеку Xerces 1.1.

Поэтому я попытался обновить мою программу для использования JAXP DocumentBuilderFactory и его метода setSchema(). Похоже, что это находит схему с URL-адресом схемы, которую я предоставляю, за исключением того, что она дает ошибки синтаксического анализа, потому что схема (предположительно) не соответствует более поздней версии спецификации (например, я получаю ошибки, потому что мой элемент Ticket не оберните его элементы в xs:Sequence).

Я не могу обновить свою схему, поскольку в настоящее время я не могу заставить внешних клиентов переписывать свои приложения, которые отправляют нам сообщения.

Может кто-нибудь сказать мне, как использовать JAXP для успешного анализа / проверки с использованием старой версии спецификации схемы? Или, в качестве альтернативы, есть ли способ указать Xerces 1.1 DOMParser использовать схему, определяемую URL-адресом (а не местоположением файла)?

Вот пример того, как выглядит схема:

<?xml version="1.0" encoding="UTF-8" ?>
<schema>
  <element name="Ticket">
     <complexType>
        <element ref="ID" />
        <element ref="User" />
     </complexType>
  </element>

  <element name="ID" type='string' />
  <element name="UserID" type='string' />
</schema>

XML-документ выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Ticket xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation='TicketSubmission.xsd'>
  <ID>2010:December2:Dec:12:05:33:245</ID> 
  <UserID>user123</UserID> 
</Ticket>

Спасибо!

2 ответа

Решение

Итак, я пришел к выводу, что использование спецификации схемы 1999 года - плохая идея. Более ранние версии синтаксического анализатора Xerces, которые поддерживают спецификацию схемы 1999 года, не кажутся гибкими в плане размещения схем на диске. Я, вероятно, застрял в размещении схем в корневом каталоге сервера приложений, пока мы не сможем заставить наших клиентов использовать более новую версию нашей схемы.

Более поздние версии Xerces (даже до Xerces 2), похоже, отказались от поддержки спецификации схемы 1999 года в пользу спецификации схемы 2001 года. Хотя более поздние версии Xerces кажутся более гибкими в расположении файлов схемы.

Используйте версию старой школы JAXP; возможно 1.6

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