2010-03-19 2 views
1

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

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

В основном мой компонент должен быть в состоянии чтобы:

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

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

Благодаря

ответ

0

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

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

0

для оценки XPaths Я рекомендую JAXEN.

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

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

+0

Для части xpath я рассматривал использование API JDK. В соответствии со следующим эталоном это кажется быстрее, чем в других библиотеках, и в любом случае у меня нет ограничений производительности: http://www.asciiarmor.com/post/33736620/java-xpath-1-0-engine-comparison-performance Мой вопрос больше связан с тем, как интерпретировать правило и соответствующим образом проводить парсинг. Я должен был уточнить, извините. – Damien

+0

Я думаю, что если вы хотите использовать имена файлов с XPath, тогда вы должны посмотреть на xquery. Существует еще одна библиотека XPath, которую вы, возможно, захотите исследовать, называется VTD-XML (из которой я являюсь соавтором) –

+0

Спасибо, я видел, что схемат должен работать с xquery вместо xpath, но, к сожалению , реализация java (probatron) поддерживает только xpath. Я собираюсь оценить все это, а также посмотреть VTD-XML, чтобы построить мое решение. – Damien