Как я могу проверить документы по схемам Schematron в Java? - PullRequest
7 голосов
/ 26 мая 2009

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

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

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

Ответы [ 3 ]

7 голосов
/ 07 июня 2009

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

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

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

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

3 голосов
/ 26 мая 2013

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

2 голосов
/ 09 марта 2014

Вы можете проверить 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() ...
...