XSL-FO
XSL-FO |
XSL-FO是XSL Formatting Objects的縮寫,它是一種用於文檔格式的XML 置標語言。XSL-FO是XSL的一部分,而XSL是一組定義XML數據轉換與格式的W3C技術。XSL的其他部分有XSLT與XPath。截止到2006年12月12日,XSL-FO的最新版本是v1.1。
目錄
簡介
與其他的HTML與CSS組合不同,XSL-FO是一種unified表示語言,它沒有HTML中那樣的置標語法格式,並且與CSS更改外部XML或者HMTL文檔的缺省表示不同,XSL-FO將所有的文檔數據保存在內部。XSL-FO總的設計思想用戶寫到文檔中的數據是XML語言的文檔,而不是FO,所用語言可以是XHTML、DocBook以及TEI或者其他任何的XML語言。然後,用戶自己寫一個或者找一個XSLT變換,將XML轉換成XSL-FO。一旦生成了XSL-FO文檔,就將它送到FO處理器這樣的應用程序中。FO處理器將XSL-FO文檔轉換成可以閱讀或者可以打印的格式。最常見的XSL-FO輸出格式是PDF或者PostScript,有一些FO處理器只能輸出成RTF這樣的格式或者只能輸出到圖形用戶界面的頁面序列及內容。人們最初認為XSLT語言本身僅僅是為這個目的所用的,但是由於更加通用的XML轉換的出現已經超出了這個範圍。由於這個轉換是一個必然的過程,因此人們也常常將XML轉換為XSL-FO的XSLT當作XSL-FO文檔本身。甚至是XSL-FO的教程也在FO處理用法也用XSLT命令表示。XSLT轉換過程功能非常強大,它可以自動生成內容的列表、參考鏈接、索引以及其他的結果。XSL-FO文檔與PDF或者PostScript文檔不同,它沒有充分地描述文本在不同頁面上的布局,相反,它僅僅描述了頁面外觀以及不同內容放置的位置。根據這些,FO處理器依據FO文檔中描述的邊界確定文本的位置。XSL-FO規範甚至允許不同的FO處理器根據所生成的頁面有不同的響應。例如,有些FO處理器為了節約空間在換行的時候會加入連字符,有些卻不會這樣做。不同的處理器甚至會使用不同的連字符算法,從一些簡單的算法到需要考慮前後行是否也許要連字符這樣複雜的算法。這樣就會在不同的頁面改變頁面布局,尤其是帶有邊框的時候更是這樣。另外還有一些場合,XSL-FO規範明確允許FO處理器根據布局作出一定的選擇。雖然不同的FO處理器生成的結果並不一致,但是人們並不太關心。這是因為XSL-FO的目的是生成經過分頁的可打印媒體。XSL-FO文檔本身通常用於中介的媒體,通常用於生成PDF文件或者作為最終要分發的打印文檔。這與HTML直接作為最終形式分發給用戶有所不同。因此,如果需要生成一個打印文檔,只需要選擇滿足需要的FO處理器,比如布局效果以及較少的空白等,而無需在不同的處理器上測試XSL-FO文檔。
評價
XSL-FO語言的設計目的是用於分頁媒體,採用的方式是類似於用於非分頁媒體的HTML以及CSS。因此,頁面是XSL-FO結構內在的一個概念,FO賦予了用戶很大的權利以確定如何在頁面上顯示信息。FO最適合用在「內容驅動」設計的場合,這是圖書、文章、法律文檔等排版所用的標準方法。這涉及到一行鄰近的文本以及嵌入在頁面邊界中的不同變化信息。這與報紙與雜誌中所用的「布局驅動」設計有所不同。在那些文檔中,如果無法在特定的位置完整地放進去,那麼就會對內容進行裁減。XLS-FO很難處理雜誌布局的嚴格要求,實際上在很多場合,它根本不具備表示所需布局的能力。儘管這種語言有這些設計局限,但是它仍然能夠勝任很多的表現任務。它提供表格、列表、side floats等許多特性。這些特性與CSS的布局特性類似,但是其中一些特性需要用XSLT表示。[1]