2014-10-08 8 views
0

Я пытался повысить производительность проверки XML по сравнению с XSD-схемой, в частности в отношении уникальных ограничений XSD, и решил попробовать до Woodstox. Я в значительной степени следую this example, в той мере, в какой я меняю XMLValidationSchema.SCHEMA_ID_DTD на XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA.Woodstox Stax2 XML W3C Проверка схемы - уникальная проблема ограничения

Проблема, которую я испытываю, заключается в том, что валидатор Woodstox находит XML действительным, даже если XML нарушает уникальное ограничение. Переключение обратно в моем java-коде на «обычный» javax.xml.validation.Schema, javax.xml.stream.XMLStreamReader и javax.xml.validation.Validator нарушение нарушения уникальности обнаружено должным образом.

Кроме того, я могу подтвердить, что валидатор Woodstox что-то делает, поскольку, например, я вижу, что он говорит «Недопустимый XML», если, например, у меня есть отрицательное число, где положительный результат XSD ожидается в XML.

Возможно ли, что инструменты, которые я использовал до сих пор, хороши в отношении проверок уникальности на неквалифицированных элементах, тогда как Woodstox нет? Это единственная идея, которая приходит мне на ум ...

Кроме того, кто-нибудь может подтвердить, что Woodstox будет работать лучше, чем инструменты на основе Xerces (почти все, что существует на Java?), Проверяя уникальные ограничения?

Любая помощь очень ценится!

+0

Теперь я квалифицировал все элементы, которые я использую, но валидатор Woodstox по-прежнему утверждает, что XML со сломанным уникальным ограничением действительно. В то же время регулярный 'javax.xml.validation.Validator' считает его недействительным, как и ожидалось. –

ответ

1

Не уверен, что это помогает, но Woodstox использует валидатор Multi-Schema Validator (https://github.com/kohsuke/msv) для его проверки XML-схемы и Relax NG. Поэтому, если MSV поддерживает проверку уникальности, то Woodstox также должен.

Я не помню, если это так, но единственное ограничение MSV, которое я помню, заключается в том, что оно не поддерживает назначение значений по умолчанию (поскольку позиция MSV заключается в том, что она не выполняет модификацию документа, а только проверку), так что, похоже, это должно сработать.

Что касается производительности: поскольку Woodstox полностью потоковая и никогда не строит древовидную модель (например, DOM), она будет работать линейно для документов любого размера, поэтому она может быть более эффективной для больших документов. Но поскольку проверка выполняется через MSV, трудно сказать точно. Большой вопрос заключается в том, выполняется ли проверка Xerces на основе дерева DOM (где построение дерева является дорогостоящей частью) или если он может просто использовать SAX-парсер.

Одна вещь, которую я рекомендовал бы подать ошибку против Woodstox, по адресу:

https://github.com/FasterXML/woodstox 

(версия 5 переходит на GitHub, вы можете в качестве альтернативы также подать вопрос Jira на http://woodstox.codehaus.org)

поскольку оно теоретически возможно, что что-то в интеграции MSV не полностью работает. Если это так, то вам будет предложен небольшой пример/тестовый пример.