2009-07-15 6 views
0

Ich muss XML-Dateien mit einer Vielzahl von Einschränkungen überprüfen: Typ und/oder Format des Elementtextes, Co-Vorkommen, Datumsvergleiche und Datumsmathematik sowie einige benutzerdefinierte Regeln aus einer Datenbank (dh Element X kann nur die untergeordneten Elemente A, B und C enthalten) und ich bin mir nicht sicher, wie ich vorgehen soll.Validieren von XML-Dokumenten mit einer Vielzahl von Einschränkungen

Die aktuelle Version dieser Anwendung erzwingt diese Beschränkungen über Perl, da ich denke, dass der Perl-Code einen Großteil der Funktionalität dupliziert, die ich mit XSD oder RELAX NG verwenden würde. Leider würde die Verwendung dieser beiden zu Fehlermeldungen führen, die für die Endbenutzer kryptisch wären. Diese kryptische Nachricht auf etwas Freundliches zu mappen scheint unmöglich zu sein (abgesehen von der Bereitstellung von Zeilen-/Spaltennummern).

Dann gibt es Schematron. Es ermöglicht mir, freundliche Nachrichten zu generieren und Einschränkungen zu überprüfen, die die oben genannten Schema-Sprachen nicht können. Leider werden Typ-/Formatprüfung und Datumsmathematik zu großen XSLT-Vorlagen-Hacks.

Jetzt bin ich mir nicht sicher, was zu tun ist.

Eine Kombination zwischen Schematron und, sagen wir, RELAX NG, scheint der beste Ansatz zu sein, doch die von RELAX NG erzeugten Fehler machen es unmöglich, dem Endbenutzer etwas Informatives zu liefern.

Ich hatte gehofft, eine Vorlagenvorlage zu verwenden, die basierend auf den benutzerdefinierten Regeln in der DB geändert werden würde.

Bleibt der ursprüngliche Ansatz der beste, oder sollte ich mit Schematron/RELAX NG weitermachen und die Durchsetzung des Formats/Typs in XSLT-Vorlagen umsetzen?

+0

Fehler werden nicht "von RELAX NG bereitgestellt", sie werden von einer bestimmten Implementierung bereitgestellt. Welchen benutzen Sie? –

+0

In der Tat. Ich benutze libxml. –

Antwort

0

In einer praktischen Anmerkung, es scheint mir, dass Ihre Aufgabe ist wirklich nicht eine der XML-Validierung, und sollte wahrscheinlich nicht in einer gezwungen werden.

Ihre Beschreibung liest sich so, als hätten Sie viele domänenspezifische und vielleicht sogar umstandsspezifische Validierung der in den XML-Dokumenten enthaltenen Daten, nicht wirklich die XML-Dokumente an sich. Daher schreibe ich einen Validator in Code, der die Dokumente analysiert und Ihre komplexe, datengesteuerte Validierungs-Suite anwendet. Ich vermute, dass Sie den Nutzern viel besseres Feedback geben können, da Ihr Code semantisches Wissen über die Domain besitzt.

Ich nehme an, Sie könnten und XML-Schema-System als "First-Pass" eines solchen Systems, aber wenn Sie am Ende müssen Sie die Daten analysieren und laden, ich habe normalerweise gefunden, die Schema-Validierung fügt nichts hinzu da der Code, der analysiert, im Grunde sowieso zu validieren ist.

+0

Die Domäne ist das XML-Dokument. Nun, es gibt benutzerdefinierte Regeln, aber sie machen nur einen winzigen Bruchteil der Gesamtanforderungen aus. Validierung wird verwendet, um einige komplizierte XML-Spezifikationen zu erzwingen, auf die ich keine Kontrolle habe. Wenn das angegebene Instanzdokument übergeben wird, wird es gesendet, um nie wieder von ihm gehört zu werden. Wenn es fehlschlägt, wird es korrigiert und gesendet. Die Regeln dienen keinem anderen Zweck. –

+0

Vielleicht verstehen wir Ihre Situation nicht genug. "Datum Vergleiche und Datum Mathe" und "einige benutzerdefinierte Regeln aus einer Datenbank" klingen nicht wie gute Kandidaten für Standard-XML-Validierungssprachen. Ich verstehe jetzt, dass Sie die Daten für noch eine andere Verwendung nicht laden müssen. Also denke ich, dass der Zwei-Pass-Ansatz am besten ist: Verwenden Sie die XML-Validierung (entweder das Schema, das am einfachsten erscheint), analysieren Sie dann das Dokument und führen Sie die Datenprüfungen durch (wie Datums-Mathe). – MtnViewMark

Verwandte Themen