XSL Formatting Objects

XSL Formatting Objects (XSL-FO) について



XSL Formatting Objects (XSL-FO) は、XML (Extensible Markup Language) 文書の組版を制御するための仕様であり、XSL (XML Stylesheet Language) の一部を構成します。XSLは、XML文書の変換と組版を行うために開発され、XSL-FOの他にXSLT (XSL Transformations) とXPath (XML Path Language) から構成されています。XSL-FOは、視覚的な媒体だけでなく、聴覚的な媒体に関する制御も規定している点が特徴です。

XSL-FOの歴史



XSL関連の仕様は、標準化団体であるW3C (World Wide Web Consortium) で開発され、勧告として公表されています。主な勧告の年月日は以下の通りです。

1999年11月16日: XSLT 1.0 と XPath 1.0 が勧告
2001年10月15日: XSL (XSL-FO) 1.0 が勧告
2006年12月5日: XSL (XSL-FO) 1.1 が勧告
2007年1月23日: XSLT 2.0 と XPath 2.0 が勧告
2014年4月8日: XPath 3.0 が勧告
2017年3月21日: XPath 3.1 が勧告
2017年6月8日: XSLT 3.0 が勧告

XSL-FOの概要



XSL-FO文書はXMLに準拠したマークアップ言語であり、XSLTによってXSL-FO形式に変換される前の文書も同様です。これは、XHTML/HTMLとCSSの組み合わせとは対照的です。XHTML/HTMLはXML/SGMLに準拠していますが、CSSは独自の構文で記述され、XMLには準拠していません。

XSL-FOでは、XHTMLとは異なり、意味に基づいたマークアップは行わず、組版に必要なマークアップのみを行います。また、XSL-FO文書自身に組版対象となる文書データが全て格納されます。一方でCSSは、別のXMLもしくはXHTML文書の既定の表現を変更する方法を採用しています。

視覚的表現の他の手段としては、XHTML、DocBook、TEIなどが挙げられます。XSLは、XSLTが任意のXMLを処理できるため、どのようなXML文書にも適用できます。また、出力手段もXSL-FOに限らず、XSLTによってXHTMLなどに変換することも可能です。

XSLでは、XSLTスタイルシートを使うことが一般的です。このスタイルシートは、対象となるXML文書の文書型(スキーマ)に合わせて記述されます。スタイルシートは、組版を行う人が記述する場合もあれば、既製のものを利用することもあります。スタイルシートを適用することで、XML文書はXSL-FO文書に変換されます。

XSL-FOでは、XML文書の作成者が直接XSL-FO形式のXML文書を作成することは想定されていません。代わりに、作成されたXML文書をXSLTで変換することで、XSL-FO形式の文書を生成することが想定されています。XSLTのスタイルシートは、XML文書とは別に作成する場合と、XML文書自身に埋め込む場合があります。XSL-FO文書の生成は、XSLTによる変換の他に、適切なXSL-FO形式に生成できるのであれば任意の手段で生成できます。

XSLTは、当初はXSL-FOへの変換のみが想定されていましたが、現在ではXML文書の汎用的な変換にも使用されています。多くのソフトウェア技術者は、XSLTをXML文書の汎用的な変換言語として認識しており、XSL-FOへの変換という用途はあまり認識されていません。

XSLTの変換は非常に強力で、文書の目次や参考文献とのリンク、索引などを自動的に生成できます。XSL-FO形式の文書が生成されると、XSL-FO処理系がその文書を処理して組版します。XSL-FO処理系は、XSL-FO文書を入力として、PDFなどの読みやすいファイル形式や印刷可能な媒体を出力します。出力可能な形式は、処理系の実装によって異なりますが、PDFが最も一般的です。

XSL-FOの基本的な考え方



XSL-FOは、複数のページで構成される媒体を想定して設計されています。一方、HTMLとCSSは、ページの概念がない媒体(コンピュータ画面など)を想定しています。XSL-FOにおいてページの概念は不可欠であり、XMLを扱う人々にとって、複数のページで情報を表示する際には強力なツールです。

