【问题标题】:A tree query language for in-memory trees of objects?用于内存中对象树的树查询语言?
【发布时间】:2012-04-04 16:51:46
【问题描述】:

有哪些选择,最好是在 Java 中?

我见过JXPath 将XPath 扩展到对象。还有什么吗?

编辑:通过树查询语言,我的意思是一种可以创建匹配已组织成树的对象(通过任何属性)的表达式的语言。

Edit2:示例:

假设我有这些对象的树:

public interface Node {
  String getName();
  int getValue();
  String getSomeOtherAttribute();
  List<Node> getChildren();
  Node getParent();
}

现在想象一下这些的层次结构。我正在寻找的是可以在这棵树中查询实例的东西。例如“给我所有名称为“bar”、值小于 100 且父节点为“foo”且父节点的父节点为“joe”的 Node 实例。所有这些都用一种简洁的语言。

正如我所说,JXPath 是一种选择。寻找他人。我没有找到。

顺便说一句,我认为 JXPath 查询看起来像“//joe/foo/bar[@value

someroot
    |
   joe
 / | \
c  d  foo
     / \
    f   bar,99   

【问题讨论】:

  • 请说明您希望使用此查询语言实现的目标。有很多选择,这将有助于了解您的要求。
  • 正如 Michael Slade 所说,您的用例将决定什么对您更有效。例如,JSoup 有很多用于处理 HTML 的工具,但假设它使用的 everything 是 HTML 并且不适合大多数 XML(树也可以用很多其他方式表示) .
  • 有趣的问题,但是为什么你需要一种“语言”呢?只需编写一个树遍历算法,它会根据指定的条件进行检查。查询语言也会为您做同样的事情,只是将其抽象出来。很想知道,用例是什么?这将适用于类似列表的 DS。不确定树结构:code.google.com/p/sbql4j
  • 我需要一种语言,因为用户希望能够编写自己的查询。如果你有传递给遍历算法的外部化表达式,那么基本上你就有了一种查询语言。
  • 好的,我不确定您的详细用例,但是在代码级别提供它可能很难支持。为什么不为该树提供 Web API 并使用 eBay 的 ql.io 进行查询。 ql.io 将这些查询转换为 Web 服务调用。

标签: java tree


【解决方案1】:

对于您自己创建的树结构,您可以应用Visitor Pattern。让您的节点接受访问者并编写各种访问者来检查标准并收集您的对象。

使用访问者还意味着您的代码将是类型安全,而不是字符串内的查询。如果您重命名 getter 方法,IDE 将在所有访问者中重命名它们,您的代码仍然可以工作。如果您的查询在字符串中,它可能会中断。

除了 JXPath 之外,还有 JoQL 使用类似 SQL 的语言来查询对象,但它并不是真正为树型结构而设计的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多