2008-11-03 9 views
16

Welche XML-Validierungs-Tools können Sie für Leistung und Genauigkeit empfehlen, von denen jedes ein kritisches Problem in unserem System ist? Wir haben die folgenden Anforderungen:XML-Schema-Validierung mit RelaxNG

  • Es ist nicht xmllint (siehe unten)
  • Unterstützt RelaxNG
  • leicht mit Perl integrieren kann (dies ist optional, aber es wäre schön)

Warum nicht xmllint? (Dies ist Hintergrund und Sie können es überspringen, wenn Sie möchten)

Wir haben ein großes Perl-System, das RelaxNG verwendet, um unsere XML zu validieren. Wir verwenden die compact RelaxNG format und trang, um es in das Standard-RelaxNG-Format zu konvertieren. Dann machen wir die eigentliche Validierung über xmllint.

Das ist, wenn die Probleme auftreten. Xmllint hat routinemäßig Probleme bei der Meldung von Validierungsfehlern falsch. Es gibt keine falschen positiven oder negativen Ergebnisse, aber wenn das Dokument nicht validiert wird, meldet xmllint oft das falsche Element oder Attribut für einen bestimmten Fehler. Manchmal ist der Fehler korrekt ("Elementleiste wurde nicht erwartet"), aber nur, weil ein vorheriger Fehler nicht gemeldet wurde (weil 'bar' dem erforderlichen, aber fehlenden Element 'foo' folgen sollte, aber xmllint doesn ' Beachten Sie, dass dies ein seit langem bestehendes Problem mit xmllint ist und dass selbst die neueste Version die gleichen Probleme hat. Wir haben oft riesige XML-Dokumente und falsche Berichte über Fehler verursachen sowohl für Kunden als auch für Entwickler viel Ärger.

+0

Da dies vor mehr als 7 Jahren gefragt wurde (jetzt ist es 2015): Ist xmllint immer noch zu fehlerhaft für Ihren Zweck? – Jens

+0

Jens: Das war bei der BBC und ich habe dort jahrelang nicht gearbeitet, noch habe ich seitdem xmllint benutzt. – Ovid

Antwort

14

Ich denke, dass JDrago die richtige Idee hat, dass Sie libxml2-basierte Tools für die RNG-Validierung vermeiden müssen zumindest für jetzt. Das entdecke ich auch in meinem Projekt. Ich habe vor kurzem zwei Fehler gegen libxml2 bezüglich der RNG-Validierung protokolliert.

Ich empfehle jing. Es wurde von James Clark, dem Schöpfer von Relax NG und einer der führenden Licht in der XML-Welt geschrieben. Er ist auch der Autor von Trg, den Sie bereits benutzen. Die Entwicklung dieses Codes (und von trg) wurde kürzlich auf der Google Code-Website, die ich verlinkt habe, fortgesetzt.

Jing hat sich mit unserem Inhalt und Schema durchweg als richtig erwiesen und gibt viel bessere Fehlermeldungen als libxml2, obwohl es in dieser Hinsicht noch viel Raum für Verbesserungen gibt.

Der einzige Nachteil von Jing gegenüber libxml2/xmllint ist, dass es derzeit keine OASIS XML-Kataloge verwendet, um öffentliche und System-IDs und URIs auf Schemata aufzulösen. Dies wäre ein Problem, wenn Sie Schemata hinzugefügt haben, auf die mit "http" -URI verwiesen wird - diese würden immer über das Netzwerk geholt werden.

2

Ich vermute, xmllint verwendet die gleichen zugrunde liegenden Bibliotheken (libxml2, etc) wie alles andere. Es widerspricht der Vorstellung, dass ein anderes Front-End derselben Bibliothek zu anderen Ergebnissen führen würde.

2

rnv ist sehr schnell, frei (wie in Redefreiheit) und läuft auf der Kommandozeile (so kann Perl es leicht aufrufen). Meistens sind die Nachrichten in Ordnung. Leider scheint es nicht mehr gepflegt zu werden.

2

Ich bin der Autor von RNV. Es wird auf sourceforge.net gepflegt, und es gibt einen Betreuer, der sich um die Builds von sourceforge und debian package kümmert. Tatsache ist, dass der Code nicht geändert wird, weil der Code stabil ist. Es wurden keine Fehler gemeldet.

+1

Das ist eindeutig nicht wahr. Zum Beispiel wurde der Fehler xsd: anyURI, den ich im Februar 2006 gemeldet hatte, komplett ignoriert. Der Fehler ist, dass URI mit @ oder, wie http://www.lemonde.fr/web/article/0,[email protected],[email protected],0.html falsch sind verweigert. http://www.w3.org/TR/xmlschema-2/#anyURI – bortzmeyer

3

Hamcrest Schema können Sie XML-Dokumente gegen RelaxNG mit Hamcrest Matchers validieren.