XSL-FOは、コンピュータによる組版を基本的な考えとしています。XSL-FO文書には、印刷対象となる文書データと、組版の制約情報が含まれています。XSL-FO処理系は、これらの情報に基づいて組版を行います。この仕組みのため、あるXSL-FO処理系による出力と、別の処理系による出力が一致しないことがあります。しかし、XSL-FOの目的は組版された媒体を生成することであるため、大きな問題にはなりません。XSL-FOの一般的な用途は、紙に印刷された文書やPDFファイルの生成です。

XSL-FOは、「内容駆動」の組版に適しており、書籍や論文、法的文書などで標準的な方法です。この設計は、単一のテキストフローと、ページの余白に様々な情報を配置できる点が特徴です。対照的に、「割り付け駆動」の組版は、新聞や雑誌などで用いられ、コンテンツの制約が強い場合に割り付けを調整する設計です。XSL-FOは、この形式を表現する機能が不足しているため、新聞や雑誌のようなレイアウトは苦手です。

ただし、XSL-FOは非常に豊富な表現力を持っており、表、リスト、側浮動体など、多くの機能を利用できます。これらの機能はCSSの組版機能と互換性があります。

XSL-FO文書の構造



XSL-FO文書はXML文書ですが、明示的なDTDやスキーマに従う必要はなく、XSL仕様で構文が定義されています。XSL-FO文書は、大きく分けて以下の2つの必須部分で構成されます。

1. ページレイアウトの定義: ページレイアウトを詳細に定義する部分です。レイアウトは複数定義でき、それぞれに名前をつけます。各レイアウトでは、テキストの表記方向、ページの縦横の長さ、余白の長さなどを指定できます。また、奇数ページと偶数ページで余白を変えるなどの設定も可能です。
2. 文書データの記述: 一連の文書データを記述する部分です。XSL-FOで規定されたマークアップを用いて、文書データを構成する内容と、どのページレイアウトで表現するかを指定します。

文書データは複数のフローに再構成され、各フローはページレイアウト定義に関連付けられます。フローは複数のブロックを含むことができ、各ブロックにはテキストデータやインライン要素を含めることができます。また、ページの余白部分にページ番号や章見出しなどを印字することも可能です。

XSL-FOとCSSは似た概念を採用していますが、いくつかの違いがあります。ブロックとインライン要素の概念はCSSと似ていますが、間隔や余白の規則は異なります。XSL-FOでは、テキストの表記方向、ブロック内のテキストの流し込みの方向など、ページの特性に沿って全て指定することができます。これにより、英語以外の言語や縦書きにも対応できます。

また、XSL-FOでは、CSSのleftやrightの代わりにstartやendなどの用語が使われ、表記方向に基づいた用語を採用しています。XSL-FOの基本的なマークアップはCSSを基にしており、要素の属性は明示的に上書きしない限り、子要素に継承されます。

XSL-FOの機能



XSL-FOには、以下のような多様な機能が用意されています。

段組: 複数の段数でページを記述できます。ブロックを段から段へ流し込むだけでなく、ブロックを複数の段をまたがって配置することも可能です。
リスト: リスト要素が複数並んだ構造で、ラベルと本体で構成されます。ラベルと本体の配置は、ページレイアウトの記述に依存します。
ページ付け制御: 段落の途中で改ページする場合、前ページに残すべき行数と次ページに印字すべき行数を指定できます。また、ブロック全体を1ページに収めることも可能です。
脚注: ページの下部に脚注を付けることができます。脚注の文章は、文書の主となるフローの脚注への参照箇所に記述します。
: HTML/CSSの表と同様に、各枠にデータを配置できます。各列や見出し行に対してスタイル情報を指定できます。また、列幅の計算や、枠内テキストの調整も可能です。
その他: ページ番号の引用、枠線のスタイル、背景色や画像の配置、インライン要素など、多くの機能を備えています。

XSL-FOの特長



