XSLT

XSLT

可擴展樣式表轉換語言
在計算機科學中,可擴展樣式表轉換語言(縮寫XSLT)是一種樣式轉換标記語言,可以将XML數據檔轉換為另外的XML或其它格式,如HTML網頁,純文字。XSLT是由XSL(Extensible Stylesheet Language)發展而來的,是一種描述将XML的一種結構變換為XML的另一種結構的标準方法。XSLT是W3C提出的标準。XSLT可以被認為是XSL的擴充,XSL是格式化XML文檔的語言,XSLT說明如何将XML文檔組織為另一種數據結構。XSLT用于描述如何變換XML文檔的數據結構。
  • 中文名:擴展樣式表轉換語言
  • 外文名:Extensible Stylesheet Language Transformations
  • 别名:
  • 外語縮寫:XSLT
  • T的含義:代表英語中的“轉換”

簡介

在計算機科學中,可擴展樣式表轉換語言(英語:Extensible Stylesheet Language Transformations,縮寫XSLT)是一種樣式轉換标記語言,可以将XML數據檔轉換為另外的XML或其它格式,如HTML網頁,純文字。XSLT最末的T字母表示英語中的“轉換”(transformation)。它是XSL規範中的一部分,最新的建議版本為XSL 3.0。

以XSLT進行格式轉換并不會變動原始的數據文件;而會以現有數據産生新的内容格式。作為輸入的通常是XML數據檔,或者由支持XQuery和XPath的數據模型處理器,其它來源的數據也能被轉換,例如關系數據庫表格或地理信息系統。

XSL規範的另外一部分是XSLF(Formatting Objects,代表格式化對象),又稱XSL-FO或XSLFO,已逐漸被CSS 3.0所取代。XSLT是一種圖靈完備的語言,它可以指定計算機能運行的任何計算。XML作為新一代Internet語言,具有極大的靈活性、可擴展性、自描述性和簡單性,是目前數據交換的主流語言。

曆史

XSLT受到函數式編程語言和字符串模式匹配語言(如SNOBOL和AWK)的影響。它最直接的前輩是DSSSL,即為SGML的文件樣式描述語言。

XSLT 1.0版本:XSLT是二十世紀末萬維網聯盟(W3C)可擴展樣式表語言(XSL)開發工作的一部分,該項目還産出了XSL-FO和XPath。編訂XSLT規範的委員會成員,包括編輯James Clark,具備DSSSL的工作經驗。W3C于1999年11月推薦發表了XSLT 1.0規範。

XSLT 2.0:XSL工作組在2001年嘗試新創1.1版本中斷之後,與XQuery工作組合作,産出了根基于XML綱要之上的XPath 2.0,具有更豐富的數據模型和類型系統;而XSLT 2.0是由Michael Kay主導開發的,在2007年1月成為推薦狀态。然而至2010年,XSLT 1.0仍然被廣泛使用,因為客戶端的網絡浏覽器尚未内置支持XSLT 2.0,或因為處于LAMP架構環境中。

XSLT 3.0:于2017年6月8日成為W3C推薦書。主要新功能有:

流轉換:在以前版本中,整個輸入數據檔必須在處理之前被讀入内存,在處理完成之前無法寫到輸出(盡管Saxon有流擴展)。這個工作草案允許XML流,這對于處理内存容納不下的過大數據檔,或者在XML管道中連串變換時,是有用處的。

改進大型樣式表的模塊化。

改進動态錯誤的處理,例如xsl:try指令。

函數可以作為其它(高階)函數的參數。

設計模型與處理

XSLT處理器會取用一或多個XML源數據檔,加上一或多個XSLT樣式表,并處理它們以産生輸出文件。與廣泛實現的指令式編程語言(例如C編程語言)相反,XSLT是宣告式的。基本處理的範式是模式配比。模闆規則隻定義如何處理特定XPath模式相符的節點,而不是列出在具有狀态的環境中運行的一系列動作;處理器在遇到某一模式匹配時,那麼模闆規則的内容就包含了,以函數式語句評估的直接成果:即結果樹,它是處理器輸出的基礎。

處理器遵循固定的算法。首先,假設樣式表已經讀取和準備好了,處理器從輸入的XML數據檔創建來源代碼樹。然後處理來源樹的根節點,在樣式表中找到該節點相符的最佳模闆,并評估模闆的内容。每一個模闆中的指令通常要求處理器在結果樹中産生節點,或者與根節點相同的方式,處理來源樹中的其它節點。從結果樹中獲取輸出。

處理器實現

Altova RaptorXML服務器:支持XSLT 1.0和2.0的跨平台引擎,大部分XPath 3.0,以及XSLT 3.0工作草案中的一些功能;也有XQuery支持。允許指令列操作以及利用COM,Java和.NET的接口,并且還包括一個内置的HTTP服務器。

Exselt:在.NET框架上以F#編寫成的XSLT 3.0流處理器。完全支持XSLT 3.0草案,XPath 3.0推薦标準和XDM 3.0推薦标準。

libxslt是根據MIT授權發布的開放庫,可商業化且重複使用。它以libxml為基礎并以C語言實現,有快速的性能和可移植性。它支持XSLT 1.0和EXSLT擴展。

在指令列中可執行xsltproc,它包含在macOS和許多Linux版本中,在微軟Windows系統則透過Cygwin使用。

