XSL Formatting Objects
XSL-FOの表は、HTML/CSSの表 (テーブル) と非常によく似ている。 表の各データを、各々の枠内に配置することができる。 また、表の各々の列に対して背景色などのスタイル情報を指定することができる。 表の最初の行を、見出し行として指定することができ、見出し行に対しては他の行とは異なる固有のスタイル情報を指定することができる。
XSL-FO処理系は、各列の幅の長さを厳密に計算して組版することができる。 あるいは、表内にうまく収まるように枠内のテキストを調整して組版することもできる。
XSL-FO文書はXML文書であるが、明示的なDTDないしスキーマに従う必要は無く、XSL仕様においてXSL-FO文書の構文が定義されている。
XSL-FO文書は、大きく分けて2つの必須の部分から構成される。
最初の部分で、ページのレイアウトを詳しく定義する。レイアウトは1つまたは複数定義することができる。各レイアウトには名前をつける。
次の部分で、一連の文書データを記述する。文書データにはXSL-FOで規定されたマークアップを行う。このマークアップにより、文書データを構成する内容が、先の部分で定義したページレイアウトのうち、どのページレイアウトによって表現されるかを指定する。
最初の部分 (layout-master-set要素) のページレイアウト定義では、ページの特徴を定義する。
テキストの表記方向を定義することができる。「右から左に文章を進める」「上から下に文章を進める」「左から右に文章を進める」など、言語に固有の重要な慣習に沿うように指定することができる。
ページの縦横の長さやページの余白 (マージン) の長さを指定することができる。
ページの連なりについて定義することができる。例えば、奇数ページと偶数ページとで余白などの指定を変えることが可能である。
例えば、印刷するために大きな余白を確保するようページレイアウトの定義をすることができる。 製本するためにさらに大きく余白をとることもできる。
次の部分 (page-sequence要素) では、文書データを分割して複数のフローに再構成する。
おのおののフローは、ページレイアウト定義と関連付けられる。
フローは、複数のブロックを含むことができる。
XSL-FOには非常に多くの機能がある。 先に述べたことに加え、XSL-FOでは次のような機能を仕様で規定している。