Frage

Soweit ich das beurteilen kann, JAXP standardmäßig unterstützt W3C XML Schema und RelaxNG von Java 6 .

Ich kann einige APIs sehen, meist experimentellen oder unvollständig ist, auf dem schematron.com Links-Seite .

Gibt es einen Ansatz auf Schematron in Java Validierung, die ist komplett, effizient und kann mit dem JAXP-API verwendet werden?

War es hilfreich?

Lösung

Jing pre-ISO Schematron Validierung unterstützt (beachten Sie, dass Jing-Implementierung auch basiert auf XSLT).

Es gibt auch XSLT-Implementierungen, die sehr leicht von Java aufgerufen werden können. Sie müssen entscheiden, welche Version von Schematron Sie interessiert sind und dann die entsprechende Sheet erhalten - sie alle sollten von schematron.com zur Verfügung. Der Prozess ist sehr einfach einfach, an denen grundsätzlich 2 Schritten:

  • Wenden Sie das Skelett XSLT auf Ihrem Schematron Schema ein neues Stylesheet zu erhalten, die Ihr Schematron Schema in XSLT steht für
  • gelten die erhaltene XSLT auf die Instanz-Dokument oder Dokumente, um sie zu validieren

JAXP ist nur ein API und es keine Unterstützung benötigt für NG Entspannen von einer Implementierung. Sie müssen die konkrete Umsetzung überprüfen, die Sie zu sehen, verwenden, um, wenn das Relax NG unterstützt oder nicht.

Andere Tipps

Eine reine Java Schematron Implementierung befindet sich unter https://github.com/phax/ph-schematron / Es bringt Unterstützung für den XSLT-Ansatz und den reinen Java-Ansatz.

Sie können überprüfen SchematronAssert (Offenlegung: mein Code). Es ist in erster Linie für Unit-Tests gemeint, aber man kann es für den normalen Code verwenden. Es wird mit Hilfe von XSLT implementiert.

Unit-Tests Beispiel:

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

Standalone-Validierung Beispiel:

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

Die Arbeit mit einer Objektdarstellung SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top