XSL

XSL

XSL是可擴展樣式表語言(eXtensible Stylesheet Language)的外語縮寫,是一種用於以可讀格式呈現 XML(標準通用標記語言的子集)數據的語言。

語言


它起始於 XSL,結束於 XSLT、XPath以及XSL-FO。

起始於

萬維網聯盟(W3C)開始發展 XSL 的原因是:存在著對於基於 XML 的樣式表語言的需求。

樣式表

HTML使用預先定義的標籤,每個標籤的意義 很容易被理解。
HTML 中的
標籤定義表格 - 並且瀏覽器 清楚如何顯示它。
向 HTML 元素添加樣式是很容易的。通過 CSS,很容易告知瀏覽器用特定的字體或顏色顯示一個元素。
XML 不使用預先定義的標籤(我們可以使用任何喜歡的標籤名),並且每個標籤的意義 並不都那麼容易被理解。
標籤意味著一個 HTML 表格,一件傢具,或是別的什麼東西 - 瀏覽器 不清楚如何顯示它。
XSL 可描述如何來顯示 XML 文檔!

語言包括

XSL 包括三部分:
• XSLT - 一種用於轉換 XML 文檔的語言。
• XPath - 一種用於在 XML 文檔中導航的語言。
• XSL-FO - 一種用于格式化 XML 文檔的語言。

簡介


XSL 之於XML,就像CSS之於HTML。它是指可擴展樣式表語言 (EXtensible Stylesheet Language)。這是一種用於以可讀格式呈現 XML 數據的語言。
XSL是一種標記語言,表示如何將XML文檔的內容轉換成另一種形式的文檔。
通過為XML寫XSL來使得XML顯示成不同的格式。例如,在為保險公司描述一輛或更多汽車特徵的XML頁上,一套開關標記可能含有汽車製造商的名字。使用XSL,可告知網路瀏覽器應該顯示汽車製造商的名字以及在網頁何處以粗體顯示。XSL基於並擴展了文檔風格語義和規範語言(DSSSL)以及層疊樣式表版本1(CSS1)標準。 XML頁類似於HTML頁,但是它的識別域包含數據而不是文本和圖像。XSL向開發者提供一個工具,用於精確描述XML文件中需要顯示的數據域以及在何處如何顯示。與其它樣式表語言一樣,XSL可用於為XML文件創建樣式定義或者被許多其它XML文件重新利用。
XSL由網際網路聯盟(W3C)贊助開發,正處於工作草案階段。

包含兩個部分

• XSLT – 用於轉換 XML 文檔的語言
• XPath – 用於在 XML 文檔中導航的語言
XSLT 是指 XSL 轉換 (XSL Transformation),它是 XSL 最重要的部分。
XSLT 可以將 XML 文檔轉換為其它 XML 文檔、XHTML 輸出或簡單的文本。這通常是通過將每個 XML元素轉換為 HTML 元素來完成的。由於 XML 標籤是用戶定義的,瀏覽器不知道如何解釋或呈現每個標籤,因此必須使用 XSL。XML 標籤的意義是為了方便用戶(而不是計算機)理解。

基本結構


XSL樣式文檔的基本結構如下:
1、以下面的指令作為文檔開頭(其中還可以包含其他屬性):
2、通過“xsl:stylesheet”標記導入XSL文檔的所有內容。它類似於XML的根元素。其中的xmlns:xsl指明了XSL所採用的標準。
3、通過模板來描述XML文檔的顯示格式。這是XSL的主要部分。
4、通過XML數據的引用指明顯示的數據。
5、其中包含了大量的XTML語句的各種標記。
6、通過xsl:for-each、xsl:if、xsl:choose等標記進行數據的循環處理、條件處理、選擇處理等工作。
7、可以嵌入JavaScript或VBScript腳本程序,或者JavaScript語句,使XSLI具有更強大的運算功能。

可以進行操作

• 添加和刪除元素
• 添加和刪除屬性
• 對元素進行重新排列或排序
• 隱藏或顯示某些元素
• 查找或選擇特定元素

語法


您可能還記得 XML 概述文章中提到過,所有 XML 文檔都是以 XML 聲明開頭。XSL 樣式表也是一樣。任何 XSL 文檔的第一行實際上都是 XML 聲明:
XSL 是否與 XML 相同
既是又不是。說是,是因為它們遵循相同的語法規則(只有少許差異,下面我將會講到)。說不是,是因為它們的用途不同:XML 用於承載數據,而 XSL 則用於設置數據的格式。
在 XML 聲明之後,就是 XSL 聲明,例如:
但是,在大多數實際情況下,XSL 聲明看起來要稍微複雜一些:
這是因為,根據 W3C 聯盟的建議,它還包含命名空間和 XSL 規範的版本。
XSL 聲明與 XML 聲明的不同之處在於,XML 聲明只寫一行,而且沒有結束標籤,而 XSL 聲明必須包含結束標籤,該標籤表示 XSL 樣式表結束:
請注意,這並不與 XML語法規則衝突:XSL 樣式表是完全有效的 XML 文檔,因為它有一個根元素,由 標籤指定。

用途


