深入浅出 jackrabbit 十三 查询之AST和QT
2009-09-17 00:00:00 来源:WEB开发网简介:在前面的文章中,ahuaxuan已经指出jackrabbit查询的主体流程,主体流程只能帮助大家稍微了解一下jackrabbit的 query module,要深入理解还得深入探索主体流程中的每一步。在这篇文章中ahuaxuan将着重描述AST的生成和QT(querynode tree)的生成。
回顾上一篇文章,我们可以知道jackrabbit中的查询手段之一:xpath。下面我们还拿上一篇文章的xpath示例:
Java代码
String queryPath2 =//hello/test3 [jcr:contains(@name, 'aa') and jcr:contains(@content, 'Maven') or @data1 = 'ahuaxuan'] order by jcr:score() descending, @name ascending
这句话的意思是:得到在world节点中包含Maven这个字符串的节点,并且按照jcr:score()降序,name这个property升序。和sql语句非常类似。
我们知道jackrabbit是通过lucene来执行查询任务,那么lucene是怎么知道这个语句中包含什么信息的呢。
要得到这个答案,我们不得不捡起我们的基础学科,编译原理。编译的目的是把一种语言翻译成另外一种语言,比如java的源代码需要编译成字节码,这个就是通过编译技术实现,很遗憾,字节码并不是机器语言,不能直接执行,所以字节码会被再次编译,生成机器语言。运行过程中,这些编译之后的代码也有可能再次被重新优化编译。所以天天使用java的同志们,还是要了解一下编译的作用。
有点偏题了,那么现在我们的目的是什么,就是把这个xpath语言翻译成另外一种语言。翻译成java中的数据结构,然后用户可以通过开发处理这些数据结构的代码来解析和使用这些数据结构,这里讲到的数据结构就是QT(其实QT也是一个语法树,只是这颗语法树能够让程序直接识别)。
Tags:深入浅出 jackrabbit 十三
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接