XSL-FO文書はXMLに準拠しているため、XSLTスタイルシートとXSLT処理系を使うことで、様々な文書型のXML文書からXSL-FO文書を生成できます。XSLTとXSL-FOを組み合わせれば、ウェブで閲覧できるXHTML文書や印刷向けのPDF文書を生成できます。

また、XSL-FO文書は明示的なスキーマやDTDが定義されていないため、XML形式のデータを格納できます。特にSVGなどの画像形式を埋め込むことが一般的です。

XSL-FOは、CSSを基にしているため、CSSに慣れているユーザーにとっては使いやすいです。XSL-FO文書の特定部分がどのように組版されるか認識しやすい点も、大きな特長です。

XSL-FOの課題



XSL-FOの課題の一つは、XSL-FO処理系が少ないことです。XSL-FOの仕様には多くの機能が規定されているため、仕様に完全に準拠した処理系は存在しません。XSL-FOの需要が少ないため、処理系の開発が進んでいないと考えられます。また、TeXのような組版ソフトウェアが長年利用されていることも、XSL-FOの普及が進まない要因です。

もう一つの課題は、XSL-FO文書を手作業で記述することが難しく、冗長になることです。XSLTはXSL-FO文書を簡単に生成できるように設計されているため、XSL-FO自体には簡潔な生成方法は考慮されていません。XSL-FOの初心者は、XSL-FO文書の記述方法だけでなく、場合によってはXSLTによる変換方法も学ぶ必要があります。

XSL-FOのバージョン



2006年12月時点では、XSLの最新バージョンは1.1です。XSL-FO 1.0の勧告後、いくつかの処理系が登場しましたが、機能不足のため、各処理系が独自拡張を行うようになりました。そのため、W3CのXSLワーキンググループは、共通機能を標準化することに重点を置いてきました。その結果としてXSL-FO V1.1が誕生し、巻末索引、改訂バー、PDFにおけるしおり、財務諸表における部分和、複数方向への記述などの機能が標準化されました。

XSL-FO処理系の実装



現在、XSL-FO処理系の実装は多くありませんが、いくつかの実装が利用可能です。

主な実装例:

Apache FOP: Apache XML Graphicsプロジェクトによるオープンソースの実装。PDFを含む様々な出力形式に対応しています。
PassiveTeX パッケージ: TeXを使い、XSL-FO文書をPDF形式に変換します。
XSL Formatter: アンテナハウス社による商用の実装です。

XSL-FO処理系の出力形式は、実装によって異なり、PDF、PostScript、SVGなど様々なフォーマットに対応しています。また、ファイルを作成せずに、コンピュータ画面に直接表示したり、印刷することも可能です。

関連項目



OpenDocument
XML
スタイルシート
XSL
XSLT
XPath
CSS
DSSSL
TeX
La[[TeX]]

外部リンク



The Extensible Stylesheet Language Family (XSL) - W3CのXSLのページ
XSL-FO 処理系の現状報告 - W3CのXSLワーキンググループへ報告された実装レポート
アンテナハウス社のページ (日本語)
XSL Formatter - アンテナハウス社による商用のXSL-FO処理系
XSL-FO の基礎 第2版 - XML を組版するためのレイアウト仕様
XMLからXSL-FOに変換するためのXSLTスタイルシートの作成方法
Apache FOP - Apache XML プロジェクトによるオープンソースのXSL-FO処理系。PDF/SVG/TXTなどへの変換が可能
XSL-FO Visual Designer on Ecrion.com
What is XSL-FO? - O'REILLY XML.com
XSL-FO: Ready for Prime Time? on the Gilbane Report
A Tool for editing and testing XSL Formatting Objects
Data2Type (german) XSL-FO informations
XSL Formatting Objects Tutorial on RenderX
XSL-FO Tutorial and Samples HTML or PDF (PDF, 476 KB) on Ecrion.com
XSL-FO Editor
Stampa Reports System - XSL-FO Visual Editor
* XSL-FO Editor

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。