Safari浏覽器的WebKit引擎,和Chrome和Blink布局引擎,都利用libxslt庫進行XSL轉換。

在Python,Perl,Ruby,PHP,Common Lisp,Tcl和C++等編程語言中也有相對的綁定。

MSXML和.NET。MSXML包括XSLT 1.0處理器。從MSXML 4.0它包括指令列的工具程序msxsl.exe。

Saxon:XSLT 3.0和XQuery 3.1處理器,有獨立操作的開源和專有版本,也提供了可用于Java,JavaScript和.NET的庫。

QuiXSLT:由Innovimax和INRIA以Java編程語言實現的XSLT 3.0處理器。

Xalan:來自Apache Software Foundation的開源XSLT 1.0處理器,可以獨立使用,也适用于Java和C++。

網絡浏覽器:Safari,Chrome,Firefox,Opera 和Internet Explorer這些網絡浏覽器都隻支持XSLT 1.0;而如果以Saxon-CE和Frameless這樣的第三方協力産品,則可支持XSLT 2.0。浏覽器有能力運行XML文件的即時轉換,并在其視窗中顯示輸出。轉換方式有将XSL嵌入到XML數據檔中,或在XML數據檔中以導入XSL的指示來完成。由于Chrome的保守安全策略,可能無法使用導入XSL的指示。

XMLStarlet是“可用于轉換、查詢、驗證和編輯XML數據檔的一組指令列工具程序。它可以将XSLT樣式表應用于XML數據檔”,而且不需要Java。它使用libxslt支持XSLT 1.0。

Xuriella和Plexippus-xpath是用Common Lisp編程語言實現的XSLT 1.0處理器。

性能

早期大多數的XSLT處理器都是解釋器。近來字節碼越來越普遍,使用可移植的中間語言(如Java字節碼或.NET中間語言)作為目标。然而,即使是解釋器的成品通常也提供單獨的分析和運行階段,允許在内存中創建優化的表達式樹,并可重複使用以運行多重轉換。在線上發行應用程序時,這方式有顯著的性能優勢,其中同樣的轉換每秒可多次應用在不同的來源檔之上。這種分離處理反映在XSLT處理器的應用編程接口(如JAXP)的設計中。

早期XSLT處理器很少被優化過。讀取的樣式表成為文檔對象模型,而XSLT處理器會直接對它們産生作用。XPath引擎也沒有被優化過。但是漸增地,XSLT處理器利用了函數式編程和數據庫查詢語言中發現的優化技術,例如表達式樹的靜态重寫(例如,将計算移出循環),以及惰性的流評估來減少過程中所占内存的足迹(允許處理器對子表達式求值時,“提早退出”而不必運行全部,例如following-sibling::*[1])。許多處理器還使用比一般DOM實現更有效率(在空間和時間上)的樹表達式。

2014年6月,Debbie Lockett和Michael Kay推出了一個開放源代碼的标竿測試框架,名稱為XT-Speedo。

XPath

XSLT使用XPath來選取數據源樹的節點集合,并運行相關的轉換運算。XPath還提供了一系列功能,XSLT則将其功能進一步強化。在3.0版本前的XSLT,使用的XPath版本都是相對應的。到了XSLT 3.0版本則将與XPath 3.0或3.1配合使用。在之前的版本,XSLT和XPath規範在同一天發布。然而到了XSLT 3.0版本,它不再和XPath的版本同步;XPath 3.0于2014年4月成為推薦書,接着是2017年2月的XPath 3.1;于2017年6月時才推出了XSLT 3.0版本。

與XQuery比較

XSLT與XQuery的功能之間有互相重疊的部分,XQuery最初被認為是大型XML數據檔集合的查詢語言。XSLT2.0和XQuery1.0标準是由W3C内的不同工作組開發的,它們彼此合作以确保處理作法可以共通地适用。它們都使用相同的數據模型,類型系統和庫,并且都包括了XPath 2.0作為子語言。

但這兩種語言因服務于不同社群的需求,而根植于不同的傳統上。XSLT主要被認為是一種樣式語言,主要目标是在網絡(當作網頁模闆)、在顯示屏或紙張,呈現給人類讀者觀看的XML。而XQuery則類比為傳統中的數據庫查詢語言。因為這兩種語言起源于不同的社群,XSLT偏重于處理彈性的叙述式數據應用上,而XQuery則偏重在數據處理方面,例如運行關系聯結的操作。

媒體類型

元素可以設置媒體類型的屬性media-type,将結果輸出為該媒體類型(或MIME),例如1:

長時間以來在互聯網上并沒有XSLT的注冊媒體類型,text/xsl為實用上的标準。XSLT1.0規範建議泛用化的屬性text/xml和application/xml,但其中沒有指出媒體類型的屬性值應當如何使用。随着XSLT2.0的發表,W3C推薦使用MIME媒體類型application/xslt+xml,之後這種類型已在IANA注冊。

1.0之前的XSLT工作草案在示例中使用了text/xsl,微軟在Internet Explorer和MSXML産品中采用這一媒體類型,而其它浏覽器的xml樣式表處理指令也廣泛的認可。所以在實現中,浏覽器用戶若想以處理指令來轉換XML,應使用這種未注冊的媒體類型。

參見

XML

XSL

XPath

XSLF

相關詞條

相關搜索

其它詞條