Как я могу проверить документы по схемам Schematron в Java?
Насколько я могу судить, JAXP по умолчанию поддерживает XML-схему W3C и RelaxNG из Java 6.
Я вижу несколько API, в основном экспериментальных или неполных, на странице ссылок schematron.com.
Существует ли подход к проверке схематрона в Java, который является полным, эффективным и может использоваться с API JAXP?
3 ответа
Jing поддерживает предварительную проверку Schematron (обратите внимание, что реализация 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() ...