目次

一番下へ     

     


簡易目次
1 導入と概観
    1.1 スタイルシートの処理
    1.2 XSL の利点

1 導入と概観 (Introduction and Overview)

本仕様は拡張可能スタイルシート言語 (XSL) を定義している。XSL はスタイルシートを表現する言語だ。任意の構造化された XML [XML] 文書やデータ・ファイルのクラスが与えられて、デザイナは XSL スタイルシートを使って、それらの構造化された内容のプレゼンテーション方法、つまり、元になる内容が、どのようにスタイル化され、レイアウトされ、ウェブ・ブラウザのウィンドウや携帯デバイスやカタログ、レポート、パンフレット、本などの物理的ページの束などの提示媒体に対してページ送りされるのかに関する自分の狙いを表現する。

1.1 スタイルシートの処理 (Processing a Stylesheet)

XSL スタイルシート・プロセッサは文書、つまり XML データと XSL スタイルシートを受け取り、スタイルシートのデザイナによって意図されたとおりに XML ソース・コンテンツのプレゼンテーションを生成する。このプレゼンテーション・プロセスには二つの側面がある:第一に、 XML ソース・ツリーから結果ツリーを構築すること、第二に、結果ツリーを解析し、ディスプレイ、紙、音声などの他の媒体でのプレゼンテーションに適したフォーマットの結果を生成すること。第一の側面は木変換 (tree transformation) と呼ばれ、第二の側面は フォーマッティング (formatting) と呼ばれる。フォーマッティングの処理は フォーマッタ (formatter) によって行われる。このフォーマッタは、単純な場合にはブラウザ内部のレンダリング・エンジンであることもある。

木変換は結果ツリーの構造をソース・ツリーの構造からまったくかけ離れたものにできる。例えば、元のソース・ツリーにフィルターをかけて選択することによって、目次を追加することができるし、ソース・データを並び替えたテーブル形式に再配置することもできる。結果ツリーの構築において、木変換処理は結果ツリーのフォーマットに必要な情報を追加することにもなる。

フォーマッティングは、結果ツリーにフォーマッティング・セマンティクスを読み込むことで可能となる。フォーマッティング・セマンティクスはフォーマッティング・オブジェクト (formatting object) のクラスのカタログの用語で表現される。結果ツリーのノードがフォーマッティング・オブジェクトである。フォーマッティング・オブジェクトのクラスは、ページ、段落、テーブルなどの組版上の抽象概念を示している。これらの抽象概念のプレゼンテーションに渡るファインダーの制御は、フォーマッティング・プロパティで与えられる。すなわち、インデント制御、単語間、文字間スペース、ウィンドウ制御、段落分割制御、ハイフン付け制御などのことである。XSL では、フォーマッティング・オブジェクトフォーマッティング・プロパティのクラスがプレゼンテーションの狙いを表現するためのボキャブラリを提供する。

XSL 処理モデルは概念的なものだけが意図されている。実装に対して、これらを分割されたプロセッサで提供するように強制することはしない。更に、実装は、この概念的な XSL 処理モデルで処理したのと同じ結果を生成する限り、ソース文書の処理方法についても自由である。この概念的モデルの詳細を描写する図は次のようになる。

The XSL two processes: transformation and formatting   [説明]

二つの XSL プロセッサ: 変換とフォーマッティング

1.1.1 木変換 (Tree Transformations)

木変換は結果ツリーを構築する。 XSL では、このツリーは、主として「フォーマッティング・オブジェクト」名前空間におけるオブジェクトを持つ。このツリーでは、フォーマッティング・オブジェクトは XML 要素として表現され、 XML 属性-値の組の集合によって表現されるプロパティを持つ。フォーマッティング・オブジェクトの内容は、 XML の内容である。木変換は XSLT 勧告 [XSLT] で定義されている。この概念的処理の詳細を描写する図は次のようになる。

The XSL Transformation process   [説明]

他のボキャブラリへの変換

XSL スタイルシートは木変換にて利用される。スタイルシートは木変換規則の集合を含む。木変換規則は二つの部分を持つ:ソース・ツリーの要素にマッチするパターンと、結果ツリーの一部を構成するテンプレートである。これによって、スタイルシートは類似したソースツリー構造を持つ幅広いクラスの文書に対して適用可能になる。

