2016-04-19 5 views
0

Ich habe darüber nachgedacht, Saxon 9.6 als XSD 1.1-Validator mit XSD-Assertionen zu verwenden. Ist es möglich, meine eigenen Fehlermeldungen (nicht die Standardfehlermeldungen) mit Saxon Validator zu definieren?Sächsische und XML-Schema 1.1 benutzerdefinierte Validierung Nachrichten

+0

See [net.sf.saxon.s9api.SchemaManager.getErrorListener()] (http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#getErrorListener ()) und [setErrorListener()] (http://www.saxona.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#setErrorListener (javax.xml.transform.ErrorListener)) – kjhughes

Antwort

1

Mehrere Mechanismen kommen in den Sinn.

Erstens können Sie Ihre eigenen Nachrichten im Zusammenhang mit Behauptungen und in der Tat andere Facetten definieren:

http://www.saxonica.com/documentation/index.html#!schema-processing/extensions11/saxon.message

Zweitens können Sie alle Prüfungsmeldungen in eine XML-Report-Datei senden, die Sie dann verändern können. Verwenden Sie in der Validate-Befehlszeile -report:filename oder in der API s9api SchemaValidator.setValidityReporting(). Das Format der Berichtsdatei wird durch ein Schema definiert, das in der Download-Datei saxon-resources.zip verfügbar ist.

könnten Sie ein ErrorListener verwenden, wie von @kjhughes vorgeschlagen - die Fehlerinformation im ValidationException Objekt an die ErrorListener bestanden ist in einer ganz strukturierten Form - aber (a) Ich denke, der XML-Bericht zu manipulieren ist leichter, und (b) Wir haben festgestellt, dass bei der Validierung einige Hundert Fehler gemeldet werden. Die Kosten für die Erstellung der Ausnahmeobjekte, die von der Schnittstelle ErrorListener benötigt werden, können einen beträchtlichen Teil der Gesamtlaufzeit ausmachen. Java-Ausnahmen wurden nicht wirklich für diesen Zweck entwickelt.

+0

saxon: Die Nachricht ist wirklich großartig, obwohl sie nur für Facetten verwendbar ist. Ist es möglich, benutzerdefinierte Nachrichten auch für die Strukturvalidierung zu definieren (cplx-Typen usw.)? Danke – Yuri

+1

Nein, Entschuldigung. Ich habe darüber nachgedacht, aber noch keinen Weg gefunden. Das Problem ist, dass es keine einfache Entsprechung zwischen Teilen der komplexen Typdefinition und Fehlermeldungen gibt. Saxon bemüht sich, herauszufinden, was wirklich falsch ist, wenn Ihre Eingabe für einen komplexen Typ ungültig ist, was zu Nachrichten in den folgenden Zeilen führt: "Das X-Element ist hier nicht gültig, aber es wäre gültig, wenn es im Namespace N wäre" . –

+0

Ja, das dachte ich mir. Es gibt keine einfache Möglichkeit, eine Verbindung zwischen der cplx-Typdefinition und zugehörigen Fehlernachrichten herzustellen. Danke trotzdem! – Yuri

Verwandte Themen