• 検索結果がありません。

Table of Contents XML...5 XSLT...6 XSLT...7 XSLT...7 XSL-FO XSLT...7 XSL-FO...8 XSL-FO XSL-FO Keep

N/A
N/A
Protected

Academic year: 2021

シェア "Table of Contents XML...5 XSLT...6 XSLT...7 XSLT...7 XSL-FO XSLT...7 XSL-FO...8 XSL-FO XSL-FO Keep"

Copied!
33
0
0

読み込み中.... (全文を見る)

全文

(1)

Extensible Stylesheet Language

(XSL-FO)解説

アンテナハウス株式会社

2001 年 4 月

(2)

Table of Contents

はじめに...4

組版プロセス概観...5

XML ドキュメント...5 XSLT とは?...6 XSLT プロセサ... 7 XSLT スタイルシート作成法...7 XSL-FO 用 XSLT スタイルシート...7 XSL-FO ファイルの例...8 世界の XSL-FO プロセサ ...9 組版結果の例...9

XSL-FO 仕様の概要 ...10

現状...10 組版プロセス...10 エリア・モデル...10 リファレンス・オリエンテーション...11 ライティング・モード...12 ブロックとインラインの進行方向...12 Keep と Break...13 FO のプロパティからエリアのトレイトへ...14 ショートハンド・プロパティ...14 数値の表現...14

XSL-FO の一覧...15

宣言、ページネーション、ページレイアウトの FO ...15 ブロック・レベルの FO...15 インラインレベルの FO...16 表の FO...16 リストの FO...17 リンクとマルチ FO...17 アウト・オフ・ラインの FO...17 その他の FO...17

フォーマッテイング・プロパティ...18

ページネーションの基本...20

XSL-FO ドキュメントの構成...20 レイアウトマスターセット...21 ページマスター...21 ページシーケンス...22

ブロックレベル要素...24

ブロック要素...24 ブロックコンテナ...24

リスト...25

表...26

カラムの幅の設定...26 表のセルの属性...27

(3)

インラインの FO...29

文字修飾...29 文字の大きさ ...29

ルビの表現...30

脚注...31

索引や目次の作成方法...32

付録...33

XSL 仕様小史 ...33

(4)

はじめに

ドキュメントを XML 化する目的は、Web ページを作成したり、電子的に配布するデータを作り出す、電 子的なマニュアルを作成する、など、いろいろあります。しかし、どのような意図で XML ドキュメントを 作成するにしても奇麗にレイアウトして「紙」に印刷することを欠かすことができません。 しかし、ドキュメントを SGML や XML で作成した時、それを奇麗に組版して印刷するのは技術的に難 しい課題です。SGML の時代からドキュメントを SGML 化することで、ワン・ソース・マルチユースが実 現できると言われてきましたが、現実には紙に印刷することさえ簡単には実現できませんでした。 SGML、XML ドキュメントを印刷する方法として、今までよく使われてきたのは次のような方法です。 • XML を Perl などのスクリプトで MicrosoftWord の外部ファイル形式である RTF に変換する。RTF を Word などの RTF を読み込むアプリケーションで読み込んでレイアウトを調整して印刷する。レイア ウト調整済み文書は RTF 形式になる。 • FrameMaker+SGML のスタイルを指定して、FrameMaker+SGML で読み込み、レイアウトを調整し てから印刷する。この場合、レイアウト調整済み文書は FrameMaker の独自形式となる。 • 他の対話式組版ソフトや DTP ソフトの形式に変換し、組版ソフトや DTP ソフトでレイアウト調整し て印刷する。レイアウト調整済み文書は、組版ソフトや DTP ソフトの形式となる。 しかし、これらの方法には問題があります。一番大きな問題は、XML コンテンツをアプリケーション独 自の形式に変換してしまうことです。変換後のファイルに対してレイアウト調整を行うわけですが、レイ アウト調整済み文書は元の XML コンテンツとは切り離されたアプリケーション独自のものになります。も し、ソースの XML コンテンツを変更したら、変換からレイアウトまでの操作をもう一度繰り返さなければ なりません。 ドキュメントのソースを作ってから、レイアウト指定と調整を行い印刷するまでの流れは一サイクルで 済むことはむしろ珍しく、普通は、校正などでソース変更とレイアウト調整のプロセスを何サイクルも通 ります。従って、XML ソースを修正する都度、アプリケーションに読み込んでレイアウト調整が必要にな るのでは、余計に手間がかかり、折角 XML でコンテンツを作った意味が薄くなってしまいます。そうかと いって、レイアウト調整するアプリケーション上で文書の内容を修正したのでは、XML ソースと最終印刷 物の内容がずれてしまいます。 こういったことを考えますと、コンテンツ XML 化の効果を上げるには XML コンテンツ作成、レイアウ ト調整、組版・印刷まで一連のフローを確立するのが理想的です。

Extensible Stylesheet Language 仕 様は 、 Web の 標 準 を 定 め る 団 体 で あ る World Wide Web Consortium

(W3C)で、「XML を奇麗にレイアウトして組版するための仕様」として、策定が進んでいるものです。この 仕様の正式な略称は XSL ですが、現在、XSL という言葉は大変混乱していますので、本稿では XSL-FO と 略記します(1) 現在、InternetExplorer5 を使えば XML を表示したり印刷したりすることができるようになっています。 しかし、これは、実際は内部で HTML に変換して表示しています。HTML にはページの概念がなく、IE5 のようなブラウザはパソコンの画面で表示することを主たる目的として設計されています。このため、ブ ラウザではページレイアウトを指定するのが難しくなります。画面で表示してみるならブラウザが良いで すが、「紙」への印刷では物足りません。 これに対して、XSL-FO にはページの概念がありますので、「紙」への印刷を前提とする多種類の機能を 使用することができます。次は、その一例です。 • 見栄えの良い表紙を作る。 • 本文とは違う印刷書式で目次を作成する。目次にはページ番号つける。 • 左ページ、右ページで印刷書式を変更する。 • 本文にヘッダ、フッタ、サイドバーを設ける。 • ヘッダにページ番号を印刷する。 • 索引を作成し、索引にページ番号を添える。 • 脚注を付ける。 • 段組の印刷書式を設定したページを作る。 (1)末尾の付録「XSL 仕様小史」を参照

(5)

組版プロセス概観

レイアウトしてページを作成する処理を組版処理といいますが、脚注などがありますと、組版処理を行 うにはかなり高度なアルゴリズムが必要です。 XSL-FO を使う組版プロセスは次の図のようになります。XML 文書をいきなり組版するのではなく、第 一段階で、XML ドキュメントを XSL-FO ドキュメントに変換します。次に、第二段階で、XSL-FO ドキュ メントを組版処理します。 第一段階で使うプログラムが XSLT プロセサです。XSLT プロセサが、XML ドキュメントを XSL-FO に 変換するためのルールを記述したものが XSLT スタイルシートです。ソースの XML ドキュメントと XSLT スタイルシートを XSLT プロセサに入力すると XML ドキュメントが XSL-FO ドキュメントに変換されま す。 この XSL-FO ドキュメントは、レイアウトを指定した状態のもので、まだページにレイアウトされた状 態ではありません。なお、XSL-FO ドキュメントを XSLT 以外の別の方法で作成しても構いません。

第二段階は、XSL-FO ドキュメントを XSL-FO プロセサ(組版エンジン)でページ組版します。XSL-FO プ ロセサは組版結果を用紙に印刷したり、PDF に出力したり、画面に表示したりします。 次に上述の組版プロセスで出てきましたいろいろな用語について、順に概略を説明します。

