【问题标题】:Which tools or libraries support execution of containment queries for trees?哪些工具或库支持对树执行包含查询?
【发布时间】:2012-08-22 09:31:32
【问题描述】:

我一直在开发一种包含查询语言的实现,它的文档非常有限,并且没有可用作指南的参考实现。 包含语言查询树结构中是否存在树模式,语法如下:

A CONTAINS B CONTAINS ((C contains A) AND (C CONTAINS D))

A、B、C 和 D 是树节点的类型,或者从更通用的角度来看,它们是节点的标签。 A CONTAINS B 表示 A 在树中的某处下方有一个子 B。

实现需要返回使用上述语句查询的树实例的所有匹配子树(表示部分定义的树)。它还需要考虑模式出现的组合,例如,在上面的查询中,如果 C 在其下方有 2 个 A 实例,则 C-A1 与 CD 和 C-A2 与 CD 是两个不同的匹配项等。

我已经设计了自己的解决方案,但我没有任何可以用作参考的东西,甚至在我的代码旁边的回归测试中更好,以确保我的实现始终如一且正确地运行。

最棘手的一点是查询语言中的逻辑运算符。我将研究使用 XML 作为参考实现的 XQuery(此时不确定它是否可以做我想做的事情),但我也很想听听其他选项。开源会很棒,但即使是专有工具也能胜任。支持这种类型查询的图形数据库,也许是一些带有 RDF 的语义工具等?

【问题讨论】:

  • 上面给出的语法示例以关联方式使用 CONTAINS 运算符,尽管它不返回与其操作数(树)具有相同类型(布尔)的结果。 A CONTAINS B CONTAINS C 的预期语义是什么?是(A 包含 B)和(B 包含 C)吗?谢谢!
  • 是的,A 在其子节点(s 子节点等)下方的某个位置有一个子 B 节点,并且此 B 节点以相同的方式有一个 C 节点。它是一种父子关系。这实际上是我实现原型查询语言的一部分:openehr.org/wiki/display/spec/…

标签: search graph tree xquery


【解决方案1】:

我尝试使用 XQuery(Zorba 实现)进行概念验证:

http://www.zorba-xquery.com/html/demo#f63nK4ICLH22

我希望这会有所帮助。

【讨论】:

  • 哇!非常感谢您的努力!
  • 不客气!它有点有限,代码中可能会出现一些错误,但我希望它可以帮助您入门。查询中的对象和数组是 Zorba 的 JSONiq 扩展的一部分,它们可以用作中间数据结构。
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多