在浏览器下得到的显示结果等价与上述的html代码,这里涉及到了3个文档,即原来的X
ML文档,附加在XML文档之上的XSLT文档以及最终浏览器处理的HTML文档,2个处理器即
将XML转换成HTML的XSLT处理器和浏览器,在这里浏览器不在我们的讨论范围之内,我们
将重点研究XSLT处理器怎样在XSLT文档的引导下,将XML文档转换成XHTML文档。XHTML,
不是HTML吗,怎么变成了XHTML,是的,转换的结果其实都是XHTML,而不是HTML,之所
以写成HTML是出于简单的考虑,并且在实际上,除了语法上更严谨意外XHTML和HTML没有
什么不同。
注意刚才提到"XSLT处理器在XSLT的引导下将XML文档转换成HTML文档"。这非常准确地说
明了(不知道怎样算不算自吹自擂)XSLT文档的作用。XSLT文档实际上扮演了这样一个
角色,它规定XSLT处理器对XML文档按它的规定作处理,比如上述的文档中代码<xsl:te
mplate match="/root">,就表示XSLT处理器在遇到XML文档的根元素时按照该元素规定
的方式处理。这样看来XSLT文档具有"领导"的某些性质(可以"光说不做"),具有这种
性质的语言称为声明性的(declarative)语言,它具有如下的两个好处:
处理和对处理的描述分离
表现(处理后的结果)和内容(处理前的数据)分离
这里提到的"处理"具有强大无比的能力,它可以是任意形式的变换,一个经常出现的情
况是XML文档经过XSLT的处理以后变得面目全非。
接下来再看一下XSLT处理器的输入和输出是什么?初看起来这个问题很简单,XSLT处理
器的输入当然是XML文档,输出是HTML文档。但实际上不尽然,因为在不同的角度看XML
文档会有不同的结果,最低层的,XML文档是二进制数据流,在高一点,XML文档是纯文
本,如果站得更高,就可以说XML文档是一些想要表达的信息的集合。对于领导来说,站
得位置当然要高一些更高一些,因此在XSLT文档来看,需要转换的XML是一些信息的集合
,并且XSLT文档将它们看成一个具有树形结构的信息集合,这对于XML这种半结构化的文
档来说最适合不过了,同时组织成树形结构也有利于领导找到某些它感兴趣的东西(比
如说某个元素或者某个属性)。这颗树就称为源树。XSLT处理器的所有后续处理都以这
个源树作为它的输入。这样原来的XML就消失了,XML文档的逻辑结构也消失了,取而代
之的是节点。在XSLT的处理模型中,XML文档中的各个逻辑部分分别对应于不同类型的节
点,例如元素节点、属性节点、文本节点等。XSLT文档则规定了后续处理的细节,任何
XSLT文档中的声明性语句都是针对这个逻辑视图而言的,也就是说XSLT的编写者面对的
XML文档是并仅仅是一个源树,而XSLT文档的作用在于规定从这个树中如何得到和得到什
么样的信息并将这些信息以什么样的方式输出。这样看来,XSLT的输出是什么也是很显
然的,对了,XSLT处理器的输出也是一棵树,这颗树称为结果树(result tree)。按照
XSLT规范的说法,就是"XSLT文档表达了源树怎样转换到结果树"。我们用下图表示整个
转换过程:
