明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

深入XSL(1)(轉(zhuǎn))

[摘要]深入XSL(1)---構(gòu)造結(jié)果樹概述 翻譯:孫一中XSL是表達(dá)樣式表(stylesheet)的語(yǔ)言.每一個(gè)樣式表描述了呈現(xiàn)一類XML源文檔的規(guī)則.呈現(xiàn)的過(guò)程包括兩部分:第一,由源樹建立結(jié)果樹(res...
深入XSL(1)
---構(gòu)造結(jié)果樹概述
翻譯:孫一中

XSL是表達(dá)樣式表(stylesheet)的語(yǔ)言.每一個(gè)樣式表描述了呈現(xiàn)一類XML源文檔的規(guī)則.呈現(xiàn)的過(guò)程包括兩部分:第一,由源樹建立結(jié)果樹(result tree);第二,結(jié)果樹被解釋并在顯示器、紙張或以語(yǔ)音等其他的媒體的格式化形式輸出. 第一步,構(gòu)造結(jié)果樹,是將模式(pattern)與模板(template)相結(jié)合實(shí)現(xiàn)的. 模式與源樹中的元素相匹配.模板被實(shí)例化產(chǎn)生部分結(jié)果樹.結(jié)果樹與源樹是分離的.結(jié)果樹的結(jié)構(gòu)可以和源樹截然不同.在結(jié)果樹的構(gòu)造中,源樹可以可以被過(guò)濾和重新排序,還可以增加任意的結(jié)構(gòu).第二步,格式化,是用該XSL文檔規(guī)定的格式化詞表實(shí)現(xiàn)結(jié)果樹的構(gòu)造.正規(guī)來(lái)說(shuō),這個(gè)詞表是一個(gè)XML的名域(namespace).詞匯表中的每一種元素類型對(duì)應(yīng)一個(gè)格式化對(duì)象類.一種格式化對(duì)象類表達(dá)一種特定的格式化表現(xiàn)方式.例如,塊(block)格式化對(duì)象類表示將一段的內(nèi)容拆成一行一行.詞匯表的每個(gè)屬性對(duì)應(yīng)一種格式化特性.格式化對(duì)象類有一特殊的格式化特性集合,這樣能夠更好地控制格式化對(duì)象類的表現(xiàn)方式;例如,在集合各行之前或之后控制行的縮進(jìn),行間距.一個(gè)格式化對(duì)象能擁有內(nèi)容,而它的格式化表現(xiàn)應(yīng)用于其內(nèi)容.

XSL可以不需要結(jié)果樹使用格式化詞庫(kù),這樣能夠被用作通用的XML傳輸.例如,XSL能被用來(lái)將XML轉(zhuǎn)化為結(jié)構(gòu)良好的HTML,即為采用HTML定義的元素類型和屬性的XML.當(dāng)結(jié)果樹采用了格式化詞庫(kù),相遵循的XSL實(shí)現(xiàn)必須能夠根據(jù)在該文件中定義的格式化詞庫(kù)的語(yǔ)義解釋結(jié)果樹;它也能將結(jié)果樹具體化為XML,但沒有必要能這樣做.

樣式表包含了一套模板的規(guī)則集合.一個(gè)模板規(guī)則有兩個(gè)部分:匹配源樹中節(jié)點(diǎn)的模式(pattern)以及實(shí)例化(instantiated)后組成部分結(jié)果樹的模板(template).它允許一個(gè)樣式表可用于有類似源樹結(jié)構(gòu)的一大類文檔.一個(gè)模板包含一些元素,它們規(guī)定了文字結(jié)果的元素結(jié)構(gòu).一個(gè)模板還可以包含作為產(chǎn)生結(jié)果樹片段的指令元素.當(dāng)一個(gè)模板實(shí)例化后, 執(zhí)行每一個(gè)指令并置換為其產(chǎn)生的結(jié)果樹片段.指令能夠選擇并處理后代的元素. 通過(guò)查找可應(yīng)用的模板規(guī)則然后實(shí)例化其模板,后代的元素處理后產(chǎn)生了結(jié)果樹片段.元素只有在被執(zhí)行的指令選中才作處理.在搜索可用模板規(guī)則過(guò)程中,不止一個(gè)模板規(guī)則可能匹配給定元素的模式.然而,僅應(yīng)用一個(gè)模板的規(guī)則.決定采用哪一規(guī)則的方法在"模板規(guī)則的沖突決定"中說(shuō)明.XSL用XML的名域(namespaces)來(lái)區(qū)別屬于XSL處理器指令的元素和規(guī)定文字結(jié)果的樹結(jié)構(gòu)的元素.指令元素屬于XSL名域.在文檔中采用前綴xsl:表示XSL名域中的元素.一個(gè)XSL樣式表包含了一個(gè)xsl:stylesheet穩(wěn)當(dāng)元素.該元素可以包含xsl:template元素來(lái)規(guī)定模板的規(guī)則.下面的例子是一個(gè)簡(jiǎn)單的XSL樣式表,它為包含emphasis元素的para元素序列構(gòu)造結(jié)果樹.result-ns="fo"屬性表明正在構(gòu)造使用格式化對(duì)象詞庫(kù)的樹.para元素成為了塊格式化對(duì)象,字體大小為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的樣式表導(dǎo)入的元素,定義宏的元素,定義全局常量的元素,以及識(shí)別源屬性為個(gè)別元素標(biāo)記的元素.


---------------------------------------------------------------------------


標(biāo)簽:深入XSL(1)(轉(zhuǎn))