Question

Pour autant que je peux dire, JAXP par défaut prend en charge W3C XML Schema et RelaxNG de Java 6 .

Je peux voir quelques API, principalement expérimentales ou incomplètes, sur le Liens schematron.com page .

Y at-il une approche sur la validation schematron en Java qui est complet, efficace et peut être utilisé avec l'API JAXP?

Était-ce utile?

La solution

Jing prend en charge la validation Schematron pré-ISO (noter que la mise en œuvre de Jing est basée aussi sur XSLT).

Il y a aussi des implémentations XSLT qui peuvent être très facilement invoquaient de Java. Vous devez décider quelle version de Schematron qui vous intéresse, puis obtenir la feuille de style correspondant - tous devraient être disponibles à partir schematron.com. Le processus est très simple simple, impliquant essentiellement 2 étapes:

  • appliquer le squelette XSLT sur votre schéma Schematron pour obtenir une nouvelle feuille de style XSLT qui représente votre schéma Schematron dans XSLT
  • appliquer le XSLT obtenu sur votre document d'instance ou des documents pour les valider

JAXP est juste une API et il ne nécessite pas de support pour Relax NG à partir d'une mise en œuvre. Vous devez vérifier la mise en œuvre spécifique que vous utilisez pour voir si cela prend en charge Relax NG ou non.

Autres conseils

Un pur implémentation Java Schematron est situé à https://github.com/phax/ph-schematron / Il apporte un soutien à la fois l'approche XSLT et l'approche pure Java.

Vous pouvez consulter SchematronAssert (divulgation: mon code). Il est destiné principalement pour les tests unitaires, mais vous pouvez l'utiliser pour code normal aussi. Il est mis en œuvre en utilisant XSLT.

Exemple de test unitaire:

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

Exemple de validation autonome:

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

Travailler avec une représentation d'objet de SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top