XML ドキュメント

XML ドキュメントの構成単位は要素です。要素とは、開始タグと終了タグで内容を囲ったものでタグに は要素名を付けます。XML 文書の全体構造は、要素をツリー構造になるように配置したものです。要素の ツリーは、通常、文書の論理的構造に従って構築します。

(6)

次の例は XML 文書の一部です。 XML 文書の一部(例) <doc> <head> <title> スタイルシート解説 </title> <author> アンテナハウス株式会社 </author> <date> 2001 年 2 月 </date> </head> <body> <section> <title> スタイルシートとは </title> ...(略)... </section> ...(略)... </body> </doc>

この例の中で、doc がルート要素(文書全体を囲むタグ)で、head 要素、body 要素はルート要素の子供、 title、 author、date などの要素は、さらにその下位の要素になります。要素の名前は「要素型名」と言いま すが、ユーザが自由につけることができます。正しい(wellformed な)XML ドキュメントは、ルート要素を最 上位要素とするツリー構造で表すことができます。 「ドキュメントを XML 化するのはなんのためか?どんなメリットがあるのか?」という質問を良く聞き ます。 XML では上のようにドキュメントの内容をタグで囲ってツリーで表現することで、タグを使ってツリー 構造を簡単に変換できるということが大きなメリットです。ツリーの枝の順序を入れ替えたり、枝や葉を コピーしたり、削除したりなどの操作が簡単にできます。 ツリー構造を変えるということは、次の例のようにドキュメントの一部を複製したり、場所を変えた り、順番を入れ替えたりする操作に相当します。 • XML の中の要素の順番を並び替える=ドキュメントの内容の順序を並び替える • 二次元の配列になっていないものから二次元配列の表を自動的に生成する • 「title」など指定要素を選択してコピーする=目次を自動的に作り出す • 「index」などの指定要素をコピーする=索引を自動的に作り出す • 「note」要素を取り出して、ツリーに新しい枝(注の一覧など)を作る。ツリーの作り方次第で、注 の置き場所は、どこにでも簡単に移動できます。 バイナリ形式のワープロ・ドキュメントではこういった操作は簡単にはできません。「ツリー操作が簡単 にできること」はドキュメントを XML 化する大きなメリットです。

XSLT とは?

XSLT というのは仕様の名前です(1)。 XSLT は、もともと、ソース XML 文書を XSL-FO 文書に変換するために設計された仕様です。これは XML 文書のツリー構造を変換することにあたります。それで XSLT は、XML から XSL-FO への変換に限ら ず、XML 文書を HTML 文書に変換したり、それ以外のツリー構造の変換用として汎用に使われるように なっています。 (1)詳細は付録を参照

(7)

XSLT の仕様を実現するプログラムが XSLT プロセサです。XSLT プロセサにはソース XML ドキュメン トのツリーを変換するためのルールを外部ファイルとして与えます。このルールを記述したファイルを XSLT スタイルシート(または、XSL スタイルシート)と言います。 XSLT スタイルシートには入力 XML ドキュメントの要素を出力 XML ドキュメントの要素に変換するた めのテンプレートを記述します。このテンプレートの作り方によって色々な XML のツリー変換を行うこと ができます。

XSLT プロセサ

XSLT は W3C の勧告になっており、勧告版の XSLT 仕様を実装する XSLT プロセサは沢山あります。そ の多くは無償で配布されています。現時点で、一番、機能的に強力な XSLT プロセサは、Microsoft が配布 している MSXML3.DLL でしょう。これは、正式名称は「MSXML パーサー バージョン 3.0」と言い、 2000 年 11 月 1 日から、Microsoft の Web サイトからダウンロードによる配布が始まっています。まだ、 Internet Explorer5.5 には添付されていませんが、MS の開発者がメーリング・リストで発言しているところ によりますと、Internet Explorer6 には添付されるようです。 MSXML3.DLL は、 プログラムの部品( ライブラリー)です。Internet Explorer などから使うか、または、 DLL を動かすプログラムを作成しないと、単独の XSLT プロセサとしては使えません。 そこで、コマンドラインから使用するためのユーティリティも、別途、Microsoft のサイトから入手する ことができます。 MSXML3.DLL Microsoft が配布している XML プロセサで、XSLT 変換機能を備えています。 MSXSL.EXE MSXML3.DLL は、DLL ですのでエンドユーザが直接使うことができません。MSXML3.DLL をイ ンストールした PC に MSXSL.EXE をインストールしますと、DOS 窓からコマンドラインで XSLT 変換ができます。

XSLT スタイルシート作成法

現在、XSLT スタイルシートの作成は、プログラマがエディタを使って行う状態で、簡単にスタイルシー トを作成するツールはありません。米国には XSL のメーリング・リストがあり、1 日 100 件を越えるメー ルで XSLT の書き方等に関する議論がなされている状態で、XSLT スタイルシートに関する関心の高さがう かがえます。XSLT スタイルシートの作成は、現状では、トライアンドエラー状態です。しかし、XSLT ス タイルシートの作成は、慣れれば比較的簡単にできます。今後、XML の普及に伴って XSLT スタイルシー トが普及していくことは間違いないところです。

XSL-FO 用 XSLT スタイルシート

次に、XML 文書を、XSL-FO に変換する XSLT スタイルシートの例を示します。 XSL-FO 用スタイルシートの例 <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" indent="no" />

<xsl:param name="toc-make" select="true()"/> <!-- Paper Size --> <xsl:param name="paper-width" > 210mm </xsl:param> <xsl:param name="paper-height"> 297mm </xsl:param>

(8)

...中略... <!-- Content Transform--> <xsl:template match="doc"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master margin-top="5mm" margin-bottom="5mm" margin-right="5mm" margin-left="10mm" master-name="PageMaster"> ...中略... </fo:simple-page-master> ...中略... </fo:layout-master-set> ...中略... </fo:root> </xsl:template> </xsl:stylesheet> この XSLT スタイルシートの中で、xsl:という接頭子(ネームスペース接頭子)で始まる要素が XSLT 仕様 で決まっているルール記述用の要素です。また、fo:という接頭子で始まっている要素が、XSL-FO ドキュメ ントに出力される要素です。 XSL-FO に変換するための XSLT スタイルシートを作成するには、XSLT のルールの書き方と、それに加 えて、XSL-FO に関する知識が必要となります。XSL-FO ではページや行間隔も細かく指定しますので、 HTML に変換する XSLT スタイルシートを作成するよりは時間がかかります。 しかし、上の例の XSLT スタイルシートは、PureSmartDoc 形式で記述された XML ファイルを XSL-FO に 変換するための汎用の XSLT スタイルシートとしても使うことができます。 このように、ある DTD に従う XML ファイルについては、スタイルシートをひとつ作成すれば XSL-FO ドキュメントに変換できます。もしレイアウトを調整するにしても若干の調整で済みます。ひとつのスタ イルシートを使い回すことで、効率をあげることができます。 特に、印刷物ではレイアウト指定の良し悪しが、見易さ、読み易さに大きな影響を与えます。優れたス タイルシートを作るのは、プログラムの知識だけではなく、デザインの能力も必要となります。今後は、 優れたスタイルシートの市場が生まれる可能性もあるでしょう。

XSL-FO ファイルの例

XSL-FO ファイルは、fo:root をルート要素とする wellformed な XML ファイルです。次に XSL-FO ファイ ルの先頭部分の例を示します。 XSL-FO ファイルの例 <?xml version="1.0" encoding="UTF-16"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master margin-top="5mm" margin-bottom="5mm" margin-right="5mm" margin-left="10mm" master-name="PageMaster" page-height="297mm" page-width="210mm"> <fo:region-body margin-top="8mm" margin-right="8mm" margin-bottom="8mm" margin-left="8mm"/> <fo:region-before border-after-style="solid" border-width="thin" extent="5mm"

