XSL Formatting Objects
XSL-FOは、複数のページで構成される媒体を想定して設計された。一方HTMLとCSSは、ページの概念が無い媒体 (コンピュータ画面など) を想定して設計されている。XSL-FOにおいてページの概念は不可欠な要素である。XMLを扱う人々にとって、XSL-FOの処理系は、複数のページで情報を表示する際には強力なツールである。
XSL-FOの基本的な考え方は、コンピュータによる組版である。XSL-FO文書には、印刷対象となる文書データと文書データに対する組版の制約情報が含まれている。このXSL-FOをもとに、XSL-FO処理系は組版を行う。XSL-FOはこうした仕組みに基づいているため、あるXSL-FO処理系による出力と、別のXSL-FO処理系による出力が、一致しないことがある。しかしXSL-FOの一般的な目的は、複数のページで構成された組版された媒体を生成することであるため、あまり問題にはならない。XSL-FOの使い方としては、紙などに印刷された文書やPDFファイルの生成が、一般的である (PDFファイルもその性質は印刷された文書に近い) 。
各ブロックには、順番に、テキストデータ、インライン要素、およびテキストデータとインライン要素の混合内容を、含めることができる。
ページの余白の部分にも、ページ番号や章見出しなどを、印字することができる。
XSL-FOとCSSは、良く似ている概念を採用しているが、いくつかの違いもある。 ブロックとインライン要素の概念は、CSSと非常に良く似ている。 間隔 (padding) と余白 (margin) の規則のいくつかは、CSSと異なる。 表記方向 (direction) に関しては、XSL-FO ではページの特性に沿って全て指定することができる。
インラインのテキストなどの表記方向 (「左から右へ」「上から下へ」など)
ブロック内のテキスト行などの流し込みの方向 (「上から下へ」「右から左へ」など)
このXSL-FOでの表記方向の指定機能により、英語とは異なる方向で文章を記述する慣習のある言語にも対応している。 日本語などの縦書きにも対応している。 ただしXSL-FO処理系の実装としては、少なくとも1つの表記方向に対応することが必須であり、全ての表記方向に対応する必要は無い。 XSL-FOの仕様では、CSS2.1とは異なり、方向に関して表記方向に基づいた用語を採用している。 start (前) や end (後) などを使い、left (左) や right (右) などは、出力媒体に直接関わる場合を除いて、使われない。
XSL-FOの基本的な文書内容のマークアップは、CSSおよびそのカスケーディング規則を基にしている。 そのためXSL-FO文書で記述した要素の多くの属性は、明示的に上書きしない限り、子要素に継承される。