Interprete uma regra aplicando várias consultas XPath em vários documentos XML
-
21-09-2019 - |
Pergunta
Preciso construir um componente que levaria alguns documentos XML em entrada e verificar o seguinte tipo de regras:
XML1:/bookstore/book[price>35.00] != null
and (XML2:/city/name = 'Montreal'
or XML3://customer[@language] contains 'en')
Basicamente, meu componente deve ser capaz de:
- Substitua os tokens XML pelo documento XML correspondente (antes do cólon)
- Aplique a consulta XPath neste documento XML
- Verifique a saída XPath contra o resultado esperado ("=", "! =", "contém")
- Siga a sintaxe básica ("e", "ou" e parênteses)
- diga se a regra é verdadeira ou falsa
Você conhece alguma biblioteca que poderia me ajudar? Talvez Javacc?
Obrigado
Solução 2
Alguém na lista de discussão Javacc me apontou para a direção certa, mencionando Schematron. Isso me levou a Probatron que parece ser a melhor implementação de Java disponível.
O site da Schematron afirma que o idioma suporta "saltar links e entre documentos XML para verificar as restrições", mas parece que o probatron não permite isso. Posso não ajustá -lo ou encontrar um truque para isso (como criar um documento XML temporário contendo todos os meus documentos de origem). Além disso, parece que o probatron é a biblioteca certa para mim.
Outras dicas
Para avaliar o XPaths, eu recomendo Jaxen.
Jaxen é uma biblioteca XPath de código aberto escrito em Java. É adaptável a muitos modelos de objetos diferentes, incluindo DOM, XOM, DOM4J e JDOM. Também é possível escrever adaptadores que tratam árvores não xml, como o código Java Byte compilado ou o feijão Java como XML, permitindo que você consulte essas árvores com XPath também.
o Java XPath API (Java 5 / javax.xml.xpath) também é uma opção, mas ainda não tentei.