当输入时,XSL 变换接受以XML 文档表示的树形结构,而输出时,则产生也以XML 文档来表示的新的树形结构。因此,XSL 变换部分也称为树形结构建立部分。输入和输出的内容必须是XML 文档。不能使用XSL 来变换成非XML 格式(如PDF、TeX、Microsoft Word、PostScript、MIDI 或其他)或从非XML 格式进行变换。可使用XSL 将XML 变换为一中间格式(如TeXML),然后使用另外的非XSL 软件来将这个中间格式变换成期望的格式。HTML 和SGML 都是介乎于两者之间的情况,因为它们非常接近于XML。可使用XSL 将符合XML 的结构完整性规则的HTML 和SGML 文档变换成XML 或者相反。但是,XSL 不能处理在大多数Web 站点上和文档生成系统中遇到的各种各样非结构整洁的HTML 和SGML 文档。要牢记的首要问题是,XSL 变换语言对于XML 到XML 的变换是可行的,但对于其他方面则不行。
XSL 文档包含一组模板规则和其他规则。模板规则拥有模式(pattern)以及模板(template),模式用来指定模板规则所适用的树形结构,而模板是用来在与此模式匹配时进行输出。当XSL 处理程序使用XSL 样式单来格式化XML 文档时,它对XML 文档树形结构进行扫描,依次浏览每个子树形结构。当读完XML 文档中的每个树形结构时,处理程序就把它与样式单中每个模板规则的模式进行比较。当处理程序找到与模板规则的模式相匹配的树形结构时,它就输出此规则的模板。这个模板通常包括一些标记、新的数据和从原XML 文档的树形结构中复制来的数据。
XSL 使用XML 来描述这些规则、模板和模式。XSL 文档本身也是xsl:stylesheet 元素。每个模板规则都是xsl:template元素。规则的模式是xsl:template 元素的match 特性值。输出模板是xsl:template 元素的内容。模板中所有的指令都是由一个或另一个XSL 元素来完成的,而这些指令是来完成某种动作,如选择输入树形结构中要包括在输出树形结构的部分。
这些由元素名上的xsl:前缀来标识。没有xsl:前缀的元素为结果树部分。更恰当地说,作为XSL 指令的所有元素都是xsl 命名域的一部分。在那以前,只要了解所有的XSL 元素的名称都是以xsl:开头就可以了。
清单14-2 显示的是一个非常简单的XSL 样式单,它有两个模板规则。第一个模板规则与根元素PFRIODIC_TABLE 相匹配,
它使用html 元素来代替此元素。html 元素的内容是将文档中的其他模板应用于PFRIODIC_TABLE 元素中所获得的结果。
第二个模板与ATOM 元素匹配,它用输出文档中的P 元素代替输入文档中的每个ATOM 元素。xsl:apply-templates 规则将
匹配的源元素的文本插入到输出文档中。因此,P 元素的内容将是包含在相应的ATOM 元素中的文本(但不是标记)。下
面,将更进一步讨论这些元素的精确语法。
清单14-2:有两个模板规则的周期表XSL 样式单
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="PERIODIC_TABLE">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="ATOM">
<P>
<xsl:apply templates/>
</P>
</xsl:template>
</xsl:stylesheet>