定義
XSLT是一種基于模式匹配的語言。該方法首先通過構造轉換樹,将XML文檔的結構信息和XSLT轉換要求結構起來,然後從轉換樹建立流處理模型;掃描XML源文檔,通過流處理模型,将一個XSLT轉換程序轉換成很多個事件處理器,對應于掃描過程中觸發的每一類事件,都有一個對應的事件的輸出片斷被添加到已産生的結果文檔後面;掃描結束後,即得到最終完整的結果文檔。
用途
XSL在設計時有幾個目标用途,這些用途使它成為某些開發情況下的完美解決方案,而對另一些開發情況則毫無用處。
XSL專門用于處理XML文檔,并且遵循XML語法。因此,它隻能在支持XML的應用程序中與XML結合使用。最合适使用XML和XSL的情況是:Web門戶、新聞聚合器、社區網站或其它任何需要向各種設備及大量客戶端提供信息的Web應用程序。
XSLT是一種基于模式匹配的語言。它會查找匹配特定條件的節點,然後應用相應的規則。因此,它不具備大多數編程語言的計算能力。例如,XSL無法在運行時更改變量的值。它不應該用于從使用複雜公式的動态數據源(例如在線商店)來計算值。Web編程語言更适于此用途。
XSL不能代替或補充CSS。它不應(也不能)用于設置HTML的樣式。但是,您可以将其用于需要頻繁重新設計可視化效果、頻繁更換布局以及以靈活格式處理數據的網站。
XSL不是内容管理工具。它不應(也不能)用于更改XML文檔的内容或者編輯信息。但是,您可以将XML和XSL用于需要處理幾種不同格式文檔的内容管理系統。
應用
數據庫技術領域,具體為一種快速執行可擴展樣式表單語言轉換(XSLT)的方法。該方法首先通過構造轉換樹,将XML文檔的結構信息和XSLT轉換要求結構起來,然後從轉換樹建立流處理模型;掃描XML源文檔,通過流處理模型,将一個XSLT轉換程序轉換成很多個事件處理器,對應于掃描過程中觸發的每一類事件,都有一個對應的事件的輸出片斷被添加到已産生的結果文檔後面;掃描結束後,即得到最終完整的結果文檔。
該發明方法完全避免了現有轉換引擎需要預先将整個源文檔載入内存的缺點,減少了内存消耗,大大提高了執行效率。即使對于非常大的XML數據,也能通過一趟掃描完成轉換過程。
一種快速執行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值。