XSL/XSLT の実装のあるものでは、結果ツリーの構造を XML 文書として出力するものもある。これによって、フォーマッティング・オブジェクトとフォーマッティング・プロパティを含む XML 文書が出力可能となる。この能力は XSL プロセッサに必要なわけではなく、推奨もされない。しかしながら、既知のクライアントの入力を準備するサーバのように、これが重要となることもある;例えば、 WAP (http://www.wapforum.org/faqs/index.htm) サーバが WAP を使える携帯デバイスによる特殊な入力に対して準備する方法がある。アクセッシビリティを保つため、ウェッブ・システムのデザイナは、クライアントがフォーマッティング・オブジェクトとプロパティを受け取ることができることを送信側が知らないか、 或いは送信された文書がフォーマッティング・オブジェクトとプロパティをもつ文書の構成において使われるソース文書への参照を含まないかのどちらかの場合、フォーマット化のオブジェクト及び特性を含む文書の送信を要求(又は使用)する体系を開発しないほうがよい。

1.1.2 フォーマッティング (Formatting)

フォーマッティングは、"fo" 名前空間の XML 要素と属性が構成されるスタイルシートのデザイナによって意図されたプレゼンテーションを生成することで、そのフォーマッティング・オブジェクト・ツリーにおける結果ツリーを解釈する。

XSL によってサポートされる、フォーマッティングオブジェクトのボキャブラリ - fo: 要素タイプの集合 - は、デザイナによって利用可能な組版概念の集合として表現される。セマンティクス上は、フォーマッティング・オブジェクトは、ページ送り、レイアウト、スタイル付け情報の一部の仕様として表現され、結果ツリー全体をフォーマット化した結果としてのフォーマッティング・オブジェクトの内容に対して適用されることになる。フォーマッティング・オブジェクトの各々のクラスは特定の種類のフォーマット化の振る舞いを表現する。例えば、ブロック・フォーマッティング・オブジェクトのクラスは、段落の内容を行に区切ることを表現する。他の仕様の部分は他のフォーマッティング・オブジェクトから由来することがある;例えば、段落(ブロック・フォーマッティング・オブジェクト)のフォーマット化は、ブロック・フォーマッティング・オブジェクトのプロパティの仕様と、フォーマッタがブロックを配置するレイアウト構造の仕様の両方に依存している。

フォーマッティング・オブジェクトの実例と関係付けられたプロパティはオブジェクトのフォーマット化を制御する。プロパティの中には、例えば "color" のように、フォーマットされた結果を直接指定するものがある。他のプロパティでは、例えば 'space-before' のように、特定のフォーマット化された結果を指定せずに、可能なフォーマット化された結果の集合を制限するに過ぎない。フォーマッタは、美学的見地などの、他の可能な検討項目の中で選択肢を作ることが許されている。

フォーマット化は領域ツリー (area tree) と呼ばれる地理的な領域のツリーの生成によって構成されている。地理的領域はひとつ以上のページの連なり(ブラウザが典型的に使うのは単一のページだ)に配置される。各々の地理的領域はページ上にその場所と、その領域で何を表示するものの仕様を持ち、背景、パッディング、ボーダーを持つこともある。例えば、単一の文字のフォーマット化は、その文字を表現するのに使われるグリフに比べてきわめて十分な領域を生成し、そのグリフはこの領域内に表示されるものである。これらの領域は入れ子状になっている(ネストされている)。例えば、グリフは行内かつ、ブロック内かつ、ページ内に配置されるかも知れない。

描画は、(ページや領域の集合による)プレゼンテーションの抽象モデルである領域ツリーを確保し、プレゼンテーションが、コンピュータディスプレイのブラウザ・ウィンドウや紙などの関連するメディアに表示されるようにする。本仕様では、レンダリングのセマンティクスに関する詳細な記述はおこなわない。

フォーマッティングの最初のステップは、XSLT 変換によって得られる、要素と属性のツリー構造の「オブジェクト化」(objectify) である。ツリーのオブジェクト化は、基本的には、ツリー内の要素をフォーマッティング・オブジェクトのノードに変えることと、属性をプロパティ指定に変えることとから構成される。このステップの結果が、フォーマッティング・オブジェクト・ツリー (formatting object tree) になる。

Objectification of the FO tree   [説明]

XSL Formatting Object Tree の構築

オブジェクト化の第一のステップに、結果ツリー内の文字を fo:hcaracter ノードに置換することがある。空白類文字だけからなり、対応するフォーマット化オブジェクトが fo:character ノードを子どもとして許容しない要素の子どもである、テキスト・ノード内の文字は無視される。対応するフォーマット化オブジェクトが fo:character ノードを子どもとして許容しない要素内の、他の文字はエラーである。

fo:instream-foreign-object の内容はオブジェクト化されていない;その代わり、fo:instream-foreign-object 要素を表現するオブジェクトが要素及び属性ツリーの適切なノードを指し示す。同様に、fo:decolations 要素のあらゆる非 XSL 名前空間の子要素はオブジェクト化されない;その代わり、fo:decolations 要素をあらわすオブジェクトが要素及び属性ツリーの適切なノードを指し示す。

フォーマット化の第二のステップは、フォーマッティング・オブジェクト・ツリーを洗練化して、 洗練フォーマッティング・オブジェクト・ツリー (refine formatting object tree) を生成することである。洗練化のプロセスは、プロパティから特色へのマッピングを扱うことである。これを構成するのは、 (1) 個々のプロパティへ略記拡張、(2) 対応するプロパティへのマッピング、(3) 計算値の決定(式計算を含んでも良い)、(4) white-space-treatment と linefeed-treatment プロパティ効果の取り扱い、(5) 継承である。洗練化の詳細は [5 プロパティ洗練化/解決 (Property Refinement / Resolution)] で見つかる。

洗練化のステップは以下の図で描写される。

Refinement of the FO tree   [説明]

フォーマッティング・オブジェクト・ツリーの洗練化

フォーマット化の第三のステップは、領域ツリーの構築である。領域ツリーは各々のフォーマッティング・オブジェクトのセマンティクスで記述されるとおりに生成される。個々のフォーマッティング・オブジェクト・クラスに適用可能な特色は、領域の生成方法を制御する。すべてのフォーマッティング・プロパティが全てのフォーマッティング・オブジェクトで指定されることもあるが、個々のフォーマッティング・オブジェクト・クラスに対しては、フォーマッティング・プロパティのサブセットだけが、そのクラスのオブジェクトの特色を決定するのに使われる。

領域の生成は以下の図で描写される。

Area tree generation   [説明]

領域ツリーの生成

FO-to-area process summary   [説明]

プロセスの要旨

1.2 XS の利点 (Benefits of XSL)

HTML の場合とは異なり、 XML の要素名は組み込みの表示セマンティクスを持たない。スタイルシート抜きでは、プロセッサは XML 文書の内容を無差別的な文字の連なりとして以外に描画する方法を知ることができない。XSL は XML シンタックスを用いたスタイルシートを書くための包括的なモデルとボキャブラリを提供する。

この文書は XSL プロセッサの実装者のために意図されたものである。 XSL スタイルシートの記述者の参照マニュアルとして使うことができるが、本来はチュートリアルではない。

XSL は Cascading Style Sheets [CSS2] と Document Style Semantics and Specification Language [DSSSL] の先行する作業の上に構築されている。たくさんの XSL のフォーマッティング・オブジェクトとプロパティがプロパティの共通の集合に対応する一方で、それ自身では XSL の全ての目的を達成するのに十分ではない。特に、 XSL はページ送りとレイアウトのモデルを導入し、そのモデルは現在利用可能なものを拡張して、本仕様で記述される単純なページ・モデルを超えたページ構造へと、直接的な方法で、拡張されることができる。

1.2.1 ページ送りとスクロール (Paging and Scrolling)

スクロール可能な文書ウィンドウとヘ゜ーシ゛分割の両方をすることは、XML の内容のスタイル化(及びページ分割)に対して、新たな複雑性を導きいれる。ページ分割は内容の任意の境界(ページやその区画)を導入するので、ページ、区画、ブロックの境界の制御といった概念が極めて重要となる。また、行間の調整(ページ内の垂直方向の調整)や単語間、文字間(テキストの行方向の調整)に関連する概念も存在する。これらは、今日のブラウザで見られるような、単純なスクロール可能な文書ウィンドウにおいては、必ずしも惹起しない。しかしながら、本文、ヘッダ、フッタ、左右のサイドバーのような複数の区画を持つページと、「フレーム」を使ったウェブ・プレゼンテーションとは対応する。内容を区画に分散することは、いずれの場合でも基本的には同じことであり、XSL は同様の方法にて両方の場合を取り扱う。

XSL は、ウェブの閲覧のための等価な「フレーム」ベースの構造を与えるだけでなく、文書がページ分割されるときに必要とされる機能に渡る制御を、デザイナに与えるために開発された。この制御を達成するために、XSL はフォーマッティング・オブジェクトとフォーマッティング・プロパティの集合を拡張してきた。更に、スタイル化され得る XML ソース・コンポーネント(要素、属性、テキスト・ノード、コメント、処理命令)の選択は、 XSLT と XPath [XPath] に基づき、ユーザに極めて強力な選択メカニズムを提供する。

フォーマッティングのオブジェクトとプロパティの拡張の設計は、最初は DSSSL に触発された。しかし、実際の拡張は必ずしも、それらが基にした DSSSL 構造のように行われたのではない。CSS2 仕様により近づけて適合するか、 DSSL でのものよりも単純な場合を扱うかのいずれかの場合で、いくつかの拡張は DSSSL からは離れてしまった。

拡張が行われた方法はいくつかある。いくつかの場合には、記述モードで、左右と右左だけでなく、上下と下上といった種類の反映を追加する場合のように、新しい値を追加することで十分なこともあった。

他の場合には、 CSS2 で表現される一つのプロパティが複数の値を同時に持つような共通プロパティは、そのプロパティの独立した面に対して、独立した制御を提供するために、いくつかの新しいプロパティに分離される。例えば、"white-space" プロパティは、四つのプロパティに分離された: "white-space-treatment" プロパティは空白文字の取り扱い方法を制御し、"linefeed-treatment" プロパティは改行処理の方法を制御し、"white-space-collapse" プロパティは複数の連続するスペースを縮退する方法を制御し、"wrap-option" プロパティは行がカラムの端のような境界に遭遇したときに自動的に折り返されるかどうかを制御する。一つのプロパティを二つ以上の(副)プロパティに分離する効果は、等価な既存の CSS2 プロパティを、それが含む副プロパティの集合に対する「簡略記述」とすることである。

さらに他の場合には、新しいプロパティを作ることが必要だった。例えば、ハイフン付けを行う方法を制御するたくさんの新しいプロパティが存在する。これらは(スクリプトごとに変化する)"hyphenation-character" のようなプロパティだけでなく、テキストが属するスクリプトと国を識別することを含んでいる。

フォーマッティング・オブジェクトのいくつかと、多くの XSL プロパティは、 CSS2 仕様に由来し、これら二つの間で互換性を確保している。

XSL プロパティには、次のような識別可能な四つのクラスが存在する:

  1. コピーされた CSS プロパティ(CSS2 セマンティクスから変更なし)

  2. 拡張された値を持つ CSS プロパティ

  3. 分割且つ/又は拡張された CSS プロパティ

  4. XSL 独自プロパティ

1.2.2 セレクタ及びツリー構造 (Selectors and Tree Construction)

先に触れたとおり、 XSL はツリー構造とパターン選択のために XSLT と XPath を利用し、名前空間が混在する場合であっても、ソース内容の部分がどのように表示されるかと、どのプロパティがそれらの内容部分に関連付けられるかとに対する、高度な制御を提供する。

例えば、XPathのパターンは、文字列の1部分や、段落の N 番目のテキストノードを選択できるようにする。例えば、これによってユーザは、処理ステップの全ての三番目の段落を太字にするような規則を作ることができる。加えて、含まれる要素の属性や内容部分の数値に基づき、プロパティを内容部分に関連付けることもできる。これによって、負の数を赤で示し、正の数を黒で示すようにスタイル規則を作ることがきる。また、テキストを、ソースツリーの特定の内容に依存して生成するようにできて、ソースツリーの一部分を、異なるスタイルで複数回表示することもできる。

1.2.3 拡張ページ レイアウト モデル (An Extended Page Layout Model)

XSL には、フォーマッティングオブジェクトの集合が存在し、ページや「フレーム」のレイアウト構造(本文の大きさがどれくらいか;複数カラム(列)か;ヘッダ、フッタ、サイドバーはあるのか;それらの大きさはどれぐらいか)と、XML ソース内容をそれらの「コンテナ」に配置する規則の両方を記述できる。

レイアウト構造は、一つ以上の "simple-page-master" フォーマッティングオブジェクトのインスタンス(実体)によって定義される。このフォーマッティングオブジェクトによって、ページ内の(複数カラムを持つ)本文、ヘッダ、フッタ、サイドバーに対して、独立に埋められる領域を定義することができる。これらの simple-page-master は、ページ・シーケンスで使われ、そこでは、色々な simple-page-master が使われる順番を指定する。ページシーケンスは、それらのページを、どのようにスタイル化された内容で埋めるかということも指定する。このモデルは、ページ・インスタンスが自動的に生成される本の章に対する simple-page-masters のシーケンスの指定や、雑誌のレイアウトで使われるような、明示的なページシーケンスを指定することを可能にする。スタイル付けされた内容は、領域の名前と結果ツリーのスタイル付けされた内容に付けられた名前を関連付けることで、ページ内の様々な領域に割り付けられる。

これらのレイアウトフォーマッティングモデルとプロパティに加えて、ページ分割された文書によく見られるフォーマットに対する制御レベルを提供するように設計された、プロパティが存在する。これは、ハイフン付けの制御、同一の行、カラム、同じページ内の他のテキストと一緒にしておくテキストに対する拡張された制御を含む。

1.2.4 包括的な領域モデル (A Comprehensive Area Model)

プロパティとフォーマッティング・オブジェクト、特に、ブロック領域、行領域、ページ領域、行内のスペースに対する制御に対する領域については、CSS2のボックス・フォーマッティング・モデルの拡張を必要とした。この拡張モデルは、本文書の [4 Area Model] で説明されている。CSS2のボックス・モデルは、このモデルのサブセットになる。CSS2ボックス・モデルの用語と XSL アリア・モデルの用語との対応付けは、 [7.2 XSL Areas and the CSS Box Model] を参照されたい。エリア・モデルは、文字/単語/行/ブロック間の関係とスペース調整を表現する語彙を提供する。

1.2.5 国際化と記述モード (Internationalization and Writing-Modes)

いろいろな言語が存在する。特に、極東では、単語の処理方向が、上から下に読み、横書きの場合は、右から左に処理する場合(最も一般的)と、左から右に処理する場合がある。いろいろな方向が使われることがある。固定された絶対的な参照の枠組み(上、下、左、右)に関する用語を表現するプロパティだけでは、それらの言語のテキスト記法を十分に表現するのに十分ではない。

このため、XSL (そして従来の DSSSL)では、フォーマッティング・オブジェクやプロパティ記述を参照する相対的な枠組みを使う。参照の CSS2 の枠組みだけの場合は、四つの方向(上下左右)を持ち、XSL の場合も、相対的枠組みの場合も四つの方向(上下左右)を持つが、「記述モード」(writing-mode) の相対性が存在する。"writing-mode" プロパティは、フォーマッタが、スクリーンやページ上に、グリフ/単語/行/ブロックなどを正確に配置するために必要な方向を制御するための方法だ。"writing-mode" は、以上で述べたような基本的な方向を表現する。テキストの記述方向には、"left-to-right - top-to-bottom" (lr-tb)、"right-to-left - top-to-bottom" (rl-tb)、"top-to-bottom - right-to-left" (tb-rl) などが存在する。"writing-mode" プロパティについては、[7.27.7 "writing-mode"] を参照されたい。典型的な場合は、writing-mode の値は、二つの方向を指定する:最初のものは、行処理方向 (inline-progression-direction) で、単語が配置される方向を決定し、二つ目のものは、ブロック処理方向 (block-progression-direction) で、ブロックや行が先行するものに対して配置される方向を決定する。 更に、文字の連続に対する inline-progression-direction は、それらの文字の UNICODE Character Database [UNICODE Character Database] や Unicode bidirectional (BIDI) アルゴリズム [UNICODE UAX #9] から、それらの文字に対する双方向文字種を使って、暗黙的に決定しているかもしれない。

プロパティ "writing-mode" の値の名前で明示されている方向に加えて、writing-mode は、shift-direction などのフォーマッタ(下/上付き添え字で使われる)によって要求される別の方向をも定義する。

1.2.6 リンク (Linking)

HTML と異なり、 XML では組み込みのセマンティクス(意味論)を持たないので、ハイパーテキスト・リンクの組み込みの表記方法は存在しない。この文脈では、「リンク」とは、http://www.w3.org/TR/xlink/#intro で定義されている「リンク」のみならず、 http://www.w3.org/TR/html401/struct/links.html#h-12.1 で定義されている「ハイパーテキスト・リンク」をも意味している。ここでは、「リンクは、二つ以上のリソース/リソースの部分の関係であり、XLink の link 要素で明示的にされるもの」とされている。つまり、XSL は、リンク参照やリンクに後続するセマンティクス(意味論)をフォーマッティングする、双方向セマンティクスで表現される FO (Formatting Object) を持つ。

XSL は、訪問済みのリンクターゲットの表示方法の、変更メカニズムを若干ながら提供する。これらのメカニズムのうちの一つは次のようなものである; another allows for control over the placement of the link target in the viewing area; still another permits some degree of control over the way the link target is displayed in relationship to the originating link anchor.

XSL also provides a general mechanism for changing the way elements are formatted depending on their active state. This is particularly useful in relation to links, to indicate whether a given link reference has already been visited, or to apply a given style depending on whether the mouse, for instance, is hovering over the link reference or not.


    

目次

一番上へ          

     



この邦訳は、私 SUGAI, Manabu が私的な勉強のために作成したものです。訳文の正確さは保証できません。特に技術的な利用においては、 W3C の原典を参照してください。

last modified: 22nd/Jan./2003; Translated by SUGAI, Manabu.

SEO [PR] !uO z[y[WJ Cu