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

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

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

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

Может кто-нибудь сказать мне, как использоватьJAXP для успешного анализа / проверки с использованием старой версии спецификации схемы?Или, в качестве альтернативы, есть ли способ указать DOMParser Xerces 1.1 на использование схемы, определенной 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 ]

0 голосов
/ 08 ноября 2010

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

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

0 голосов
/ 04 ноября 2010

Используйте старую версию JAXP;возможно 1,6

...