2010-11-24 18 views
3

Au cours des deux dernières années, beaucoup de nos API internes de modification et de recherche de notre base de données se sont de plus en plus mêlées aux besoins spécifiques et à la logique d'application des frontaux qu'elles alimentent. Pour contrer cette tendance, nous avons décidé de déplacer progressivement ces API vers des services Web avec des interfaces stables et concises. Une autre raison de cette étape est que les API ont été initialement conçues pour les sites Web traditionnels alors qu'elles sont de plus en plus utilisées par les applications AJAX, les applications iPhone, les clients externes, etc. En travaillant sur les détails de ce processus, nous avons réalisé que l'une des principales fonctionnalités que nous prévoyons de fournir est une recherche assez complexe à travers différents types de ressources comme, par exemple, les personnes, les documents et les lieux.Existe-t-il un méta-langage XML pour exprimer des requêtes de recherche complexes?

Maintenant, il est évident que les détails d'une recherche dépendent largement de l'espace de recherche. Il y a cependant beaucoup de méta-concepts qui sont universels. Par exemple, des opérateurs logiques connectant des prédicats de recherche et une structure hiérarchique (accolades) et des règles de précédence pour ces opérations; requêtes de plage pour les valeurs numériques, correspondance d'expressions régulières pour les chaînes, etc. Compte tenu de ces concepts, le XML vient immédiatement à l'esprit comme une représentation adéquate pour une requête (tout comme les DSL, mais je pense que c'est une arme trop grosse dans notre cas). Donc, ma question est la suivante: existe-t-il un méta-langage XML sur lequel nous pouvons baser notre propre dialecte spécifique au domaine pour l'expression de telles requêtes? Ou y a-t-il d'autres possibilités qui ne nous ont pas encore traversé l'esprit?

Répondre

1

Le schéma suivant est largement utilisé dans le monde du SIG:

Voici un exemple:

<ogc:Filter xmlns:gml="http://www.opengis.net/gml"> 
    <ogc:And> 
     <ogc:PropertyIsGreaterThan> 
     <ogc:PropertyName>isoap:CreationDate</ogc:PropertyName> 
     <ogc:Literal>2007-07-31</ogc:Literal> 
     </ogc:PropertyIsGreaterThan> 
     <ogc:Or> 
     <ogc:PropertyIsEqualTo> 
      <ogc:PropertyName>isoap:Type</ogc:PropertyName> 
      <ogc:Literal>service</ogc:Literal> 
     </ogc:PropertyIsEqualTo> 
     <ogc:PropertyIsEqualTo> 
      <ogc:PropertyName>isoap:Type</ogc:PropertyName> 
      <ogc:Literal>application</ogc:Literal> 
     </ogc:PropertyIsEqualTo> 
     <ogc:PropertyIsEqualTo> 
      <ogc:PropertyName>isoap:Type</ogc:PropertyName> 
      <ogc:Literal>dataset</ogc:Literal> 
     </ogc:PropertyIsEqualTo> 
     </ogc:Or> 
    </ogc:And> 
    </ogc:Filter> 

Cela peut être traité dans des bases de données relationnelles ainsi que document- bases de données orientées ou avec l'indexation de texte intégral comme Lucene.

+0

Cela semble intéressant. Bien que, à première vue, il semble que ce soit une spécification très basique. (Ce qui n'est pas une mauvaise chose en soi, mais il semble que ce soit si fondamental que l'utiliser au lieu de le réinventer en fonction de nos besoins ne nous sauverait pas vraiment beaucoup de travail.) – n3rd

1

Il y a XQuery qui peut être étendu avec vos propres fonctions, etc., mais ce n'est pas entièrement basé sur XML (cela fonctionne avec XML, mais n'est pas lui-même XML).

+0

Notez également que tout ce qui est assez puissant pour prendre en charge des requêtes intéressantes sera probablement aussi assez puissant pour causer de vrais problèmes si des utilisateurs non-fiables écrivent des requêtes. Il est temps pour vous de réfléchir à vos modèles de sécurité. –

+0

Point pris. Un modèle de sécurité est bien sûr également sur notre liste de choses à faire. Je connais XQuery, mais je ne suis pas sûr de savoir dans quelle mesure il est applicable dans ce cas car à un certain moment, nous devrons mapper la requête à SQL d'une manière ou d'une autre. Il me semble que l'utilisation de XPath n'est peut-être pas le choix idéal ici (mais je ne suis pas vraiment un expert sur le sujet, alors n'hésitez pas à élaborer!). – n3rd

+0

Eh bien, XQuery est un peu comme SQL pour XML. :-) Il est très capable en effet, et s'appuie sur XPath. Mais je n'ai pas beaucoup d'expérience personnelle avec l'utilisation dans le déploiement; J'envisageais de le faire, mais mon travail est parti dans une direction différente (telle est la vie). –