Frage

Ich brauche eine Komponente zu erstellen, die ein paar XML-Dokumente in der Eingabe nehmen und überprüfen Sie die folgende Art von Regeln:

XML1:/bookstore/book[price>35.00] != null 
and (XML2:/city/name = 'Montreal'
     or XML3://customer[@language] contains 'en')

Grundsätzlich sollte meine Komponente der Lage sein:

  • ersetzt die XML-Token mit dem entsprechenden XML-Dokument (vor Kolon)
  • anwenden XPath-Abfrage auf diesem XML-Dokument
  • überprüfen Sie den XPath-Ausgang gegen erwartetes Ergebnis ( "=", "! =", "Enthält")
  • folgt der grundlegende Syntax ( "und", "oder" und Klammern)
  • sagen, ob die Regel wahr oder falsch ist

Kennen Sie eine Bibliothek, die mir helfen könnte? vielleicht JavaCC?

Danke

War es hilfreich?

Lösung 2

Jemand auf der JavaCC Mailingliste wies mich in die richtige Richtung, zu erwähnen Schematron . Es führte mich zu Probatron , welche die beste Java-Implementierung zur Verfügung zu sein scheint.

Schematron Website behauptet, dass die Sprache unterstützt „Sprung über Links und zwischen XML-Dokumenten Einschränkungen zu überprüfen“, aber es scheint, dass Probatron nicht gestattet. Ich kann es nicht zwicken oder einen Trick dafür (wie der Aufbau ein temporäres XML-Dokuments enthält alle meine Quelldokumente) finden. Abgesehen davon sieht es Probatron die richtige Bibliothek für mich ist.

Andere Tipps

Für XPATHs Auswertung Ich empfehle Jaxen .

  

Jaxen ist eine Open-Source-XPath-Bibliothek   in Java geschrieben. Es ist anpassungsfähig an   viele verschiedene Objektmodelle,   einschließlich DOM, XOM, dom4j und JDOM.   Ist es auch möglich, Schreib Adapter   dass treat Nicht-XML-Strukturen wie   kompilierten Java-Byte-Code oder Javabeans   wie XML, so dass Sie damit zu Abfrage   diese Bäume mit XPath zu.

Die Java XPath API ( Java 5 / javax.xml.xpath ) ist auch eine Option, aber ich habe es noch nicht ausprobiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top