Я думал об использовании Saxon 9.6 в качестве проверки XSD 1.1 с утверждениями XSD. Можно ли определить мои собственные сообщения об ошибках (а не по умолчанию) с помощью Saxon validator?Saxon and XML Schema 1.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 для этой цели не были разработаны.
saxon: сообщение действительно здорово, хотя оно применимо только для граней. Возможно ли каким-либо образом определять персонализированные сообщения для структурной проверки (типы cplx и т. Д.)? Спасибо – Yuri
Нет, извините. Я думал об этом, но не нашел пути. Проблема в том, что нет простого соответствия между определениями сложного типа и сообщениями об ошибках. Саксон прилагает определенные усилия, чтобы попытаться выяснить, что действительно неправильно, когда ваш вход недействителен против сложного типа, что приводит к сообщениям по строкам. «Элемент X здесь недействителен, но он был бы действителен, если бы он находился в пространстве имен N» , –
Да, я так и думал. Не существует простого способа соединения между определением типа cplx и соответствующими сообщениями об ошибках. Спасибо, в любом случае! – Yuri
См. [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