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

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

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 在jackrabbit中,使用了javacc来生成AST,深入浅出 jackrabbit 十三 查询之AST和QT(2),关于javacc的使用请google之,它的词法文件在源码中可以找到,口说无凭,有图为证: 图片看不清楚?请点击这里查看原图(大图),XPath.jj, AST在生成之后

在jackrabbit中,使用了javacc来生成AST,关于javacc的使用请google之,它的词法文件在源码中可以找到,XPath.jj。

AST在生成之后,是怎么转换成QT的呢?要回答这个问题,我们必须要理解一个设计模式,vistor模式

因为在AST转换成QT,以及从QT转成lucene的query对象时都使用了vistor,在asm中也是使用vistor,emma中也是使用vistor,看来它很火,口说无凭,有图为证:

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

图片看不清楚?请点击这里查看原图(大图)。 

从上图中可以看到在处理SimpleNode的时候使用了XPathVisitor,而在处理QueryNode的时候使用QueryNodeVistor.

一个简单的vistor模式如下:

Java代码   

package org.apache.jackrabbit.core.query.xpath; 
 
public interface XPathVisitor 
{ 
 public Object visit(SimpleNode node, Object data); 
} 
 
public class SimpleNode implements Node { 
  protected Node parent; 
  protected Node[] children; 
  protected int id; 
  protected XPath parser; 
 
  /** 
   * Accept the visitor. * 
   */ 
  public Object jjtAccept(XPathVisitor visitor, Object data) { 
    return visitor.visit(this, data); 
  } 
 
  /** 
   * Accept the visitor. * 
   */ 
  public Object childrenAccept(XPathVisitor visitor, Object data) { 
    if (children != null) { 
      for (int i = 0; i < children.length; ++i) { 
        data = children[i].jjtAccept(visitor, data); 
      } 
    } 
    return data; 
  } 
}

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

Tags:深入浅出 jackrabbit 十三

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