2014-03-28 28 views
2

我正在寻找一种方法来独立于编程语言或集合的种类来定义集合上的查询。是否有一种通用的查询语言,用于独立于编程语言的任意集?

具体,这将是一个语言定义和像Java,C++,Python的等

正如评论我寻找一个数据库或一组代表性的任何实现,但共同的语言实现只有通过定义才能查询元素来自例如一个std::set/vector Python set()或任何可以看作一个集合的线性结构。

一个接近的例子就像jLinq,但没有绑定到JSON或JavaScript,并有一个良好定义的字符串表示。

当然,如果不知道数据结构的类型,您将不得不为每个问题和每种编程语言实现任何条件过滤器,但是构造查询字符串的方式以及如何评估它们将是明确的,您不必编写解析器。

所以想什么,我在Java或C++写的是一样的东西

q = query() 
.created_after("14.03.2010") 
.and(contains("hello") 
    .or(contains("hallo"))) 
.sort("caption") 

或作为字符串写入:

"(created_after("14.03.2010") and (contains("hello") or contains("hallo"))) sort("caption")" 

(这不是经过深思熟虑 - 只是为了说明什么一个接口可能看起来像)

不同问题的一个很好的例子是JSON或XML:清晰的语言定义和任何平台或编程语言的解析器/工具。

+0

那么,一个数据库?几乎有十亿美元的产业和几个主要的开源项目解决了这个问题的许多变化。 – delnan

+0

不,我不是在寻找一个数据库,而是寻找一个通用集的标准查询语言(而不是数据库中的表和字段) – frans

+0

为什么你不能将这些集建模为表并编写SQL查询? – delnan

回答

1

我知道这是一个古老的问题,但我想我知道你的意思,我实际上是在寻找类似的东西。你需要的是一个“搜索查询解析器”。我发现search-query-parser为nodejs(我不是作者)。有没有尝试过,但看在Docs是非常illustraring promising.The例如,您可以从UI

from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos 

接收输入字符串,该库将其解析为结构化JSON对象

{ 
    from: ['[email protected]', '[email protected]'], 
    to: 'me', 
    subject: 'vacations', 
    date: { 
    from: '1/10/2013', 
    to: '15/04/2014' 
    }, 
    text: 'photos' 
} 

而从那个对象,你可以构造并发出一个查询命令到你的数据库。正如你可以看到它处理列表和范围。马上我看不到任何布尔运算符(AND,OR),但我想可以很容易地实现。

希望这会有所帮助。

相关问题