2016-04-19 2 views
0

Я думал об использовании Saxon 9.6 в качестве проверки XSD 1.1 с утверждениями XSD. Можно ли определить мои собственные сообщения об ошибках (а не по умолчанию) с помощью Saxon validator?Saxon and XML Schema 1.1 пользовательские сообщения проверки

+0

См. [Net.sf.saxon.s9api.SchemaManager.getErrorListener()] (http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#getErrorListener ()) и [setErrorListener()] (http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#setErrorListener (javax.xml.transform.ErrorListener)) – kjhughes

ответ

1

Несколько механизмов приходят на ум.

Во-первых, вы можете определить свои собственные сообщения, связанные с утверждениями и в самом деле другие аспекты:

http://www.saxonica.com/documentation/index.html#!schema-processing/extensions11/saxon.message

Во-вторых, вы можете отправить все сообщения проверки в файл отчета XML, который затем можно преобразовать. Используйте -report:filename в командной строке Validate или SchemaValidator.setValidityReporting() в API s9api. Формат файла отчета определяется схемой, доступной в файле загрузки saxon-resources.zip.

Вы можете использовать ErrorListener как предложено @kjhughes - информация об ошибке в ValidationException объекта, переданного в ErrorListener в довольно структурированной форме - но (а) Я думаю, что отчет XML легче манипулировать, и (б), мы обнаружили, что в тестах проверки достоверности нескольких сотен ошибок стоимость создания объектов исключения, необходимых для интерфейса ErrorListener, может быть значительной частью общего времени выполнения. Исключения Java для этой цели не были разработаны.

+0

saxon: сообщение действительно здорово, хотя оно применимо только для граней. Возможно ли каким-либо образом определять персонализированные сообщения для структурной проверки (типы cplx и т. Д.)? Спасибо – Yuri

+1

Нет, извините. Я думал об этом, но не нашел пути. Проблема в том, что нет простого соответствия между определениями сложного типа и сообщениями об ошибках. Саксон прилагает определенные усилия, чтобы попытаться выяснить, что действительно неправильно, когда ваш вход недействителен против сложного типа, что приводит к сообщениям по строкам. «Элемент X здесь недействителен, но он был бы действителен, если бы он находился в пространстве имен N» , –

+0

Да, я так и думал. Не существует простого способа соединения между определением типа cplx и соответствующими сообщениями об ошибках. Спасибо, в любом случае! – Yuri

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