Saxon 体系结构
树构造器创建源 XML 文档的树表示法。它用于处理源文档和样式表。其中有两个部件:
-
XML 语法分析器 (包
com.icl.saxon.aelfred
)读取源文档,并通知事件,如元素的开始和结束。 -
树构建器 (模块
com.icl.saxon.Builder
)被通知这些事件,并使用它们来构造 XML 文档的内存表示法。
Saxon
处理器的核心是 样式表解释器 (
Controller
类,它实现
JAXP 1.1 中的 javax.xml.transform.Transformer
接口)组合了树模型:
Saxon 提供了两种不同的树实现,每一个都有其自己的构建器和浏览类(
tree
和tinytree
)。这两种实现提供不同的性能取舍。2.1
tree
主要封装了节点Node
,元素(Element),文档(Document)对象的实现模型映射,构建基本树模型。
2.2 t
inytree
树浏览器正如其名,允许应用程序通过浏览层次结构来从树中选择节点.因此使用了大字符串缓冲线性表表结构,可理解为元素迭代器
样式表编译器在执行之前对样式表进行分析。它并不生成可执行代码;而是生成样式表的装饰树 表示法 ,在其中确认和分析这个样式表中的所有
XPath 表达式,并解析所有交叉引用,以及预先分配堆栈框架存储槽,诸如此类。因此,样式表编译器执行构造决策树的重要功能,以便在执行时查找正确的模板规则以处理每个输入节点;试图将每个节点与每个可能的模式进行匹配是非常费时的。然后在转换时,装饰树开始进入角色以驱动样式表处理。
(编译器分布在
saxon.style
软件包的类之间,特别是方法 prepareAttributes()
、 preprocess()
和validate()
。)saxon.style:
定义了一些Xpath的解析类型元素,和样式表的预处理
2.3
样式表预处理
对于Xpath解释器net.sax.expr 则是使用解释器模式根据context参数解析表达式
当我们谈到 t
inytree浏览层次结构来从树中选择节点,那如何进行路径求值
最有特点的
XPath 表达式(XPath 从中获取其名称)是位置路径。位置路径用于选择源树中的节点。位置路径基本上包括起始地址和许多步骤。它类似于 UNIX 文件名或 URL,除了每个步骤选择一组节点而不是单一节点。
Saxon 中对于位置路径使用的优化技术
尽可能避免排序
在saxon中sort
包中实现了很多的排序方式,按组排序,按找表达式排序
待续
参看http://www.ibm.com/developerworks/cn/xml/x-xslt2/