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

StackOverflow https://stackoverflow.com/questions/910476

Вопрос

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

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

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

Это было полезно?

Решение

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

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

  • примените skeleton 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() ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top