Интерпретация правила, применяющего несколько запросов XPath к нескольким документам XML.
-
21-09-2019 - |
Вопрос
Мне нужно создать компонент, который будет принимать на вход несколько 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
Кто-то из списка рассылки JavaCC указал мне правильное направление, упомянув Схематрон.Это привело меня к Пробатрон это кажется лучшей доступной реализацией Java.
На веб-сайте Schematron утверждается, что язык поддерживает «переход по ссылкам и между XML-документами для проверки ограничений», но, похоже, Probatron этого не позволяет.Возможно, я не буду его настраивать или искать какой-нибудь трюк (например, создавать временный XML-документ, содержащий все мои исходные документы).Кроме того, похоже, что Probatron — подходящая мне библиотека.
Другие советы
Для оценки XPATH я рекомендую ДЖАКСЕН.
Джаксен это библиотека с открытым исходным кодом XPath, написанная на Java.Он адаптируется ко многим различным моделям объектов, включая DOM, XOM, DOM4J и JDOM.Возможно ли писать адаптеры, которые рассматривают не XML-деревья, такие как скомпилированный байтовый код Java или бобы Java как XML, что позволяет вам запросить эти деревья с XPath.
А API Java XPath (Java 5/javax.xml.xpath) тоже вариант, но я еще не пробовал.