(9)

display-align="after"/> <fo:region-after border-before-style="solid" border-width="thin" extent="5mm" display-align="before"/> <fo:region-start reference-orientation="270" extent="5mm"/> <fo:region-end reference-orientation="90" extent="5mm"/> </fo:simple-page-master> ...中略... </fo:layout-master-set> ...中略... </fo:root>

世界の XSL-FO プロセサ

XSL-FO ファイルをページ組版する処理を担当する「組版エンジン」が XSL-FO プロセサです。現在、世 界で公開されている XSL-FO プロセサには次のようなものがあります。 名称 特徴

Antenna House XSL FormatterV1.1 アンテナハウスの XSL-FO 組版エンジンとユーザ・インターフェイス (GUI)。組版エンジンは、日本語も英語も関係なく使うことができます。 GUI は、日本語版(V1.1J)と英語版(V0.1、V1.1E は準備中)があります。 コマンドライン・インターフェイス、COM サーバ・インターフェイス もあります。

FOP Web サーバの開発で有名な Apache が取り組んでいる JAVA 版 XSL-FO 組版エンジン。XSL-FO から PDF を出力する。2001 年 1 月時点で、0.16 版が配布されています。オリジナルでは日本語を使うことはできない が、日本語を使うパッチが公開されています。

XEP 米国の RenderX というベンチャー企業の JAVA 版 XSL-FO 組版エンジ ン。やはり、FO から PDF を出力する。日本語は使えません。

PassiveTeX FO を処理する TeX のマクロライブラリー(組版エンジンは TeX を使 用)。

UFO Unicorn 社の FO を TeX のマクロに変換する開発ツール(組版エンジン は TeX を使用)。

組版結果の例

本解説書は、XML ドキュメントとして記述して、XSL-FO に変換し、Antenna House XSL Formatter で組版 したものです。ブラウザとは違って、ページ番号やヘッダの設定が行われて、印刷物としての体裁になっ ていることを確認していただけることでしょう。

(10)

XSL-FO 仕様の概要

現状

XSL-FO 仕様は、2000 年 11 月 21 日 Candidate Recommendation になりました。Candidate Recommendation は仕様として安定した状態となり、 XSL-FO プロセサを実装してください、 という段階です。 今後、 Proposed Recommendation 次いで Recommendation と進むことになっています。

XSL-FO の仕様書は、エンドユーザ向けではなく開発者向けに書かれています。最初に、XSL-FO プロセ サが担当するページ組版プロセスの概念を説明し、さらに XSL-FO プロセサが準拠するレイアウト・モデ ルを規定しています。

さらに、XSL-FO ドキュメントの要素である Formatting Objects(以下、FO と言います)を規定します。 FO とは、段落、リスト、表などの組版の対象になるもののことです。FO には、ページマスターの記述方 法やマージンや本文領域の設定方法等ページネーション用のもの、段落やヘッドラインなどブロック・レ ベルのもの、行中に配置されるインライン・レベルのものなど 56 種類があります。 ページの大きさやエリアの広さ、文字のフォント名やフォントのサイズなどは FO のプロパティで表しま す。プロパティは 246 種類あり、中には CSS2 の仕様からコピーされたものが多くあります。FO のレイア ウト仕様は CSS2 を強く意識して設計されています。 XSL-FO の仕様 Version 1 ではまだ高度なページレイアウトは困難ですが、操作説明書、報告書などのレ ベルであれば充分実用に耐えると考えています。

組版プロセス

組版というのは、XSL-FO ドキュメントを読者の目に見える形式(出力形式)にすることです。XSL-FO の 仕様書では、数段階を踏んで組版するプロセスを解説していますが、組版ソフトは必ずしも XSL-FO の仕 様書どおりのステップを踏む必要はなく、出力形式が仕様書に書かれた制約に従っていれば良いというこ とになっています。

AntennaHouse XSL Formatter は、XSL-FO 仕様のプロセスをできるだけ忠実に実装しており、Formatter の 組版オプションを設定すれば、FO ファイル、リファインされた FO ファイル、エリア・ツリーをファイル として出力できます。 以下では XSL-FO の仕様について理解を深めるため、仕様書に記述されている組版プロセスについて簡 単に説明します。

エリア・モデル

XSL-FO の仕様の組版モデルはエリア・モデルといいます。XSL-FO のエリア・モデルは、CSS2 のボッ クス・モデルにほぼ対応しています。CSS2 のボックスは XSL-FO のエリアに相当し、CSS2 の仕様で現れ る要素は XSL-FO では Formatting Object に相当します。

XSL-FO ドキュメントの FO は、出力媒体の領域と対応づけられている訳ではありません。エリアが出力 媒体上の四角い領域に対応付けられます。

XFL-FO プロセサは、FO からエリアを作り出すことで、XSL-FO ドキュメント・ツリーをエリア・ツリー に変換します。エリア・ツリーはドキュメントの中の文字、図形やイメージを配置するための位置情報、 間隔空けの情報やその他組版のために必要な情報を含む順序づけられたツリーです。 エリアはブロック・エリアとインライン・エリア(行内エリア)の2種類に分類できます。ブロック・エリ アのひとつにライン・エリア(行エリア)がありますが、ライン・エリアはその子供がすべてインライン・エ リアになります。また、インライン・エリアのひとつにグリフ・エリアがありますが、グリフ・エリアは 子供をもたず、内容文字のグリフであるという末端のエリアになります。 エリア・ツリーと出力媒体の上の領域との対応関係は次の図のようになります。「P」がページ、「A、 B、C」はブロック・エリア、「XY」がライン・エリア、「あ、い、う」がインライン・エリアに相当し ます。

(11)

リファレンス・オリエンテーション

ページ全体については用紙の上が top、下が bottom、左が left、右が right となります。これは絶対方向で す。ページの内部のエリアの中には座標系を設定できる参照エリアがあります。参照エリアの座標系は、 その参照エリアを設定する FO の reference-orientation プロパティを設定することで、絶対方向を変更するこ とができます。reference-orientation の値は初期値は 0 です。例えば 90 を指定しますと、指定したエリアの 参照エリアは、その親の参照エリアの方向に対して反時計廻りに 90 度回転します。 例えば、Bの reference-orientation プロパティを 270 に設定しますと次のように、Bの領域の top はPの top に対して 270 度回転します。 参照エリアを生成できる FO は次のものです。 • fo:simple-page-master • fo:region-body • fo:region-before • fo:region-after • fo:region-start • fo:region-end • fo:table

(12)

• fo:block-container • fo:inline-container

ライティング・モード

エリアの中に、その子供のブロックを配置するときブロックの進行方向は、行の進行方向に相当しま す。また、インライン・エリアにその子供のエリアを配置するときその子供エリアの進行方向は、テキス トの文字を進める方向に相当します。これをライティング・モードと言います。ライティング・モードの 初期値は行の進行方向は上から下、文字の進行方向は左から右です。参照エリアを設定できる FO に対して は writing-mode プロパティを設定することで、ライティング・モードを変更することができます。 writing-mode プロパティの値は次のものがあります。 lr-tb(初期値) インラインのエリア、テキストの文字は左から右に進み、行とブロックは上から下に進む。 rl-tb インラインのエリア、テキストの文字は右から左に進み、行とブロックは上から下に進む。アラ ビア語、ヘブライ語で使われる。 tb-rl インラインのエリア、テキストの文字は上から下に進み、行とブロックは右から左に進む。日本 語、中国語の縦書きで使われる。 次の図は、Bの writing-mode プロパティを tb-rl に設定し、Bブロックを縦書きとした例です。reference-orientation は 0 です。

