深入XSLT第二章--- 构造结果树概述

简介: 深入XSL--- 构造结果树概述XSL 是表达样式表(stylesheet)的语言.每一个样式表描述了呈现一类XML源文档的规则.呈现的过程包括两部分:第一,由源树建立结果树 (result tree);第二,结果树被解释并在显示器、纸张或以语音等其他的媒体的格式化形式输出.

深入XSL--- 构造结果树概述




XSL 是表达样式表(stylesheet)的语言.每一个样式表描述了呈现一类XML源文档的规则.呈现的过程包括两部分:第一,由源树建立结果树 (result tree);第二,结果树被解释并在显示器、纸张或以语音等其他的媒体的格式化形式输出第一步,构造结果树,是将模式(pattern)与模板(template)相结合实现的模式与源树中的元素相匹配.模板被实例化产生部分结果树.结果树与源树是分离的.结果树的结构可以和源树截然不同.在结果树的构造中,源树可以可以被过滤 和重新排序,还可以增加任意的结构.第二步,格式化,是用该XSL文档规定的格式化词表实现结果树的构造.正规来说,这个词表是一个XML的名域 (namespace).词汇表中的每一种元素类型对应一个格式化对象类.一种格式化对象类表达一种特定的格式化表现方式.例如,(block)格式化 对象类表示将一段的内容拆成一行一行.词汇表的每个属性对应一种格式化特性.格式化对象类有一特殊的格式化特性集合,这样能够更好地控制格式化对象类的表 现方式;例如,在集合各行之前或之后控制行的缩进,行间距.一个格式化对象能拥有内容,而它的格式化表现应用于其内容.

XSL 可以不需要结果树使用格式化词库,这样能够被用作通用的XML传输.例如,XSL能被用来将XML转化为结构良好的HTML,即为采用HTML定义的元素 类型和属性的XML.当结果树采用了格式化词库,相遵循的XSL实现必须能够根据在该文件中定义的格式化词库的语义解释结果树;它也能将结果树具体化为 XML,但没有必要能这样做.

样 式表包含了一套模板的规则集合.一个模板规则有两个部分:匹配源树中节点的模式(pattern)以及实例化(instantiated)后组成部分结果 树的模板(template).它允许一个样式表可用于有类似源树结构的一大类文档.一个模板包含一些元素,它们规定了文字结果的元素结构.一个模板还可 以包含作为产生结果树片段的指令元素.当一个模板实例化后执行每一个指令并置换为其产生的结果树片段.指令能够选择并处理后代的元素通过查找可应用的模板规则然后实例化其模板,后代的元素处理后产生了结果树片段.元素只有在被执行的指令选中才作处理.在搜索可用模板规则过程中,不止一 个模板规则可能匹配给定元素的模式.然而,仅应用一个模板的规则.决定采用哪一规则的方法在"模板规则的冲突决定"中说明.XSLXML的名域(namespaces)来区别属于XSL处理器指令的元素和规定文字结果的树结构的元素.指令元素属于XSL名域.在文档中采用前缀xsl:表示XSL名域中的元素.一个XSL样式表包含了一个xsl:stylesheet稳当元素.该元素可以包含xsl:template元素来规定模板的规则.下面的例子是一个简单的XSL样式表,它为包含emphasis元素的para元素序列构造结果树.result-ns="fo"属性表明正在构造使用格式化对象词库的树.para元素成为了块格式化对象,字体大小为10pt,之前的空格为12pt.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" result-ns="fo">
<xsl:template match="/">
<fo:page-sequence font-family="serif">
<xsl:process-children/>
</fo:page-sequence>
</xsl:template>
<xsl:template match="para">
<fo:block font-size="10pt" space-before="12pt">
<xsl:process-children/>
</fo:block>
</xsl:template>
</xsl:stylesheet>

xsl:stylesheet元素也能包含由其他XSL的样式表导入的元素,定义宏的元素,定义全局常量的元素,以及识别源属性为个别元素标记的元素.


相关文章
|
22天前
|
缓存 JavaScript 前端开发
Node.js模块化的基本概念和分类及使用方法
Node.js模块化的基本概念和分类及使用方法
23 0
|
搜索推荐 Java 索引
【JavaSE】Java基础语法(二十三):递归与数组的高级操作
1. 递归 1.1 递归 递归的介绍 以编程的角度来看,递归指的是方法定义中调用方法本身的现象 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
|
存储 JSON 数据建模
白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系
白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系
76 0
构建系统发育树简述
构建系统发育树简述
168 0
|
JSON 前端开发 JavaScript
【node进阶】深度解析express框架---编写接口|解决跨域问题---下篇
【node进阶】深度解析express框架---编写接口|解决跨域问题---下篇
【node进阶】深度解析express框架---编写接口|解决跨域问题---下篇
|
安全 JavaScript 前端开发
【node进阶】深度解析express框架---编写接口|解决跨域问题---上篇
【node进阶】深度解析express框架---编写接口|解决跨域问题---上篇
|
ice
如何对集成树进行解释?(下)
如何对集成树进行解释?(下)
228 0
如何对集成树进行解释?(下)
如何对集成树进行解释?(中)
如何对集成树进行解释?(中)
287 0
如何对集成树进行解释?(中)
|
机器学习/深度学习 ice Python
如何对集成树进行解释?(上)
如何对集成树进行解释?(上)
189 0
如何对集成树进行解释?(上)
|
设计模式 XML 数据采集
《前端实战总结》之使用解释器模式实现获取元素Xpath路径的算法
前端领域里基于javascript的设计模式和算法有很多,在很多复杂应用中也扮演着很重要的角色,接下来就介绍一下javascript设计模式中的解释器模式,并用它来实现一个获取元素Xpath路径的算法。
311 0