XSL 在設計時有幾個目標用途,這些用途使它成為某些開發情況下的完美解決方案,而對另一些開發情況則毫無用處。
XSL 專門用於處理 XML 文檔,並且遵循 XML 語法。因此,它只能在支持 XML 的應用程序中與 XML 結合使用。最合適使用 XML 和 XSL 的情況是:Web 門戶、新聞聚合器、社區網站或其它任何需要向各種設備及大量客戶端提供信息的 Web應用程序。
XSLT 是一種基於模式匹配的語言。它會查找匹配特定條件的節點,然後應用相應的規則。因此,它不具備大多數編程語言的計算能力。例如,XSL 無法在運行時更改變數的值。它不應該用於從使用複雜公式的動態數據源(例如在線商店)來計算值。Web 編程語言更適於此用途。
XSL 不能代替或補充 CSS。它不應(也不能)用於設置 HTML 的樣式。但是,您可以將其用於需要頻繁重新設計可視化效果、頻繁更換布局以及以靈活格式處理數據的網站。
XSL 不是內容管理工具。它不應(也不能)用於更改 XML 文檔的內容或者編輯信息。但是,您可以將 XML 和 XSL 用於需要處理幾種不同格式文檔的內容管理系統。
它起始於 XSL,結束於 XSLT、XPath 以及XSL-FO。
萬維網聯盟(W3C) 開始發展 XSL 的原因是:存在著對於基於 XML 的樣式表語言的需求。
CSS = HTML 樣式表
HTML 使用預先定義的標籤,標籤的意義很容易被理解。
HTML元素中的 元素定義表格 - 並且瀏覽器清楚如何顯示它。
向 HTML元素添加樣式是很容易的。通過 CSS,容易告知瀏覽器用特定的字體或顏色顯示一個元素。
XSL = XML 樣式表
XML 不使用預先定義的標籤(可以用任何喜歡的標籤名),並且這些標籤的意義並不都那麼容易被理解。
元素意味著一個 HTML 表格,一件傢具,或是別的什麼東西 -瀏覽器不清楚如何顯示它。
XSL 可描述如何來顯示 XML 文檔!
XSL - 不僅僅是樣式表語言
XSL 包括三部分:
XSLT
一種用於轉換 XML 文檔的語言。
XPath
一種用於在 XML 文檔中導航的語言。
XSL-FO
一種用于格式化 XML 文檔的語言。

應用


資料庫技術領域,具體為一種快速執行可擴展樣式表單語言轉換(XSLT)的方法。該方法首先通過構造轉換樹,將XML文檔的結構信息和XSLT轉換要求結構起來,然後從轉換樹建立流處理模型;掃描XML源文檔,通過流處理模型,將一個XSLT轉換程序轉換成很多個事件處理器,對應於掃描過程中觸發的每一類事件,都有一個對應的事件的輸出片斷被添加到已產生的結果文檔後面;掃描結束后,即得到最終完整的結果文檔。本發明方法完全避免了現有轉換引擎需要預先將整個源文檔載入內存的缺點,減少了內存消耗,大大提高了執行效率。即使對於非常大的XML數據,也能通過一趟掃描完成轉換過程。
1、一種快速執行XSLT轉換的方法,其特徵在於通過一個流處理模型來執行XSLT轉換,具體步驟如下:
(1)首先通過構造轉換樹,將XML源文檔的結構信息和XSLT轉換要求結合起來,其步驟為:構造XML文檔類型定義的DTD樹T;考察XSLT轉換程序L的每一條轉換規則r,在T中找到r的匹配節點n;繼續考察r的輸出模板序列中的每一個元素o,如果o是一個常數字元串,為樹T創建一個葉子節點n’,添加一條從n到n’的邊;如果o是調用模板命令,從樹T中找到o的選中節點n’,同樣添加一條從n到n’的邊;
(2)從轉換樹建立流處理模型,它是一個遞歸過程,其步驟為:對轉換樹的任一節點n,end(n),start(n)初始值為空串;如果n是葉子節點,則令end(n):=pcdata+end(n);以c1,c2,...,cp表示節點n下面所有來自於DTD樹的孩子節點,以d1,d2,...,dq表示節點n下面所有來自於XSLT轉換程序的孩子節點,如果d1是一個常數字元串節點,則令start(n):=start(n)+d1,並且設置計數器i為2,否則,設置計數器i為1;當i不大於q的時候,重複以下步驟:假設c是位於從節點n到節點di這條路徑上的n的孩子節點,如果從n到c的邊沒有被星號標記,並且di+1是常數串節點,則令end(c):=end(c)+di+1和i:=i+2,否則令i:=i+1;如果di+1是常數串節點,假設c′是位於從節點n到節點di+2這條路徑上的n的孩子節點,則令start(c′):=di+1+start(c′)和i:=i+2,否則令i:=i+1;對每一個孩子節點dj,遞歸調用以上過程;
(3)掃描XML源文檔,通過流處理模型,將一個XSLT轉換程序轉化成很多個事件處理器;在從頭到尾讀XML取源文檔的過程中會觸發很多事件,對每一類事件,都有一個對應的輸出片斷;最開始的時候,結果文檔為空,隨著對源文檔的掃描過程的進行,相應事件的輸出片斷被逐漸添加到已產生的結果文檔的後面;在掃描過程結束后,用戶馬上就可以得到最終完整的結果文檔;其中,end(n)為元素結束事件的輸出片段,start(n)為元素開始事件的輸出片段,pcdata為當前葉子節點的PCDATA值。

異同


1、XSL與CSS在很多功能上是重複的,但是它比CSS功能更強大。不過XSL的強大功能與其複雜性是分不開的。
2、CSS只允許格式化元素內容,不允許改變或安排這些內容。但是XSL沒有這些限制,它可以提取元素、屬性值、註釋文本等幾乎所有的文檔內容。在XML領域,用XSL來格式化文檔才是未來發展的方向。
  • 目錄