水曜日に、Apacheソフトウェア財団は、10年にわたって開発が続けられてきたプロジェクトであるApache FOP 1.0のリリースを発表した。Apache FOP(Formatting Objects Processor)は、ApacheのXML projectで誕生し、(JavaベースのSVGレンダラであるBatikとともに)XMLGraphicsプロジェクトへ2004年に移った。
Apache FOPは、XML文書をPDFやPNGなどのさまざまな印刷に適したフォーマットや、HTMLなどのその他の形式へ変換する手段を提供する。このプロジェクトの歴史は、XSLの最初のリリースがW3Cからリリースされた時点へ遡る。ほとんどの人が、XSLをXSL Transformation languageそのものと同一視しているにもかかわらず、XSLは当初は、印刷業界の便益のために印刷業界によって作成されたものだった。結果として、XSLの仕様は、言語(eXtensible Stylesheet Language)とXSL Formatting Objects仕様の双方を含んだものとなっている。XSLのアブストラクトには次のように書かれている。
この仕様はスタイルシートを記述する言語であるExtensible Stylesheet Language (XSL)の機能と構文を定義する。この仕様は、次の2つの要素からなっている。
- XML文書の変換を行うための言語(XSLT)、および
- フォーマットを指定するためのXMLボキャブラリ
ほとんどの人がXSLと聞いて思い浮かべるのは、実際のところ、仕様の前半部分のXSLTだろう。XSL仕様は、同じ仕様の中で印刷されるテキストがどのようにレイアウトされるかを定義するための小さな言語を、XSL Formatting Objects、もしくは略してFOとして定義している(この名称がApache FO Processorおよびプロジェクト自身の名称の元となっている)。
CSS 1が1996年にリリースされ、CSS 2が1998年にリリースされたが、どちらも脚注やページ番号の参照、縦欄式に文字の流れを分割する(例として、あらかじめ分割されたDIVとして分割しておくことなしに、自動的に複数の列にまたがって文字を配置するなど)といった印刷に適した文書を生成するための要求を満たすものではなかった。XSL FOが2001年にXSL仕様の一部として登場したとき、仕様を実装したプロセッサはほとんど存在しなかった。Apache FOPは初期の実装の一つだったが、バージョン0.20(2003年にリリース)のころに行き詰まったようにみえ、それは、FOP 0.93(2007年にリリース)で再び稼働するまで続いた。実際のところ、これらの断裂は、異なったバージョンのJARをロードするOSGiの機能のデモンストレーションに数年前のSunでのOSGi JSIGイベントで使われたほどだ。
FO文書の例は、http://www.w3.org/1999/XSL/Format
に対応づけられたfo
名前空間をもつ普通のXML文書のように見える。次にあげるのは、http://www.renderx.com/tutorial.html(商用のFOプロセッサの一つ)から引用した例だ。
<?xml version="1.0" encoding="iso-8859-1"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="my-page"> <fo:region-body margin="1in"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my-page"> <fo:flow flow-name="xsl-region-body"> <fo:block>Hello, world!</fo:block> </fo:flow> </fo:page-sequence> </fo:root>
fo:layout
は、スタイル(ページの余白の設定や、ページ数を表示するべきかどうか、その他に、複数のスタイルをサポートし、「メインのページ」と「目次のページ」のスタイルを分けて保持することが可能となる)などを含み、それに続くfo:page-sequence
は一連のページ(例えば章など)に対応する。その中には、flow
とblock
があり、HTMLのdiv
とp
の設定に類似している。
冗長に思えるかもしれないが、しばしばFOは中間形式として利用され、MediaWikiやWikiTextなどから変換される(Eclipse WikiTextは、DocBookやXSL-FOに既に変換可能である。実際のところ多くのDocBookプロセッサはXSL-FOを生成し、Apache FOPなどのツールを使ってPDFを生成する)。Mavenのsiteターゲットは、Apache FOPを使ってサイトのPDFバージョンをpdfプラグインとともに生成するものだ。
Apache FOP 1.0は、現時点では、完全にXSL FO仕様に準拠しているわけではない。コンプライアンスページでは、現時点でサポートされている部分についての情報が列記されている。