Как я могу проверить документы по схемам 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() ...