概述
可扩展样式表语言/转换是一种非常强大的语言,本文无法对其进行全面讨论,但对一些基本概念进行简要讨论将有助于理解接下来对 Netscape 功能的描述。
- XSLT 样式表是一个 XML 文档。
-
与具有自身专用语法的 CSS 不同,XSLT 样式表是一个 XML 文档,必须符合所有 XML 规则,包括格式良好。因此,转换模型是一个 XML 文档用于转换另一个 XML 文档。
- XSLT 样式表通过包含标准 XSLT 标题来标记。
-
XSLT 样式表中最外层的元素必须是
<xsl:stylesheet>
元素(可接受的替代方案是<xsl:transform>
元素)。此元素将包含至少一个命名空间声明和必需的版本属性。还可以包含其他命名空间和三个可选属性。 - XSLT 的必需命名空间是
"http://www.w3.org/1999/XSL/Transform"
。 -
命名空间在 XML 中是一个容易混淆的话题。尽管命名空间通常看起来像是 URI,但实际上它们并不引用该地址处的资源。相反,它们是指定已知元素集的唯一标识符的一种方式。字符串
"http://www.w3.org/1999/XSL/Transform"
是一个常量,它将如此标记的元素指定为属于 W3C 在 1999 年 XSLT 建议中指定的标签集。样式表中偶尔看到的另一个字符串"http://www.w3.org/TR/WD-xsl"
表示符合 W3C 文档的早期工作草案(因此为 WD)。后一个命名空间与 W3C 最终采用的命名空间不兼容,并且 Netscape 不支持它。因为反复键入
"http://www.w3.org/1999/XSL/Transform"
会很繁琐,并且会使标记难以阅读,所以有一种标准机制可以在样式表标题中为命名空间分配简写名称。因此,打开样式表元素的完整示例可能如下所示。 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
xmlns 伪属性将简写名称 xsl 映射到完整的命名空间,以便在后续文档中使用。因此,上面的样式表元素以
xsl:
为前缀。虽然 xsl 是常用的简写名称(称为前缀),但它不是强制性的,并且可以完全选择不同的名称。本文中的示例都假定使用 xsl 前缀。 - 所有 XSLT 转换都在树上执行,而不是在文档上执行。
-
XSLT 转换引擎(称为处理器)不直接在文档上工作。在进行转换之前,必须将主要 XML 文档和样式表文档通过解析器运行,解析器在内存中创建文档结构的抽象表示。这种表示称为树,实际上是处理器对其进行操作的对象。树是一种抽象数据类型,一种概念模型,可以根据解析器和处理器的不同以各种方式实现。:Netscape 使用类似于 W3C DOM 的结构作为其树结构,但其他结构也是可能的。唯一的要求涉及树中对象的排列、它们的属性及其关系。
树由节点的分层框架组成。它可以由七种不同类型的节点组成:单个根节点、元素节点、文本节点、属性节点、注释节点、处理指令节点和命名空间节点。
树的顶部是根节点。根节点不对应于 XML 文档的任何单个部分:它表示整个文档。根节点下方是它的子节点,可以是元素、注释、处理指令等等。其中一些子节点也可能具有子节点。这可以继续进行多个级别。对哪些类型的节点可以在哪里出现有某些限制:例如,文本节点不能有子节点。
处理器操作的结果也是一棵树。Netscape 使用这棵树在浏览器窗口中呈现内容。
- XSLT 是一种高级声明式语言。
-
本质上,XSLT 样式表是一组规则(称为模板),这些规则声明任何与这种特定模式匹配的节点都应该以这种特定方式进行操作,并最终位于结果树中的这种特定位置。如何实现这一点的细节留给处理器决定。由于无法保证样式表的执行顺序,因此 XSLT 不支持任何产生副作用的功能。在这方面,它类似于 Lisp 或 Scheme。
- 树上的位置使用 XPath 指定,XPath 是另一项 W3C 建议。
-
转换取决于处理器能够精确定位树上的各个节点。为了便于此,W3C 决定使用另一种语言 XPath,XPath 在 XSLT 上下文之外也有用途。顾名思义,XPath 定义了处理器必须遍历树以到达所需节点的“路径”。此路径由要计算的 XPath 特定表达式组成,这些表达式可能包含要匹配的许多条件、关联节点的方法和/或树内方向性的指示。参考部分将更全面地描述 XSLT 中最常用的 XPath 部分。
- 使用一组级联优先级规则解决模板匹配中的潜在冲突。
-
通常,更具体的模板规则优先于不太具体的规则,并且在其他条件相同的情况下,文档中后面出现的模板规则优先于前面出现的规则。
- 样式表可以通过处理指令附加到 XML 文档。
-
指示应使用哪个 XSLT 样式表处理特定 XML 文档的最简单方法是在 XML 文档本身中包含一个处理指令。例如,如果样式表名为 inventory.xsl 并且位于与 XML 文档相同的目录中,则 XML 文档中的处理指令将如下所示
<?xml-stylesheet type="text/xml" href="inventory.xsl"?>
-
这必须放在 XML 文档的前言部分。
要了解有关 XSLT 和 XPath 的更多信息,请参阅本文末尾的进一步阅读部分。