天天看點

深入XSLT第七章--- 對象格式化

深入XSLT第七章--- 對象格式化

簡介

在 構造結果樹的時候可以采用格式化詞庫的中定義的對象來生成結果.我們已經在XSL概述中了解了格式化對象的基本概念,通常格式化詞庫是一個XML的名域. 其中的每一個元素的類型對應一類格式化對象.最新的XSL草案已經定義了一些這樣的格式化對象。雖然它還在完善之中,但我們不妨把它的基礎和精髓介紹給大 家。

格式化對象及其屬性

表明為non-core 的對象不必在XSL中實作.已經定義的格式化對象有下列這些. 

布局格式化對象(Layout Formatting Objects)

page-sequence:提供這樣的機制,可以定義主序列(sequences),然後将内容和這些主序列相結合.

simple-page-master:描述網頁的普通布局或布局序列(列印或線上狀态).

内容流對象(Content Flow Objects)

queue:集中在頁序列中被替代的内容.

sequence:将内容分組并允許配置設定共享繼承屬性.

list:将所有項組成一個清單. 

list-item:為每個清單中項目組合其清單項标簽和主體. 

list-item-label:儲存一個清單項的數字或标簽.

list-item-body:儲存清單項的主體内容.

block:用以表示段落、标題、說明等. 

character:格式化程式的原子機關.在需要明确重載有具體表現字型的字元或字元串時使用它.

rule-graphic:可用于繪制一圖形線将網頁劃分為幾個區域.

graphic:儲存一個圖檔或矢量圖象. 在XSL可能替代為行内或塊層次.graphic的内容可能是内部流或外部的連接配接.

score:突出的文本.産生下劃線、橫透線、上标線等.

Boxes:設定底色和邊框. 

inline-box:突出的文本或圖象.産生邊框和背景.控制内容間距.

block-level-box:突出的文本或圖象.産生邊框和背景.控制内容間距.

Building Blocks:訓示格式化程式在内容流的目前位置構造文本對象. 

page-number:使得格式化程式産生頁碼.

Online Flow Objects 

link:網頁浏覽器連結.

link-end-locator:連結的目标或對象.

附:XSL完整執行個體

下面是一個簡單但完整的樣式表例子.

<?xml version='1.0'?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"

xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" result-ns="fo" indent-result="yes">

<xsl:template match='/'>

<fo:page-sequence font-family="serif">

<fo:simple-page-master name='scrolling'/>

<fo:queue queue-name='body'>

<xsl:process-children/>

</fo:queue>

</fo:page-sequence>

</xsl:template>

<xsl:template match="title">

<fo:block font-weight="bold">

</fo:block>

<xsl:template match="p">

<fo:block>

<xsl:template match="emph">

<fo:sequence font-style="italic">

</fo:sequence>

</xsl:stylesheet>

XML的源檔案是

<doc>

<title>An example</title>

<p>This is a test.</p>

<p>This is <emph>another</emph> test.</p>

</doc>

它将生成下面的結果:

<fo:page-sequence xmlns:fo="http://www.w3.org/TR/WD-xsl/FO" font-family="serif">

<fo:simple-page-master name="scrolling"/>

<fo:queue queue-name="body">

<fo:block font-weight="bold">An example</fo:block>

<fo:block>This is a test.</fo:block>

<fo:block>This is <fo:sequence font-style="italic">another</fo:sequence> test.</fo:block>