Pergunta

Tanto quanto eu posso dizer, JAXP por padrão suporta W3C XML Schema e RelaxNG de Java 6 .

Eu posso ver algumas APIs, principalmente experimentais ou incompletos, na página de links schematron.com .

Existe uma abordagem na validação Schematron em Java que é completa, eficiente e pode ser usado com a API JAXP?

Foi útil?

Solução

Jing pré-ISO Schematron validação (note que a implementação do Jing é baseado também em XSLT).

Há também implementações XSLT que pode muito facilmente ser invocadas de Java. Você precisa decidir qual a versão do Schematron você está interessado e, em seguida, começar a folha de estilo correspondente - todos eles devem estar disponíveis a partir schematron.com. O processo é muito simples simples, envolvendo basicamente 2 etapas:

  • aplicar o XSLT esqueleto no seu esquema Schematron para obter um novo estilo XSLT que representa o esquema Schematron no XSLT
  • aplicar o XSLT obtido no documento instância ou documentos para validá-los

JAXP é apenas uma API e não requerem suporte para Relax NG de uma implementação. Você precisa verificar a implementação específica que você usa para ver se que os suportes Relax NG ou não.

Outras dicas

Uma implementação Java puro Schematron está localizado na https://github.com/phax/ph-schematron / Traz suporte para a abordagem XSLT e a abordagem Java puro.

Você pode conferir SchematronAssert (divulgação: meu código). Ele é destinado principalmente para testes de unidade, mas você pode usá-lo para código normal também. Ele é implementado usando XSLT.

Unidade exemplo testes:

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

Standalone exemplo de validação:

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);

Trabalhar com uma representação de objeto de SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top