深入浅出 jackrabbit 十三 查询之AST和QT
2009-09-17 00:00:00 来源:WEB开发网一段很长的代码,这段代码的主要作用是将AST,也就是SimpleNode组成的tree转换成QueryNodeTree,原来节点的类型在simplenode中是以id来表示,而在转换之后的QueryNodeTree中,则是以QueryNode的类型来决定。
综上所述,在这个部分中,通过vistor的模式,不停的自顶向下遍历AST上的节点,同时根据节点的类型来生成QT上的节点。
这样AST遍历完成之后,我们也得到了我们需要的QT,接下来就是这么使用QT的问题了。
我们来仔细审视一下QT的结构,如下图所示(该QT对应的xpath语句是://hello/test3
Java代码
[jcr:contains(@name, 'aa') and jcr:contains(@content, 'Maven') or @data1 = 'ahuaxuan'] order by jcr:score() descending, @name ascending
):
从上图看出,一条xpath语句最终被解析成一颗树,而这颗树代表着查询的条件,排序信息等等。
最重要的一个节点QueryRootNode,它连同它的children代表着一条xpath语句,这个时候,xpath语句的语义已经被清晰的划分开。接下来,就是QueryNode的Visitor上场了。我们来看看它的Visitor:
Java代码
public interface QueryNodeVisitor {
Object visit(QueryRootNode node, Object data);
Object visit(OrQueryNode node, Object data);
Object visit(AndQueryNode node, Object data);
Object visit(NotQueryNode node, Object data);
Object visit(ExactQueryNode node, Object data);
Object visit(NodeTypeQueryNode node, Object data);
Object visit(TextsearchQueryNode node, Object data);
Object visit(PathQueryNode node, Object data);
Object visit(LocationStepQueryNode node, Object data);
Object visit(RelationQueryNode node, Object data);
Object visit(OrderQueryNode node, Object data);
Object visit(DerefQueryNode node, Object data);
Object visit(PropertyFunctionQueryNode node, Object data);
}
Tags:深入浅出 jackrabbit 十三
编辑录入:爽爽 [复制链接] [打 印]赞助商链接