Интерпретировать правило, применяя несколько запросов xpath к нескольким документам XML - PullRequest
1 голос
/ 19 марта 2010

Мне нужно создать компонент, который будет принимать на вход несколько XML-документов и проверять следующие правила:

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

В основном мой компонент должен уметь:

  • заменить токены XML соответствующим документом XML (перед двоеточием)
  • применить запрос xpath к этому XML-документу
  • проверить вывод xpath по ожидаемому результату ("=", "! =", "Содержит")
  • следовать базовому синтаксису («и», «или» и скобки)
  • скажите, является ли правило истинным или ложным

Знаете ли вы какую-нибудь библиотеку, которая могла бы мне помочь? может быть JavaCC?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 марта 2010

Кто-то из списка рассылки JavaCC указал мне правильное направление, упомянув Schematron .Это привело меня к Probatron , который, кажется, является лучшей доступной реализацией Java.

Сайт Schematron утверждает, что язык поддерживает «переход между ссылками и между документами XML для проверки ограничений», но кажется,Пробатрон не позволяет этого.Я могу не настраивать его или не находить хитрость для этого (например, создание временного XML-документа, содержащего все мои исходные документы).Кроме того, похоже, что «Пробатрон» - подходящая мне библиотека.

0 голосов
/ 19 марта 2010

Для оценки XPATH я рекомендую JAXEN .

Jaxen - библиотека XPath с открытым исходным кодом написано на Java. Это адаптируется к много разных объектных моделей, включая DOM, XOM, dom4j и JDOM. Можно ли также написать адаптеры которые обрабатывают не XML-деревья, такие как скомпилированный Java-байт-код или Java-бины как XML, что позволяет вам делать запросы эти деревья тоже с XPath.

Java XPath API ( Java 5 / javax.xml.xpath ) также вариант, но я еще не пробовал.

...