概述

« 使用 XSLT 轉換 XML

可擴充套件樣式表語言/轉換是一種非常強大的語言,本文無法對其進行全面討論,但對一些基本概念進行簡要討論將有助於理解接下來對 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 的更多資訊,請參閱本文末尾的進一步閱讀部分。