ブロックとインラインの進行方向

エリアの属性と属性値はトレイトと言います。トレイトはエリアをレンダリングしたりあるいはエリア の組版の制約を規定するのに使われます。トレイトには FO のプロパティと直接対応しているものもありま すし、間接的に導き出されるものもあります。 FO からエリアが作られる際にエリアのトレイトが決まります。 例えば FO の reference-orientation と writing-mode によって、参照エリアのブロックとインラインのエリアの進行方向が決定されます。これは、 エリアの block-progression-direction と inline-progression-direction というトレイトになります。 エリアの中にさらに他のエリアやテキストを配置する領域は内容領域です。内容領域の周囲にパディン グ領域、ボーダー領域をもち、それぞれの周辺が内容境界、パディング境界、ボーダー境界となります。 周囲にスペース(余白)を持つこともあります。これらの領域の配置はエリアの block-progression-direction と inline-progression-direction によって決まります。

(13)

ブロックの進行方向の前が before、後ろが after になります。インラインの進行方向の前が start、後ろが end です。

Keep と Break

ページ参照エリア(ページ・マージンの内側=region-body のマージンを含む領域)、カラム・エリア(段組 の段領域)、ライン・エリアの 3 種類のエリアをコンテキスト・エリアと言い、コンテキスト・エリア内で Keep と Break 条件を設定できます。

Break には break-before、break-after の2つの条件があります。それぞれ FO の break-before、break-after プ ロパティに、page、even-page、odd-page、column、auto を指定することで設定されます。例えば FO の break-before を page に設定すれば、その FO から生成される最初のエリアは、常にページ参照エリアの中で 先頭のエリアになります。同様に例えば FO の break-after を page に設定すれば、その FO の生成する次のエ リアが、ページ参照エリア内に存在しないか、次のエリアはページ参照エリアの先頭になります。auto に するとなにも Break 条件が設定されません。

Keep には keep-with-previous、keep-with-next、keep-together の3つの条件があります。それぞれ、FO の keep-with-previous、keep-with-next、keep-together の within-page、within-column、within-line コンポーネントに

(14)

強度を示す値を設定するか always とします。数字が大きいほど強く always は最強の条件となります。auto にすれば Keep 条件はなにも設定されません。

エリア・ツリーは、すべての Break 条件を満たすように設定されます。Keep 条件の方は、Break 条件が満 たされないか、より強い Keep 条件は失敗するような範囲で満たされます。

FO のプロパティからエリアのトレイトへ

FO のプロパティでは、レイアウト指定のパラメータを設定します。プロパティの値は、簡略記述した り、相対値や計算値で指定、あるいは、省略することもできます。このため組版エンジンは、まずプロパ ティ・リファインメントという処理でパラメータをエリアのトレイトに計算します。リファインメントの 処理は次の2つのステップを踏んで行います。 第一ステップ ショートハンド・プロパティ(簡略表記法)を個別のプロパティに展開します。継承、初期値で 与えられた属性値を FO に付与し、属性値を計算式で指定している場合にはそれを計算、相対的な 数値を絶対値に換算、二つ以上の属性から複合属性を作り出す、などの処理を行ってプロパティ の値を確定します。 第二ステップ プロパティをトレイトに変換します。

ショートハンド・プロパティ

XSL-FO では、2種類のショートハンド・プロパティを使えます。border のように CSS から直接もってき たものと page-break-inside のように CSS のプロパティを分解したり結合したりしたものです。両方とも同じ ように処理されます。ショートハンドは親から継承されず、展開した個々のプロパティが継承されます。 CSS では、関係するショートハンドと個々の関係するプロパティの処理順位をユーザが指定しますが、 XML の属性には優先順位がないので XSL-FO では優先順位を定義しています。原則はより詳細な指定の方 が優先度が高くなります。個々のプロパティはショートハンドよりも優先順位が高く、例えば、border より border-top の方がより詳しく、さらに border-top-color の方がより詳しくなります。このような優先順位を考 慮して、ショートハンドを展開します。

数値の表現

数値には、絶対数値と相対数値があります。 • 絶対数値は数字と絶対単位からなります。 • 相対数値は%、または相対長があります。相対長は数字と相対単位からなります。 数値の指定においては、+(和)、-(差)、*(積)、div(割算)、mod(残余)計算を使えます。 カラーは、RGB(red, green, blue)と ICC(International Color Consortium)の指定ができます。

分類 名前 定義 絶対単位 cm mm in 2.54cm pt 1/72in pc 12pt px 通常の距離で見られる印刷、ディスプレイ、ハンドヘルド機器では 0.28mm(約 1/90 イ ンチ)が望ましいが、1/92 インチまたは 1/72 インチのような値にしても良い。

(15)

XSL-FO の一覧

次に FO の一覧表を掲載します。

宣言、ページネーション、ページレイアウトの FO

FO の名前(要素名) 説明 6.4.2 fo:root FO ツリーのトップ・ノード 6.4.3 fo:declarations スタイルシートのグローバル宣言のグループ化 6.4.4 fo:color-profile スタイルシートの ICC カラー・プロフィールを宣言する 6.4.5 fo:page-sequence 文書のページの並びを生成する方法を規定する 6.4.6 fo:layout-master-set 文書で使われる全てのマスターを囲む 6.4.7 fo:page-sequence-master ページの並びを生成するためのページ・マスターのセットの制 約や順序を規定する 6.4.8 fo:single-page-master-reference ひとつのページ・マスターのひとつのインスタンスからなる下 位の並びを規定する 6.4.9 fo:repeatable-page-master-reference ひとつのページ・マスターの繰り返しのインスタンスからなる 下位の並びを規定する 6.4.10 fo:repeatable-page-master-alternatives いくつかの代替可能なページ・マスターのセットからなる繰り 返しの並びを規定する 6.4.11 fo:conditional-page-master-reference 使用条件を指定して、その条件を満たした時に使われるペー ジ・マスターを識別するのに使われる 6.4.12 fo:simple-page-master ページの領域を定義し、ページを生成するのに使われる 6.4.13 fo:region-body ページの中央のビューポートと参照エリアの対を規定する 6.4.14 fo:region-before ページ参照エリアの前の領域 6.4.15 fo:region-after ページ参照エリアの後ろの領域 6.4.16 fo:region-start ページ参照エリアのスタート側領域 6.14.17 fo:region-end ページ参照エリアのエンド側領域 6.14.18 fo:flow ページの中に分布する流し込みテキストを供給するフロー・オ ブジェクトの並びを規定する 6.14.19 fo:static-content 複数のページの中のひとつの領域に置かれる。静的なヘッダや フッタ等に使う 6.14.20 fo:title 文書のタイトルを関連づける

ブロック・レベルの FO

FO の名前(要素名) 説明 6.5.2 fo:block 段落、タイトル、ヘッドライン、図、テーブルのキャプション 等

(16)

FO の名前(要素名) 説明

6.5.3 fo:block-container ライティング・モードの異なるエリア等ブロック・レベルの参 照エリアを生成する

インラインレベルの FO

FO の名前(要素名) 説明

