是否存在独立于编程语言的任意集合的通用查询语言?

fra*_*ans 6 cross-platform cross-language set

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

详细来说,这将是 Java、C++、Python 等常见语言的语言定义和实现。

正如所评论的,我不是在寻找数据库或集合表示的任何实现,而只是寻找一种定义元素查询的方法,例如Pythonstd::set/vectorset()任何可以视为集合的线性结构。

一个类似的例子是jLinq之类的东西,但不依赖于 JSON 或 javascript,并且具有明确定义的字符串表示形式。

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

所以我想用 Java 或 C++ 编写类似于

q = query()
.created_after("14.03.2010")
.and(contains("hello")
     .or(contains("hallo")))
.sort("caption")
Run Code Online (Sandbox Code Playgroud)

或写为字符串:

"(created_after("14.03.2010") and ( contains("hello") or contains("hallo"))) sort("caption")"
Run Code Online (Sandbox Code Playgroud)

(这没有经过深思熟虑 - 只是为了展示界面的外观)

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

Isa*_*aac 1

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

我找到了nodejs的search-query-parser(我不是作者)。还没有尝试过,但看起来很有希望。文档中的示例非常说明性,您将从 UI 收到一个输入字符串

from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos
Run Code Online (Sandbox Code Playgroud)

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

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

您可以从该对象构建查询命令并向数据库发出查询命令。正如您所看到的,它处理列表和范围。我立即看不到任何布尔运算符(AND,OR),但我想可以很容易地实现。

希望这可以帮助。