2009-05-26 2 views
6

Насколько я могу судить, JAXP by default supports W3C XML Schema and RelaxNG from Java 6.Как я могу проверить документы на схемах Schematron в Java?

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

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

+0

Либо JAXP не поддерживает RelaxNG очень хорошо, или я должен делать что-то неправильно, когда я пытаюсь его использовать. –

+0

Не пробовал RelaxNG tbh, просто WXS – Brabster

+0

Не совсем обман, но см. Также [Где я могу найти реализацию Java для проверки подлинности ISO Schematron?] (Http://stackoverflow.com/questions/10126256/where-can -i-find-a-java-реализация-iso-schematron-validator) – Pops

ответ

6

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

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

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

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

+0

«JAXP - это просто API, и он не требует поддержки Relax NG от реализации». Слово «нет» в этом предложении является ошибкой, верно? Вы имеете в виду, что он * нуждается в поддержке, верно? –

+0

Нет, это не ошибка. JAXP требует поддержки только для W3C XML Schema, для других языков схемы вам нужно проверить, поддерживает ли реализация. См. Также http://java.sun.com/developer/technicalArticles/xml/jaxp1-3/#Validate%20XML%20against%20any%20schema –

2

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

1

Вы можете проверить SchematronAssert (раскрытие: мой код). Он предназначен в первую очередь для модульного тестирования, но вы также можете использовать его для обычного кода. Он реализован с использованием XSLT.

Unit Пример тестирования:

ValidationOutput result = in(booksDocument) 
    .forEvery("book") 
    .check("author") 
    .validate(); 
assertThat(result).hasNoErrors(); 

Standalone Пример проверки:

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() ...