6.6.2 fo:bidi-override Unicode の bidi アルゴリズムが失敗した時使われる 6.6.3 fo:character グリフにマップする文字を表す 6.6.4 fo:initial-property-set fo:block の最初の行のフォーマット特性を表す 6.6.5 fo:external-graphic FO の要素ツリーの外部グラフィック・データ 6.6.6 fo:instream-foreign-object インライン・グラフィックやその他のジェネリックなオブジェ クト 6.6.7 fo:inline バック・グラウンド、囲みなどをもつテキストの一部を指定す るのに使う 6.6.8 fo:inline-container インラインの参照エリアを生成する 6.6.9 fo:leader リーダ罫を発生する 6.6.10 fo:page-number ページ番号を内容にもつインライン・エリアを得る 6.6.11 fo:page-number-citation 引用された FO によって作られる最初のエリアを含むページの ページ番号を参照する

表の FO

FO の名前(要素名) 説明 6.7.2 fo:table-and-caption 表とキャプションを一緒に組版するため 6.7.3 fo:table 表の表部分の組版用 6.7.4 fo:table-column 表のカラム幅のように同じカラムとスパンをもつセルに特性を 設定する 6.7.5 fo:table-caption fo:table-and-caption を使うときのキャプションを指定 6.7.6 fo:table-header 表のヘッダの内容 6.7.7 fo:table-footer 表のフッタの内容 6.7.8 fo:table-body 表の本体の内容 6.7.9 fo:table-row 表のセルを行にグループ化する 6.7.10 fo:table-cell 表のセルに配置する内容をグループ化する

(17)

リストの FO

FO の名前(要素名) 説明 6.8.2 fo:list-block リストを組版するためのフロー・オブジェクト 6.8.3 fo:list-item リストの項目のラベルとボディを含む 6.8.4 fo:list-item-body リストの項目の内容を含む 6.8.5 fo:list-item-label リストの項目のラベルを含む

リンクとマルチ FO

FO の名前(要素名) 説明 6.9.2 fo:basic-link 単純な 1 方向の1ターゲットのリンクの開始リソース 6.9.3 fo:multi-switch FO の代替サブ・ツリーの指定を囲み、切替を制御する 6.9.4 fo:multi-case FO の各代替サブ・ツリーを含む 6.9.5 fo:multi-toggle multi-case を切り替えて表示するためのエリア 6.9.6 fo:multi-properties 複数のプロパティ・セットを切り替えるために使われる 6.9.7 fo:multi-property-set FO の代替サブ・ツリーのプロパティ

アウト・オフ・ラインの FO

FO の名前(要素名) 説明 6.10.2 fo:float 普通、イメージをページの先頭、左右に配置し、フローオブ ジェクトはその廻りに流す時に使う 6.10.3 fo:footnote ページの region-body とページの後ろの端の脚注の部分に、脚注 の引用を作り出すのにつかう 6.10.4 fo:footnote-body 脚注の内容を生成するのに使う

その他の FO

FO の名前(要素名) 説明 6.11.2 fo:wrapper FO のグループでプロパティの継承を指定するのに使う 6.11.3 fo:marker ランニング・ヘッダ、ランニング・フッタを作り出すために fo: retrieve-marker と一緒に使う 6.11.4 fo:retrieve-marker  同上

(18)

フォーマッテイング・プロパティ

FO のプロパティの多くは CSS2 からコピーされており、3つのグループに大きく分類されています。 第一グループは、多数の FO に適用されるもので9つのサブグループに分類されます。 共通のアクセシビリティ・プロパティ アクセシビリティをサポートするためのプロパティ 共通の絶対位置決め用プロパティ 絶対位置指定のエリアの位置と大きさを制御するためのプロパティ 共通の聴覚プロパティ FO の内容の音声によるレンダリングを制御するためのプロパティ 共通のボーダー、パディング、バックグラウンドのプロパティ ブロック・エリアとインライン・エリアのバックグラウンド、ボーダー、パディングを制御する ためのプロパティ 共通のフォント・プロパティ テキストを含む FO のフォントの選択を制御するためのプロパティ 共通のハイフネーション・プロパティ ライン分割を制御するためのプロパティ、言語、スクリプト、国を含む。 共通のマージン・プロパティ−ブロック ブロック・レベル FO を囲むスペースとインデントを設定する。 共通のマージン・プロパティ−インライン インライン・レベル FO を囲むスペースを設定する。 共通の相対位置決め用プロパティ 相対的な位置決めされるエリアの位置を制御するためのプロパティ。 残りのプロパティは、幾つかの FO に適用されるものです。同じような機能をもつものに分類されていま す。 エリアの配置用プロパティ インライン・エリアの相互配置を制御するためのプロパティ。特に、異なるスクリプトの異なる ベースラインの調整など。また、ブロック・エリアの位置を調整するための display-align、relative-align というプロパティもある。 エリアの大きさ用プロパティ エリアのブロック・エリアとインライン・エリアの大きさなどを制御するプロパティ ブロックとライン関係のプロパティ ライン・エリアの構築とそれを含むブロック・エリアの中でライン・エリアをどのように配置す るかを管理するプロパティ 文字のプロパティ テキストの表示を制御するプロパティ。ワードの間隔調整、文字の間隔調整など。 カラー関連プロパティ カラー管理とカラーモデル選択用プロパティ フロート関連プロパティ サイドフローと before-float を管理するプロパティ

Keeps and Breaks プロパティ

ページ、カラム、ラインの中で同一にしたり分割したりするためのプロパティ。ウィドウ、オー ファンや内容を一緒にすることを含む。 レイアウト関連のプロパティ top や、クリッピング、オーバーフロー、カラムをまたがるためのプロパティ。 リーダとルールのプロパティ リーダと水平線を管理するためのプロパティ

(19)

ダイナミック効果のプロパティ リンクやその他のダイナミックな効果に関連する表示、動作を管理するプロパティ。 マーカーのプロパティ マーカーを生成したり検索するためのプロパティ。マーカは主として辞書のようなヘッダやフッ タのために使用する。 番号と文字を変換するためのプロパティ ページ番号やその他のフォーマッタ・ベースの番号付けを構築するためのプロパティ。 ページネーションとレイアウトのプロパティ ページの順序、レイアウト、生成を管理するためのプロパティ。ページの大きさ、ページの方 向、ページマスターの領域の大きさ、ページマスターの識別や選択、ボディ領域をカラムに分 割、コンテント・フローをレイアウト領域に割当するなど。 表のプロパティ 表のレイアウトと表示を管理するプロパティ。 ライティング・モード関連のプロパティ ブロックの進行方向、インラインの進行方向などに影響を与える様々な方向性とライティング・ モードに関連するプロパティ。 各種のプロパティ その他、分類できないプロパティ この他にショートハンド・プロパティがあります。ショートハンド・プロパティは、個別のプロパティ に展開されます。

(20)

ページネーションの基本

XSL-FO ドキュメントの構成

XSL-FO のツリーの概要は次の図のようになります。ルート・ノードは fo:root ですが、その子供として 1 つの fo:layout-master-set、fo:declarations(オプション)、一つ又はそれ以上の fo:page-sequence が来ます。 fo:layout-master-set は内容を割り付けるレイアウト用紙とその並び、すなわちレイアウトマスターを必要 数だけ規定します。 fo:declarations は、オプションでカラー・プロフィールなどのリソースを記述します。 fo:page-sequance(ページシーケンス)には、ページに流し込む内容を子供として配置します。 XSL-FO プロセサは、fo:page-sequence の内容を、対応する名前のレイアウトマスターで規定されるレイア ウト用紙に流し込んで行ってページを生成します。ページシーケンスを、どのレイアウトマスターを使っ て生成するかは fo:page-sequence の属性 master-name の値に、レイアウトマスターの名前を設定することで 指定します。 次の例は、表紙用(cover)と本文用(body)という2種類のレイアウトマスターを作成し、表紙と本文の2つ のページシーケンスを2つの用紙に生成するものです。 XSL-FO ドキュメントの構成 <fo:root> <fo:layout-master-set> <fo:simple-pagemaster master-name="cover"> ... ... </fo:simple-pagemaster> <fo:simple-pagemaster master-name="body"> </fo:simple-pagemaster> ... ... </fo:layout-master-set> <fo:page-sequence master-name="cover"> ... ... ... </fo:page-sequence> <fo:page-sequence master-name="body"> ... ... ... </fo:page-sequence> </fo:root>

