【发布时间】: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/…