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
Antwort
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.
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
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" . –
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
- 1. benutzerdefinierte Validierung Nachrichten in Grails
- 2. Benutzerdefinierte Validierung Nachrichten mit access_nested_attributes_for
- 3. Benutzerdefinierte Validierung Nachrichten Feder ist nicht
- 4. Jquery Validierung und Nachrichten
- 5. JQuery Validierung benutzerdefinierte Nachrichten nicht funktioniert
- 6. Http 1.1-Protokoll-Validierung
- 7. MSTest und benutzerdefinierte Nachrichten
- 8. Anzeige benutzerdefinierte Validierung Nachrichten mit CakePHP $ validate Array
- 9. Rendern Validierung Nachrichten RichFaces
- 10. Yii 1.1 TbGridView benutzerdefinierte Paginierung
- 11. Bean Validierung 1.1 (JSR-349), Implementierungsalternativen?
- 12. Respect Validierung mehrere benutzerdefinierte Fehlermeldungen
- 13. Django-Nachrichten-Framework, benutzerdefinierte Middleware und HttpResponseRedirect
- 14. Symfony-Validierung zeigt keine Nachrichten an
- 15. jQuery Benutzerdefinierte Nachrichten überprüfen
- 16. XHTML-Validierung, benutzerdefinierte Namespaces und Attribute
- 17. Laravel 5.2 - Benutzerdefinierte Formularfeldname und Validierung
- 18. benutzerdefinierte 500 Fehlerseite in Symfony 1.1
- 19. Benutzerdefinierte FormsAuthenticationTicket Validierung
- 20. Rails 3 Benutzerdefinierte Validierung
- 21. ASP.Net Benutzerdefinierte clientseitige Validierung
- 22. MVC3 einfache benutzerdefinierte Validierung
- 23. Loopback benutzerdefinierte Validierung
- 24. Benutzerdefinierte Validierung Jquery
- 25. Symfony: Benutzerdefinierte Unterformular-Validierung
- 26. jQuery Validierung Benutzerdefinierte Fehler
- 27. Benutzerdefinierte jQuery-Validierung .addMethod
- 28. kohana benutzerdefinierte Validierung Fehlermeldung
- 29. XmlSchema hat keine Elemente (C#)
- 30. ng-Nachrichten und ui-Maske Konflikt bei der zweiten Validierung
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