(21)

レイアウトマスターセット

レイアウトマスターには、fo:simple-page-master と fo:page-sequence-master の 2 種類に分類されます。いづ れもレイアウトマスターセットの子供として定義します。 レイアウトマスターの基本は、1 ページの大きさ、本文領域、ヘッダ、フッタ、サイドバー(左右)を規 定する fo:simple-page-master(ページマスター)です。 レイアウトマスターのもうひとつの種類は、ページの並び順を規定する fo:page-sequence-master です。fo: page-sequence-master は、ひとつのページマスターからなる fo:single-page-master-reference とページマスター の繰り返しを規定する fo:repeatable-page-master-reference、fo:repeatable-page-master-alternatives があります。 master-reference は 、 ひ と つ の ペ ー ジ マ ス タ ー の 繰 り 返 し を 規 定 し、 fo:repeatable-page-master-alternatives はページマスターの組み合せの繰り返しを規定します。 fo:repeatable-page-master-alternatives では、偶数ページと奇数ページでページマスターを切り替えたり、最 初のページ、最後のページ、ブランク・ページでページマスターを切り替えるなどができます。また、 maximum-repeats プロパティで最大の繰り返し回数を設定できます。 それぞれのレイアウトマスターには master-name 属性の値にユニークな名前を設定します。

ページマスター

ページマスターはレイアウト用紙を定義するもので、ページマスターが一回使われる毎に一枚の用紙を 生成します。例えば、fo:repeatable-page-master-reference から fo:simple-page-master を参照している場合、fo: page-sequence の中からページマスターが呼ばれる毎に1ページを生成します。

FO 仕様の Version1 では、ページマスターには fo:simple-page-master しかありません。一つの XSL-FO ドキュメントでいろいろな用紙を使う場合は、fo:simple-page-master を沢山定義することができますが、 master-name プロパティにユニークな名前を付けて区別します。 fo:simple-page-master にはその子要素として、fo:region-body、fo-region-before、fo:region-after、fo-region-start、fo-region-end の5つの領域を指定します。次にひとつの例を示します。 ページマスター <fo:layout-master-set> <fo:simple-page-master margin-top="5mm" margin-bottom="5mm" margin-right="5mm" margin-left="10mm" master-name="PageMaster" page-height="297mm" page-width="210mm"> <fo:region-body margin-top="8mm" margin-right="8mm" margin-bottom="8mm" margin-left="8mm"/> <fo:region-before border-after-style="solid" border-width="thin" extent="5mm" display-align="after"/> <fo:region-after border-before-style="solid" border-width="thin" extent="5mm" display-align="before"/> <fo:region-start reference-orientation="270" extent="5mm"/> <fo:region-end reference-orientation="90" extent="5mm"/> </fo:simple-page-master> <fo:simple-page-master master-name="PageMaster-Cover"> <fo:region-body margin-top="8mm" margin-right="8mm" margin-bottom="8mm" margin-left="8mm"/> </fo:simple-page-master> </fo:layout-master-set>

(22)

上の例では次のようなページを設定しています。 • ページマスターの名前は、PageMaster とする • 全体の用紙サイズは A4 縦とする

• 本文にはページの上に文書タイトル,ページの下にページ番号を表示するエリアを確保する • 本文以外はページ番号などは表示しない

通常の横書モードでは、fo:region-before がヘッダ、fo:region-after がフッタ、fo:region-start が左サイドバ ー、fo:region-end が右サイドバーに相当します。 ページの中の領域の幾何的な配置は次の図のようになります。ページのサイズは page-width と page-height で指定します。ページには上下、左右に margin-top、margin-bottom、margin-left、margin-right が取られま す。その内側に、region-body のマージンを取ります。region-before、region-after、region-start、region-end は ページマージンの内側に接して、region-body のマージン領域に配置されます。 各 region には名前を指定する手間を省くため既定値で次の名前が決まっています。region-body の名前は body、 region-before は before、 region-after は after、 region-start は xsl-region-start、region-end は xsl-region-end となります。

ページシーケンス

fo:page-sequence はフローと呼ばれ、レイアウトマスターの5つの領域に配置するコンテンツを指定しま す。フローには静的なもの fo:static-content と fo:flow があります。fo:static-content は、通常はヘッダやフッ タの領域に配置され、すべてのページに繰り返されます。fo:flow は、通常は本文(fo:region-body)に配置され るテキストを内容として持ちます。

次は、ヘッダに「Extensible Stylesheet Language(XSL-FO)解説」という固定文字列、フッタにページ番号 (fo:page-number)を配置する例です。

(23)

ページシーケンス

<fo:page-sequence master-name="PageMaster">

<fo:static-content flow-name="xsl-region-before">

<fo:block text-align="center" font-size="small"> Extensible Stylesheet Language(XSL-FO)解説

</fo:block> </fo:static-content>

<fo:static-content flow-name="xsl-region-after">

<fo:block text-align="center" font-size="small"> <fo:pagenumber/>

-</fo:block> </fo:static-content>

<fo:static-content flow-name="xsl-region-start">

<fo:block text-align="center" font-size="small"/> </fo:static-content>

<fo:static-content flow-name="xsl-region-end">

<fo:block text-align="center" font-size="small"/> </fo:static-content>

<fo:flow flow-name="xsl-region-body"> ---本文に配置する内容(省略)----</fo:flow>

</fo:page-sequence>

XSL-FO プロセサは fo:page-sequence を処理する際、fo:page-sequence の master-name プロパティで指定して いるページマスターまたは fo:page-sequence-master を参照してページを作り出します。

ひとつひとつのフローには、flow-name プロパティで名前を設定します。ページマスターの中の領域とフ ローの対応関係を flow-map によって決定します。XSL-FO 仕様の Version1 では、flow-map は暗黙の前提と なっています。

(24)

ブロックレベル要素

ブロックレベルの FO には、fo:block と fo:block-container があります。

ブロック要素

XSL-FO では、本文テキストには見出し要素、段落要素などの区別がなく、テキストはすべて fo:block の 内容となります。フォントの種類や文字の大きさなどは fo:block のプロパティとして指定します。 次の例は、見出の fo:block です。フォントサイズを 14 ポイントに設定し、常に本文と同一の頁、カラム に配置されるように keep-with-next 属性を設定しています。 fo:block <fo:block font-size="14pt" space-before="0.5em" space-before.precedence="1" space-after="0.5em" keep-with-next.within-page=" always" keep-with-next.within-column="always" start-indent="10mm"end-indent="10mm" id="IDwfmY1"> --見出しのブロック要素--</fo:block>

ブロックコンテナ

