深入XSL(1)(转)

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

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

样式表包含了一套模板的规则集合.一个模板规则有两个部分:匹配源树中节点的模式(pattern)以及实例化(instantiated)后组成部分结果树的模板(template).它允许一个样式表可用于有类似源树结构的一大类文档.一个模板包含一些元素,它们规定了文字结果的元素结构.一个模板还可以包含作为产生结果树片段的指令元素.当一个模板实例化后, 执行每一个指令并置换为其产生的结果树片段.指令能够选择并处理后代的元素. 通过查找可应用的模板规则然后实例化其模板,后代的元素处理后产生了结果树片段.元素只有在被执行的指令选中才作处理.在搜索可用模板规则过程中,不止一个模板规则可能匹配给定元素的模式.然而,仅应用一个模板的规则.决定采用哪一规则的方法在"模板规则的冲突决定"中说明.XSL用XML的名域(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的样式表导入的元素,定义宏的元素,定义全局常量的元素,以及识别源属性为个别元素标记的元素.

---------------------------------------------------------------------------

时间: 2024-11-05 02:44:01

深入XSL(1)(转)的相关文章

深入XSL(3)---模板规则和模式(转)

模板   深入XSL(3)---模板规则和模式翻译:孙一中  模板规则 模板规则由xsl:template元素来规定."match"属性标识了规则应用的源节点(集).xsl:template. 例如:一个XML文档可能包含下面的内容: This is an <emph>important</emph> point. 下列的模板规则匹配emph类型的元素,另有一个模板产生一fo:sequence 格式化对象,其font-weight属性为粗体(bold). <

怎样使用XSL和正则表达式来验证数据的有效性(一)

数据|正则 系列之十七:如何使用XSL和正则表达式来验证数据的有效性XSL现在正在逐渐的成为XML中的类似与SQL在数据库设计中的地位.虽然Microsoft's XSL仅仅是实现了其中的某一些部分的功能但是你已经能够实现非常复杂的查询了虽然现在的XSL仅仅还只是一种基于纯粹文本和字符串方式的查询语言在下面介绍的例子中,将大量使用到文本内的字符串方式的搜索,你会发现在XML中对数据的处理很大一部分都是要使用到文本内的查询的.这在XSL的编写中是一件非常普及的功能.正是因为这样,你应该了解一些正则

快速通过XSL转换XML文件

XML可以只注重数据与文件格式的描述,而显示方面的工作就交给排版样式表.排版样式表分:CSS和XSL.其中XSL非常适合XML.   最近,我喜欢上了XML编程,但又苦于它的美观程度又不够,找了许多书才搞定. 用XML好是蛮好,但它还是不太适合做显示数据的语言.(比起HTML要查多了!) XML文件作出来的东西看起来并不是那么美观,但还是可以找到补救的方法. XML可以只注重数据与文件格式的描述,而显示方面的工作就交给排版样式表. 排版样式表分:CSS和XSL.其中XSL非常适合XML.(在这里

用XSL翻译Web服务应用程序

web|web服务|程序 Web服务应用程序存在的一个常见问题是,真正的后端软件不支持XML(或者至少不支持你Web服务所使用的标准化的XML).要解决这个问题,很多架构都实施了一个翻译阶段,用来解释收到的XML,并将它转换成为后端系统能够识别的更加适当的格式.虽然将XML翻译成不同的格式有很多种方式法,但是可扩展样式表语言(eXtensibleStylesheet Language,XSL)提供了一个强健的.标准的和对XML友好的解决方案. 一些常见的问题 在XML消息和将要处理它的应用程序之

如何快速通过XSL转换XML文件

xml|转换 最近,我喜欢上了XML编程,但又苦于它的美观程度又不够,找了许多书才搞定. 用XML好是蛮好,但它还是不太适合做显示数据的语言.(比起HTML要查多了!) XML文件作出来的东西看起来并不是那么美观,但还是可以找到补救的方法. XML可以只注重数据与文件格式的描述,而显示方面的工作就交给排版样式表. 排版样式表分:CSS和XSL.其中XSL非常适合XML.(在这里不讨论CSS!) 现在开始转换吧! XSL包含两大部分:XSLT和XSL Formatting Object XSLT(

XML文件的显示——CSS和XSL

css|xml|显示 CSS(叠层样式表)和XSL(可扩展样式语言)都可以定义XML文件的显示,这两种方式有哪些不同以及它们在使用中的具体方法,我们将在本文给予介绍. 在XML文件中,使用的基本上是自定义的标记,显然一个浏览器是无法理解这些标记的,现在,浏览器仅仅是作为一个XML文件的解析器--只要你的XML文件是Well-Formed的,那么它就将文件原封不动地给你显示出来.在XML中内容与表现形式是分开的,在一个XML的源文件中并没有关于它表现形式的信息.XML的最大特点就是揭示了信息本身的

在 XSL/XSLT 中实现随机排序

排序|随机 和数据库排序一样,XSL/XSLT也可以实现随机排序,原理也很简单,下面就是代码. <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt"  xmlns:eMeng="http://dotnet.asp

XSL系列函数详解

函数|详解 转载于:中国XML论坛 本期介绍多个XSL对于VBScript.JScript增加的方法.属性,以充分发挥XML的优势,用于< xsl:script >.< xsl:eval >标记内表达式的编写或< xsl:if >.< xsl:when >的expr属性. 一.absoluteChildNumber  含义:返回结点相对于它所有的兄弟(不论名字是否相同)的序号 语法:absoluteChildNumber(node) 参数:node ── 对

用XSL和ASP实现分页功能

分页 asp文件大致结构:<%@ Language=VBScript %><!-- #include file=include/lib.asp --><%cc=server.MapPath("trans.xml")set source=server.CreateObject("msxml2.domdocument")source.async=falsesource.load(cc) xslfile=server.MapPath(&quo

XSL学习心得 - 制作图像超链接

链接|心得 这是我今天学习的时候遇到的另一个问题,做图像超链接要把链接地址放到<a>的href属性中去,可是这就是在标签中套标签,是不可以的,查了<Web编程实做教程>,才知道正确的解决方案,现在与大家分享. 此段代码运行需要两张图片:a.gif和b.gif. my.xml 以下内容为程序代码: <?xml version="1.0" encoding="GB2312"?><?xml-stylesheet type=&quo