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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top