fo:block-container は、横書文書の中に部分縦書を挿入するなど、本文と異なるライティング・モードのエ リアを組み込むのに一般的に使います。 次は、fo:block-container を使って本文に部分縦書を埋め込む方法の例です。 fo:block-container による部分縦書 <fo:block-container writing-mode="tb-rl" padding-before="3pt"padding-after="3pt" padding-start="3pt"padding-end="3pt" width="168mm"height="60mm"> <fo:block text-indent="1em" space-before="0.6em"space-after="0.6em" start-indent="10mm"end-indent="10mm" text-align="justify"> --本文テキスト(略)--</fo:block> </fo:block-container> ドキュメントを XML 化する 目的は 、 Web ページを作成した り 、 電子的に配布するデータを 作り出す 、 電子的なマニュアル を作成する 、 など 、 いろいろあ ります 。 しかし 、 どのような意 図で XML ドキュメントを作成 するにしても奇麗にレイアウト して ﹁ 紙 ﹂ に印刷することは欠 かすことができません 。 ところが 、 XML は HTML と は異なり 、 タグの名前やドキュ メントの構造を自由に定義でき ます 。 このため 、 XML のタグ を 、 そのまま印刷のためのレイ アウト指定に用いることはでき ません 。 こ れ は SGML で も 同 じ 事 情 で す 。 ド キ ュ メ ン ト を SGML や XML で作成した時 、 それを 奇麗に組版して印刷するのは技 術的に大きな課題となっていま す 。

(25)

リスト

XSL-FO では、箇条書を fo:list-block によって作成します。各箇条は、fo:list-item になり、list-item の中に fo-list-item-label(リストのマークを表示する部分)と list-item-body(リストのコンテンツを表示する部分)を配置 します。 注意すべき点が二つあります。 1. XSL-FO ではリストのラベル項目を明示的に指定する必要があります。したがって箇条書きであれば 箇条書き項目の先頭の記号を、番号付きリストであれば xsl:number で明示的に番号を振らなければな りません。 2. デフォルトスタイルシートが存在しないので,list-item-label の指定位置や list-item-body の開始位置を 明示的に指定しなければなりません。 XSL-FO のリスト <fo:list-block> <fo:list-item> <fo:list-item-label start-indent="inherit+ 5mm" end-indent="label-end()"> <fo:block>&#x02022;</fo:block> </fo:list-item-label> <fo:list-item-body start-indent="body-start()"> <fo:block>...</fo:block> </fo:list-item-body> </fo:list-item> <fo:list-item> <fo:list-item-label start-indent="inherit+5mm" end-indent="label-end()"> <fo:block>&#x02022;</fo:block> </fo:list-item-label> <fo:list-item-body start-indent="body-start()"> <fo:block>...</fo:block> </fo:list-item-body> </fo:list-item> </fo:list-block>

(26)

XSL-FO の表は、次のような構造をしています。 fo:table-and-caption 表と表のキャプションを一緒に組版するとき使う fo:table 表形式になっている部分を組版するのに使う。ひとつの表は、ヘッダとフッタとボディから構成 する。ヘッダとフッタはオプション。Break されたときヘッダとフッタを繰り返すかどうかをプロ パティで指定する XSL-FO の表 <fo:table-and-caption> <fo:table> <fo:table-header> <fo:table-row> <fo:table-cell> <fo:block>...</fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell> <fo:block>...</fo:block> </fo:table-cell> </fo:table-row> </fo:table-header> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block>...</fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell> <fo:block>...</fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:table-and-caption>

カラムの幅の設定

fo:table の子供要素の fo:table-column はオプションですが、同じカラムとスパンを有するセルの特性を指 定するとき使います。なかでも、一番重要なのは表のカラム幅の設定です。これは、fo:table-column の column-width プロパティで指定します。

(27)

カラム幅の設定

<fo:table-column column-number="1" />

<fo:table-column column-number="2" column-width="24pt" /> <fo:table-column column-number="3" column-width="6em" /> <fo:table-column column-number="4"

column-width="proportional-column-width(4)" /> <fo:table-column column-number="5"

column-width="proportional-column-width(2)" /> 上の例のカラム幅は次のようになります。

col1 col2 col3 col4 col5 1-1 1-2 1-3 1-4 1-5

表のセルの属性

表のセルには、セル単位で次のような修飾ができます。さらに、枠線や間隔については、上下左右の 4 辺に対して個別に設定することができます。 • セル単位で枠線を設定します。 • セル単位でバックグラウンド・カラーを設定します。 • セルの枠線とテキスト文字列との間の間隔(padding)を設定できます。 表のセルの属性設定 <fo:table-and-caption border-style="solid">

<fo:table border-collapse="separate" border-separation.block-progression-direction="2pt" border-separation.inline-progression-border-separation.block-progression-direction="2pt"> <fo:table-body>

<fo:table-row border-style="dotted" border-width="thin"> <fo:table-cell border-style="solid" border-width="thin"> <fo:block>1</fo:block>

</fo:table-cell>

<fo:table-cell border-style="dotted" border-width="thin"> <fo:block>2</fo:block>

</fo:table-cell>

<fo:table-cell border-style="dashed" border-width="thin"> <fo:block>3</fo:block>

</fo:table-cell>

<fo:table-cell border-style="inset" border-width="thin"> <fo:block>4</fo:block>

</fo:table-cell>

<fo:table-cell border-style="outset" border-width="thin"> <fo:block>5</fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell background-color="red"> <fo:block>1-1</fo:block> </fo:table-cell> <fo:table-cell background-color="blue"> <fo:block>1-2</fo:block> </fo:table-cell> <fo:table-cell background-color="green"> <fo:block>1-3</fo:block> </fo:table-cell> <fo:table-cell background-color="yellow"> <fo:block>1-4</fo:block> </fo:table-cell> <fo:table-cell background-color="blue"> <fo:block>1-5</fo:block> </fo:table-cell> </fo:table-row>

(28)

<fo:table-row >

<fo:table-cell background-color="pink" border-style="solid" border-width="thin" padding="5pt">

<fo:block border-style="solid" border-width="thin" background-color="gray" >2-1</fo:block>

</fo:table-cell>

<fo:table-cell background-color="pink" border-style="solid" border-width="thin" padding="5mm">

<fo:block border-style="solid" border-width="thin" background-color="gray">2-2</ fo:block>

</fo:table-cell>

<fo:table-cell background-color="pink" border-style="solid" border-width="thin" padding="3em">

<fo:block border-style="solid" border-width="thin" background-color="gray">2-3</ fo:block>

</fo:table-cell>

<fo:table-cell background-color="pink" border-style="solid" border-width="thin" padding="1cm">

<fo:block border-style="solid" border-width="thin" background-color="gray">2-4</ fo:block>

</fo:table-cell>

<fo:table-cell background-color="pink" border-style="solid" border-width="thin"> <fo:block border-style="solid" border-width="thin" background-color="gray">2-5</ fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:table-and-caption> 1 2 3 4 5 1-1 1-2 1-3 1-4 1-5 2-1 2-2 2-3 2-4 2-5

(29)

インラインの FO

文字修飾

イタリック、ボールドなどの文字修飾、あるいは、上付き、下付きなどは、インラインの FO を使って指 定します。また、画像もインライン要素である fo:externat-graphic を使って行中に埋め込むことができま す。 インラインの FO による文字の修飾 <fo:inline font-style="italic"> イタリック </fo:inline> <fo:inline font-weight="bold"> ボールド </fo:inline> <fo:inline baseline-shift="super"> 上付き </fo:inline> <fo:inline baseline-shift="sub"> 下付き </fo:inline> 上の例は、次のように表示されます。 イタリックボールド上付き 下付き

文字の大きさ

