2010-03-19 33 views
1

j'ai besoin de construire un composant qui prendrait quelques documents XML en entrée et vérifier le type de règles suivantes:Interprétez une règle l'application de plusieurs requêtes XPath sur plusieurs documents XML

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

Fondamentalement, mon composant devrait être en mesure à:

  • remplacer les jetons XML avec le document XML correspondant (avant deux points)
  • appliquer requête XPath sur ce document XML
  • che ck la sortie xpath contre le résultat attendu ("=", "! =", "contient")
  • suivre la syntaxe de base ("et", "ou" et parenthèses)
  • dire si la règle est vraie ou fausse

Connaissez-vous une bibliothèque pour m'aider? peut-être JavaCC?

Merci

Répondre

0

Quelqu'un sur la liste de diffusion JavaCC m'a indiqué la bonne direction, en mentionnant Schematron. Il m'a conduit à Probatron qui semble être la meilleure implémentation Java disponible.

Le site web de Schematron prétend que le langage prend en charge "le saut à travers les liens et entre les documents XML pour vérifier les contraintes" mais il semble que Probatron ne le permette pas. Je ne peux pas le modifier ou trouver un truc pour cela (comme construire un document XML temporaire contenant tous mes documents sources). En dehors de cela, il semble que Probatron soit la bonne bibliothèque pour moi.

0

Pour évaluer XPath Je recommande JAXEN.

Jaxen est une bibliothèque XPath open source écrit en Java. Il est adaptable à beaucoup de différents modèles d'objet, comprenant DOM, XOM, dom4j, et JDOM. Est-il également possible d'écrire des adaptateurs qui traitent des arbres non-XML tels que Java octet compilé ou Java beans comme XML, vous permettant ainsi d'interroger ces arborescences avec XPath aussi.

Le Java XPath API (Java 5/javax.xml.xpath) est également une option, mais je n'ai pas encore essayé.

+0

Pour la partie xpath, je pensais utiliser l'API JDK. Selon le benchmark suivant, il semble plus rapide que les autres bibliothèques et je n'ai pas vraiment de contraintes de performance de toute façon: http://www.asciiarmor.com/post/33736620/java-xpath-1-0-engine-comparison-performance Ma question est plus liée à comment interpréter la règle et orchestrer l'analyse en conséquence. J'aurais dû être plus précis, désolé. – Damien

+0

Je pense que si vous voulez utiliser des noms de fichiers avec XPath, alors vous devriez regarder xquery. Il y a une autre librairie XPath que vous voudrez peut-être explorer, elle s'appelle VTD-XML (dont je suis le coauteur) –

+0

Merci, j'ai vu que schematron est supposé être capable de fonctionner avec xquery au lieu de xpath mais, malheureusement , l'implémentation java (probatron) ne supporte jusqu'ici que xpath. Je vais évaluer tout cela et aussi jeter un oeil à VTD-XML pour construire ma solution. – Damien