【问题标题】:is there a generic query language for arbitrary sets independent from a programming language?是否有独立于编程语言的任意集合的通用查询语言?
【发布时间】:2014-03-28 14:08:30
【问题描述】:

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

详细来说,这将是通用语言(如 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:任何平台或编程语言的清晰的语言定义和解析器/工具。

【问题讨论】:

  • 那么,数据库?实际上有十亿美元的行业和几个主要的开源项目解决了这个问题的许多变化。
  • 不,我不是在寻找数据库,而是在寻找通用集的标准查询语言(而不是带有表和字段的数据库)
  • 为什么不能将这些集合建模为表并编写 SQL 查询?
  • 这确实是一个选择。但我希望看到比 SQL 更简洁、更专注于我想要实现的目标的东西。因此,如果您将此查询语言视为接口,假设是一个 std::set 我不想提出虚拟表或字段只是为了符合 SQL 数据库(这将是一种解决方法而不是良好的设计)
  • 至少对于 java/scala 来说,metamodel.apache.org 似乎提供了一些类似的东西:(编辑:参见他们在该页面上的示例)。我觉得这可以很容易地推广到其他语言(希望在他们的路线图上)

标签: set cross-platform cross-language


【解决方案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

库会将其解析为结构化的 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),但我想可以很容易地实现。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    RSQL 现在是一个不错的选择。有很多可用的解析器,并且查询是 URL 友好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2017-08-10
      • 2014-11-06
      相关资源
      最近更新 更多