2012-04-12 2 views
3

Der ISO-Schematron-Standard ist seit zwei Jahren nicht mehr verfügbar, aber ich kann immer noch keine Java-Implementierung mit ISO Schematron XSLT-Dateien finden (im Gegensatz zu Dateien aus einer älteren Version von Schematron, z. B. hier: http://uploading.com/files/c9c9cb87/SchematronXpath.jar/).Wo finde ich eine Java-Implementierung eines ISO-Schematron-Validators?

Kennt jemand einen produktionsfertigen ISO-Schema-Validator, der leicht von einer Java-Methode aufgerufen werden kann?

+0

Nicht ganz Duplikate, sondern auch [How kann ich Dokumente gegen Schematron-Schemas in Java validieren?] (http://stackoverflow.com/q/910476/122607) – Pops

Antwort

-1

Die Bibliothek funktioniert für mich.

+3

Obwohl Jing mit Schematron 1.5 funktioniert, unterstützt es die ISO-Version von Schematron noch nicht. Siehe [Problem 23] (http://code.google.com/p/jing-trang/issues/detail?id=23&colspec=ID%20Type%20Status%20Priority%20Stars%20Module%20Summary). – Pops

5

Probatron4j kann gegen ISO Schematron validieren. Die Website stellt ein einzelnes, eigenständiges JAR bereit, das für die Ausführung über die Befehlszeile vorgesehen ist. Es ist jedoch einfach, Probatron über eine Java-Methode aufzurufen, wenn Sie its source code haben. Hier ist eine vereinfachte Version von, wie ich es tat:

public boolean validateSchematron(InputStream xmlDoc, File schematronSchema) { 
    // Session = org.probatron.Session; think of it as the Main class 
    Session theSession = new Session(); 
    theSession.setSchemaSysId(schematronSchema.getName()); 
    theSession.setFsContextDir(schematronSchema.getAbsolutePath()); 

    // ValidationReport = org.probatron.ValidationReport; the output class 
    ValidationReport validationReport = null; 
    try 
    { 
     validationReport = theSession.doValidation(xmlDoc); 
    } 
    catch(Exception e) { /* ignoring to keep this answer short */ } 

    if (validationReport == null || 
     !validationReport.documentPassedValidation()) { 
     return false; 
    } 
    return true; 
} 

Sie werden ein paar kleine Änderungen vornehmen müssen, lassen Probatron wissen, dass es nicht aus einer JAR-Datei ausgeführt wird, aber es dauert nicht lange.

+0

'theSession.doValidation (xmlDoc);' nimmt keinen 'InputStream', nur einen' String' – btiernay

+1

Beachten Sie, dass Probatron unter Affero GPL lizenziert ist. IANAL, aber Sie sollten möglicherweise einen konsultieren, bevor Sie Probatron in kommerziellen Umgebungen verwenden. –

9

Zusätzlich können Sie ph-schematron verwenden, das sowohl Unterstützung für die Konvertierung in XSLT als auch eine native einfache Java-Validierung bietet, die in fast allen Fällen schneller als die XSLT-Version ist. Siehe die https://github.com/phax/ph-schematron/ für die Details sowie eine kurze Einführung. Beispiel-Code überprüfen, ob eine XML-Datei, die eine Schematron-Datei entspricht:

public static boolean validateXMLViaPureSchematron (File aSchematronFile, File aXMLFile) throws Exception { 
    final ISchematronResource aResPure = SchematronResourcePure.fromFile (aSchematronFile); 
    if (!aResPure.isValidSchematron()) 
    throw new IllegalArgumentException ("Invalid Schematron!"); 
    return aResPure.getSchematronValidity(new StreamSource(aXMLFile)).isValid(); 
} 
+0

Hallo Philip, mit ph-Schematron ist eine gute Idee, aber es muss von How-To's unterstützt werden. Ich konnte kein abgerundetes Tutorial darüber finden. – GokcenG

+0

Danke für die Info. Es wäre großartig, wenn Sie Probleme auf dem GitHub-Projekt ablegen könnten :) –

+0

ph-schematron gefunden zu sein ziemlich nützlich und einfach zu bedienen. Ich könnte ein Tutorial schreiben, wie ich es benutze. Danke Philip, dass du die Bibliothek zur Verfügung gestellt hast. – MohamedSanaulla

0

Check-out kann SchematronAssert (Offenlegung: mein Code). Es ist hauptsächlich für Komponententests gedacht, aber Sie können es auch für normalen Code verwenden. Es wird mit 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); 

Arbeit mit einer Objektdarstellung SVRL:

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