跨平台——是否存在一种独立于编程语言的用于任意集合的通用查询语言?



我正在寻找一种方法来定义独立于编程语言或集合类型的集合查询。

详细地说,这将是一个通用语言的语言定义和实现,如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:明确的语言定义和适用于任何平台或编程语言的解析器/工具。

我知道这是一个老问题,但我想我知道你的意思,我实际上是在寻找类似的东西。你需要的是一个"搜索查询分析器"。

我找到了nodejs的搜索查询解析器(我不是作者)。我还没试过,但看起来很有希望。文档中的示例非常说明问题,您将从UI

接收一个输入字符串。
from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos

库将其解析为结构化json对象

{
  from: ['hi@retrace.io', 'foo@gmail.com'],
  to: 'me',
  subject: 'vacations',
  date: {
    from: '1/10/2013',
    to: '15/04/2014'
    },
  text: 'photos'
}

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

RSQL是一个很好的选择。有很多可用的解析器,查询是URL友好的。

相关内容

  • 没有找到相关文章

最新更新