Как я могу проверить документы по схемам Schematron в Java?

насколько я могу судить, JAXP по умолчанию поддерживает схему W3C XML и RelaxNG из Java 6.

Я вижу несколько API, в основном экспериментальных или неполных, на schematron.com страница ссылок.

есть ли подход к проверке schematron в Java, который является полным, эффективным и может использоваться с API JAXP?

3 ответов


Цзин поддерживает проверку схемы pre-ISO (обратите внимание, что реализация Jing также основана на XSLT).

есть также реализации XSLT, которые можно очень легко вызвать из Java. Вам нужно решить, какая версия Schematron вас интересует, а затем получить соответствующую таблицу стилей - все они должны быть доступны из schematron.com - ... Процесс очень простой простой, включающий в основном 2 шага:

  • применить скелета XSLT в схеме Schematron для получения новой таблицы стилей XSLT, представляющей схему Schematron в XSLT
  • применить полученный XSLT на вашем экземпляре документа или документов для их проверки

JAXP - это просто API, и он не требует поддержки Relax NG от реализации. Вам нужно проверить конкретную реализацию, которую вы используете, чтобы увидеть, поддерживает ли это Relax NG или нет.


чистая реализация Java Schematron расположена вhttps://github.com/phax/ph-schematron/ Он обеспечивает поддержку как подхода XSLT, так и чистого подхода Java.


вы можете ознакомиться SchematronAssert (раскрытие: мой код). Он предназначен в первую очередь для модульного тестирования, но вы можете использовать его для обычного кода. Он реализован с использованием XSLT.

пример модульного тестирования:

ValidationOutput result = in(booksDocument)
    .forEvery("book")
    .check("author")
    .validate();
assertThat(result).hasNoErrors();

пример Автономной проверки:

StreamSource schemaSource = new StreamSource(... your schematron schema ...);
StreamSource xmlSource = new StreamSource(... your xml document ... );
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output);

работа с объектным представлением SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...