2009-05-26 9 views
6

Por lo que puedo decir, JAXP by default supports W3C XML Schema and RelaxNG from Java 6.¿Cómo puedo validar documentos contra esquemas Schematron en Java?

Puedo ver algunas API, en su mayoría experimentales o incompletas, en el schematron.com links page.

¿Existe un enfoque para validar schematron en Java que sea completo, eficiente y se pueda usar con la API de JAXP?

+0

De cualquier JAXP no soporta RelaxNG muy bien, o debo estar haciendo algo mal cuando trato de usarlo. –

+0

No he probado RelaxNG tbh, solo WXS – Brabster

+0

No es un engaño, pero vea también [¿Dónde puedo encontrar una implementación Java de un validador Schematron ISO?] (Http://stackoverflow.com/questions/10126256/where-can -i-find-a-java-implementation-of-an-iso-schematron-validator) – Pops

Respuesta

6

Jing admite la validación de Schematron pre-ISO (tenga en cuenta que la implementación de Jing se basa también en XSLT).

También hay implementaciones XSLT que pueden invocarse muy fácilmente desde Java. Debe decidir en qué versión de Schematron está interesado y luego obtener la hoja de estilo correspondiente; todas ellas deben estar disponibles en schematron.com. El proceso es muy simple simple, que implica básicamente 2 pasos:

  • aplicar el XSLT esqueleto en su esquema Schematron para obtener una nueva hoja de estilo XSLT que representa el esquema de Schematron en XSLT
  • aplicar el XSLT obtenido en su documento de instancia o documentos para validarlos

JAXP es solo una API y no requiere soporte para Relax NG desde una implementación. Debe verificar la implementación específica que utiliza para ver si eso admite Relax NG o no.

+0

"JAXP es solo una API y no requiere soporte para Relax NG desde una implementación." La palabra "no" en esta oración es un error, ¿verdad? ¿Quieres decir que * requiere * apoyo, ¿verdad? –

+0

No, no es un error. JAXP requiere soporte solo para el Esquema XML W3C, para otros lenguajes de esquema que necesita verificar para ver si la implementación lo admite. Consulte también http://java.sun.com/developer/technicalArticles/xml/jaxp1-3/#Validate%20XML%20against%20any%20schema –

1

Puede consultar SchematronAssert (revelación: mi código). Está destinado principalmente para pruebas unitarias, pero también puede usarlo para código normal. Se implementa utilizando XSLT.

Unidad ejemplo las pruebas:

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

Independiente ejemplo de validación:

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

trabajo con una representación de objeto de SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource); 
// look at the output 
output.getFailures() ... 
output.getReports() ... 
Cuestiones relacionadas