是否有用于表达复杂搜索查询的XML元语言?

时间:2010-11-24 11:27:53

标签: xml search metaprogramming

在过去几年中,我们用于修改和搜索数据库的许多内部API已经越来越多地与它们所支持的前端的特定需求和应用逻辑纠缠在一起。为了应对这种趋势,我们决定逐步将这些API移动到具有稳定且简洁的接口的Web服务。这一步的另一个原因是API最初是为传统网站设计的,而现在它们越来越多地被AJAX应用程序,iPhone应用程序,外部客户等使用。

在制定此流程的详细信息时,我们意识到我们计划提供的主要功能之一是通过各种类型的资源(例如人员,文档和位置)进行相当复杂的搜索。

现在,很明显搜索的细节在很大程度上取决于搜索空间。然而,有许多普遍存在的元概念。例如,逻辑运算符连接搜索谓词和这些操作的层次结构(大括号)和优先级规则;范围查询数值,正则表达式匹配字符串,等等。鉴于这些概念,XML立即浮现在脑海中,作为查询的充分表示(DSL也是如此,但我认为在我们的案例中,这太过于枪支了。)

所以我的问题是:是否有一种XML元语言可以基于我们自己的特定于域的方言来表达这样的查询?还是有其他可能性到目前为止还没有超出我们的想法吗?

2 个答案:

答案 0 :(得分:1)

可以使用您自己的函数等扩展XQuery,但这不是完全基于XML的(它使用 XML,但本身不是XML)。

答案 1 :(得分:1)

以下架构在GIS世界中广泛使用:

以下是一个例子:

  <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>

这可以在关系数据库以及面向文档的数据库中处理,也可以像Lucene一样使用全文索引进行处理。