fo:inline の font-size プロパティに文字サイズを指定することで文字の大きさを変更することができます。 次の例は、1 文字ごとに font-size の値を 8、10、12、18、24、30、36、42、48 ポイントに設定した例で す。 インライン FO による文字の大きさの設定 <fo:block text-align="center"> <fo:inline font-size="8pt">あ</fo:inline> <fo:inline font-size="10pt">あ</fo:inline> <fo:inline font-size="12pt">あ</fo:inline> <fo:inline font-size="18pt">あ</fo:inline> <fo:inline font-size="24pt">あ</fo:inline> <fo:inline font-size="30pt">あ</fo:inline> <fo:inline font-size="36pt">あ</fo:inline> <fo:inline font-size="42pt">あ</fo:inline> <fo:inline font-size="48pt">あ</fo:inline> </fo:block> あ あ

(30)

ルビの表現

fo:inline-container によるルビの表現 <fo:inline-container text-indent="0mm" last-line-end-indent="0mm" start-indent="0mm" end-indent="0mm"> <fo:block font-size="0.5em" text-align="center" line-height="1.3" space-before="-1.3em" space-before.conditionality="retain" wrap-option="no-wrap"> じざいがん </fo:block> <fo:block text-align="center" line-height="1" wrap-option="no-wrap"> 自在眼 </fo:block> </fo:inline-container> 上の例は、次のように表示されます。 じざいがん 自在眼

(31)

脚注

脚注は、脚注を付けたい文字の後ろに fo:footnote を設定します。fo:footnote-body に脚注の本文を設定しま す。 fo:footnote と fo:footnote-body による脚注の設定 <fo:block text-indent="1em" space-before="0.6em" space-after="0.6em" start-indent="10mm" end-indent="10mm" text-align=" justify"> <fo:inline font-weight="bold">

「Extensible Markup Language」(XSL-FO)仕様 <fo:footnote> <fo:inline baseline-shift=" super" font-size="75%"> (1) </fo:inline> <fo:footnote-body> <fo:block background-color="antiquewhite" start-indent="10mm" end-indent="10mm"> <fo:inline baseline-shift="super" font-size="75%"> (1) </fo:inline> XSL スタイルシートという言葉は、現在、非常に混乱して

います。「Extensible Stylesheet Language」仕様は、当初、 XSLT(変換言語)、XPATH(パス指定方法)と一緒に検討 されていました。ところが、1999 年 4 月に XSLT、XPATH が 独立して別仕様になったこと。Internet Explorer が、独 自仕様の XSL スタイルシートを使って XML を HTML に変換し て表示するようになっているなどが原因です。 </fo:block> </fo:footnote-body> </fo:footnote> は、このような要請に応えることができます。 </fo:inline> </fo:block>

「Extensible Stylesheet Language」(XSL-FO)仕様(1)は、このような要請に応えることができます。

(1)XSL スタイルシートという言葉は、現在、非常に混乱しています。「Extensible Stylesheet

Language」仕様は、当初、XSLT(変換言語)、XPATH(パス指定方法)と一緒に検討されていまし た。ところが、1999 年 4 月に XSLT、XPATH が独立して別仕様になったこと。Internet Explorer が、 独自仕様の XSL スタイルシートを使って XML を HTML に変換して表示するようになっているなど が原因です。

(32)

索引や目次の作成方法

索引や目次の項目に fo:page-number-citation を使ってページ番号を引用したり、リーダをつけることがで きます。

ページ番号を入れたい箇所に fo:page-number-citation を置き、そのプロパティref-id に参照先項目の ID 番 号を付けます。また、本文の中の該当項目には、fo:inline のプロパティとして ID 番号を付けます。

リ ー ダ は fo:leader によって設定します。leader と fo:page-number-citation が配置される fo:block に text-align-lastjustify を設定して置くことでページ番号を行末揃えし間をリーダで埋めることがでできます。 fo:page-number-citation と fo:leader の設定 <fo:block space-before="2em" start-indent="10mm" end-indent="10mm" text-align-last="justify"> 目次・索引に指定する項目 <fo:leader leader-pattern="dots"/> <fo:page-number-citation ref-id="XYZ0211"/> </fo:block> <fo:block space-before="2em" start-indent="10mm" end-indent="10mm"> 本文・・・・・・・・・・・・・・・・・・ </fo:block> <fo:block start-indent="10mm" end-indent="10mm"> ・・・・・・・・・・・・・・・・・・・・ </fo:block> <fo:block start-indent="10mm" end-indent="10mm"> ・・・・ <fo:inline id="XYZ0211"> 目次・索引に指定する項目 </fo:inline>・・・・ </fo:block> <fo:block start-indent="10mm" end-indent="10mm"> ・・・・・・・・・・・・・・・・・・・・ </fo:block> 上の例は、次のようにフォーマットされます。 目次・索引に指定する項目...32 本文・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・目次・索引に指定する項目・・・・ ・・・・・・・・・・・・・・・・・・・・

(33)

付録

XSL 仕様小史

XSL という言葉は、現時点では非常に混乱しています。その理由を理解するには、XSL 仕様の歴史を知 る必要があります。そこで、XSL 仕様の歴史を簡単にまとめてみます。

スタイルシート(XSL)の仕様は、1997 年 8 月に、Microsoft、Inso、Arbortext から W3C に提案されまし た。提案時の仕様案である「A Proposal for XSL」は、現在とはまったく違うものです。

初期の「Extensible Stylesheet Language」ドラフト仕様では、前段が XSL-FO を作成するための変換言語 (XSLT)、後段が XSL-FO の仕様から構成されていました。XSLT 仕様は XSL-FO を作成するための仕様と

して設計されたのです。

と こ ろ が、 1999 年 4 月 に「 Extensible Stylesheet Language」 ド ラ フ ト 仕 様 は、「 XSL Transformations」 (XSLT 仕様)、「Extensible Stylesheet Language」(この解説書で XSL-FO と略記する仕様)の 2 つの仕様に分

離しました。

さらに、XSLT 仕様は、同年 7 月に XSLT 仕様と「XML Path Language」(XPath 仕様)に分離しました。 そして、XSLT、XPath 仕様の方が一足先に、1999 年 11 月に W3C 勧告になりました。

当初から Microsoft は、InternetExplorer で XML を表示する手段として、XSLT/XPath 仕様に積極的に取り 組んでいました。Microsoft は、現在、W3C 勧告版の XSLT/XPath 仕様を実装したプロセサ MSXML3.DLL を同社のホームページから無償で配布しています。これを InternetExplorer と共に使えば、XML を XSLT プ ロセサで HTML+CSS に変換することによって、Web ブラウザで XML を表示する手段として利用すること ができます。さらに、今では、XSLT プロセサは、HTML や XSL-FO の生成に限らず、汎用の XML 変換用 に幅広く使われるようになりはじめています。

しかし、Microsoft は XSL-FO 仕様の方には熱心でないようです。最初の提案社の中で XSL-FO 仕様に取 り組んでいるのは、Arbortext の方と思われます。

参照

関連したドキュメント

The pa- pers [FS] and [FO] investigated the regularity of local minimizers for vecto- rial problems without side conditions and integrands G having nonstandard growth and proved

In this diagram, there are the following objects: myFrame of the Frame class, myVal of the Validator class, factory of the VerifierFactory class, out of the PrintStream class,

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

6-4 LIFEの画面がInternet Exproler(IE)で開かれるが、Edgeで利用したい 6-5 Windows 7でLIFEを利用したい..

[r]

検出電圧が RC フィルタを通して現れます。電流が短絡保護 のトリップレベルを超えた場合、 ローサイドの三相すべて の IGBT はオフ状態になり、フォールト信号出力 V

3 学位の授与に関する事項 4 教育及び研究に関する事項 5 学部学科課程に関する事項 6 学生の入学及び卒業に関する事項 7

6月 7月 8月 10月 11月 5月.