深入XSL(1)(轉)
發表時間:2023-08-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]深入XSL(1)---構造結果樹概述 翻譯:孫一中XSL是表達樣式表(stylesheet)的語言.每一個樣式表描述了呈現一類XML源文檔的規則.呈現的過程包括兩部分:第一,由源樹建立結果樹(res...
深入XSL(1)
---構造結果樹概述
翻譯:孫一中
XSL是表達樣式表(stylesheet)的語言.每一個樣式表描述了呈現一類XML源文檔的規則.呈現的過程包括兩部分:第一,由源樹建立結果樹(result tree);第二,結果樹被解釋并在顯示器、紙張或以語音等其他的媒體的格式化形式輸出. 第一步,構造結果樹,是將模式(pattern)與模板(template)相結合實現的. 模式與源樹中的元素相匹配.模板被實例化產生部分結果樹.結果樹與源樹是分離的.結果樹的結構可以和源樹截然不同.在結果樹的構造中,源樹可以可以被過濾和重新排序,還可以增加任意的結構.第二步,格式化,是用該XSL文檔規定的格式化詞表實現結果樹的構造.正規來說,這個詞表是一個XML的名域(namespace).詞匯表中的每一種元素類型對應一個格式化對象類.一種格式化對象類表達一種特定的格式化表現方式.例如,塊(block)格式化對象類表示將一段的內容拆成一行一行.詞匯表的每個屬性對應一種格式化特性.格式化對象類有一特殊的格式化特性集合,這樣能夠更好地控制格式化對象類的表現方式;例如,在集合各行之前或之后控制行的縮進,行間距.一個格式化對象能擁有內容,而它的格式化表現應用于其內容.
XSL可以不需要結果樹使用格式化詞庫,這樣能夠被用作通用的XML傳輸.例如,XSL能被用來將XML轉化為結構良好的HTML,即為采用HTML定義的元素類型和屬性的XML.當結果樹采用了格式化詞庫,相遵循的XSL實現必須能夠根據在該文件中定義的格式化詞庫的語義解釋結果樹;它也能將結果樹具體化為XML,但沒有必要能這樣做.
樣式表包含了一套模板的規則集合.一個模板規則有兩個部分:匹配源樹中節點的模式(pattern)以及實例化(instantiated)后組成部分結果樹的模板(template).它允許一個樣式表可用于有類似源樹結構的一大類文檔.一個模板包含一些元素,它們規定了文字結果的元素結構.一個模板還可以包含作為產生結果樹片段的指令元素.當一個模板實例化后, 執行每一個指令并置換為其產生的結果樹片段.指令能夠選擇并處理后代的元素. 通過查找可應用的模板規則然后實例化其模板,后代的元素處理后產生了結果樹片段.元素只有在被執行的指令選中才作處理.在搜索可用模板規則過程中,不止一個模板規則可能匹配給定元素的模式.然而,僅應用一個模板的規則.決定采用哪一規則的方法在"模板規則的沖突決定"中說明.XSL用XML的名域(namespaces)來區別屬于XSL處理器指令的元素和規定文字結果的樹結構的元素.指令元素屬于XSL名域.在文檔中采用前綴xsl:表示XSL名域中的元素.一個XSL樣式表包含了一個xsl:stylesheet穩當元素.該元素可以包含xsl:template元素來規定模板的規則.下面的例子是一個簡單的XSL樣式表,它為包含emphasis元素的para元素序列構造結果樹.result-ns="fo"屬性表明正在構造使用格式化對象詞庫的樹.para元素成為了塊格式化對象,字體大小為10pt,之前的空格為12pt.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" result-ns="fo">
<xsl:template match="/">
<fo:page-sequence font-family="serif">
<xsl:process-children/>
</fo:page-sequence>
</xsl:template>
<xsl:template match="para">
<fo:block font-size="10pt" space-before="12pt">
<xsl:process-children/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
xsl:stylesheet元素也能包含由其他XSL的樣式表導入的元素,定義宏的元素,定義全局常量的元素,以及識別源屬性為個別元素標記的元素.
---------------------------------------------------------------------------