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

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

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

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


person brabster    schedule 26.05.2009    source источник
comment
Либо JAXP не очень хорошо поддерживает RelaxNG, либо я, должно быть, делаю что-то не так, когда пытаюсь его использовать.   -  person Jason S    schedule 26.05.2009
comment
Не пробовал RelaxNG, только WXS   -  person brabster    schedule 26.05.2009
comment
Не совсем обман, но см. также Где я могу найти Java-реализацию валидатора ISO Schematron?   -  person Pops    schedule 04.08.2012


Ответы (3)


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

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

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

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

person George Bina    schedule 07.06.2009
comment
JAXP — это просто API, и он не требует поддержки Relax NG от реализации. Слово не в этом предложении — ошибка, верно? Вы имеете в виду, что он требует поддержки, верно? - person Avi Flax; 09.10.2009
comment
Нет, это не ошибка. JAXP требует поддержки только для XML-схемы W3C, для других языков схемы необходимо проверить, поддерживает ли это реализация. См. также java.sun.com /разработчик/технические статьи/xml/jaxp1-3/ - person George Bina; 02.11.2009


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