深入浅出 jackrabbit 十三 查询之AST和QT
2009-09-17 00:00:00 来源:WEB开发网在jackrabbit中,使用了javacc来生成AST,关于javacc的使用请google之,它的词法文件在源码中可以找到,XPath.jj。
AST在生成之后,是怎么转换成QT的呢?要回答这个问题,我们必须要理解一个设计模式,vistor模式
因为在AST转换成QT,以及从QT转成lucene的query对象时都使用了vistor,在asm中也是使用vistor,emma中也是使用vistor,看来它很火,口说无凭,有图为证:
图片看不清楚?请点击这里查看原图(大图)。
从上图中可以看到在处理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;
}
}
Tags:深入浅出 jackrabbit 十三
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接