WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 十三 查询之AST和QT 阅读

深入浅出 jackrabbit 十三 查询之AST和QT

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 一段很长的代码,这段代码的主要作用是将AST,深入浅出 jackrabbit 十三 查询之AST和QT(4),也就是SimpleNode组成的tree转换成QueryNodeTree,原来节点的类型在simplenode中是以id来表示,xpath语句的语义已经被清晰的划分开,接下来,而在转换之

一段很长的代码,这段代码的主要作用是将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 
):

深入浅出 jackrabbit 十三 查询之AST和QT 

从上图看出,一条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); 
}

上一页  1 2 3 4 5 6  下一页

Tags:深入浅出 jackrabbit 十三

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接