前へ

目次

ボトムへ     

次へ     


3. フォーマット化への導入

3.では,領域モデル,フォーマット化オブジェクト記述及び特性を読み,洗練の処理を理解するために十分な,フォーマット化の一般的な処理を示すことを目標とする。

フォーマット化は,XSL変換の結果を読者又は聴衆のために知覚可能な形式に変える処理とする。この処理は,幾つかの段階を含み,ある段階は,逐次的でない方法で他の段階に依存する。 ここでのフォーマット化のモデルは,領域木の構築とする。この領域木は,順序付けされた木であって,スペーシング制約及び他のレンダリング情報を具体化する情報とともに,文書中のすべてのグリフ,形状及び画像の配置に関する幾何的情報を含む。この情報は,特色の項目のもとで参照される。ここで,特色とは,フォーマット化オブジェクトに対する特性,XML要素に対する属性などのように,領域に対するものとする。 [4 領域モデル]は,領域木を記述し,スタックされた領域(積み重ねられた領域)上のデフォルトの配置制約を定義する。しかし,このモデルは,結果として生じる知覚可能な形式が暗に示される制約に従う限り,抽象モデルであって,フォーマッタにおいてはこの方法で実際に実装される必要はない。制約は,そのすべてを満たすことができない場合,その点で競合するかもしれない。その場合には,どの制約を緩和し,どの順で他の制約を満たすのがよいかは,実装定義とする。

フォーマット化オブジェクトは,フォーマット化オブジェクト木の要素であって,その名前はXSL名前空間に基づく。フォーマット化オブジェクトは,その要素名が識別するフォーマット化オブジェクトのクラスに属する。フォーマット化オブジェクトの各クラスのフォーマット化の振る舞いは,そのクラスのフォーマット化オブジェクトがどの領域を生成するか,領域の特色がどのように設定されるか,及び他のフォーマット化オブジェクトが生成する領域に関連して,領域がどのように階層的に構造化されるかによって,記述される。 [6 フォーマット化オブジェクト]及び[7 フォーマット化特性]は,フォーマット化オブジェクト及びその特性を記述する。

フォーマット化オブジェクトには,ブロックレベルのものもあれば,行内レベルのものもある。これは,それらフォーマット化オブジェクトが生成する領域の型を参照しており,それらの型は,そのデフォルト配置手法を参照している。 (グリフ領域などの)行内領域は,行の中に集められ,それらをスタックする方向は行内進行方向とする。行は,一種のブロック領域であって,行内進行方向に垂直な方向にスタックされる。この方向をブロック進行方向と呼ぶ。これらの領域の型及び方向に関する詳細な記述は,[4 領域モデル]を参照すること。

西欧の表記システムでは,ブロック進行方向は"下向き"であって,行内進行方向は"右向き"になっている。この規定は,他の表記システムも扱い,"上下"及び"左右"といった絶対指示子を用いる代わりに,"ブロック"及び"行内"という用語を導入する。同様に,この規定は,"上","下","左",及び"右"といった絶対指定方向に追加又は代わりとして,適切なところで相対指定方向(ブロック進行方向における"前"及び"後",行内進行方向における"開始"及び"終了"など)を与えようとしている。これらは,表記モード特性の値に応じて解釈される。

フォーマット化のこのモデルの中心となるものは,洗練とする。これは計算処理であって,XML結果木の属性値に基づく特性の指定を最終化する。XML結果木及びフォーマット化オブジェクト木は,極めて類似した構造をもつが,それらを別の概念実体として考えるのが有効である。洗練は,次を含む。

これらの操作の幾つか(特に式を評価する操作)は,領域木の知識に依存する。したがって,洗練は必ずしも直接的で順次処理的な手続きではないが,フォーマッタの他の処理を伴う先読み,後戻り又は制御継ぎを含んでよい。洗練は,[5 特性の洗練及び解決]においてさらに詳しく記述される。

要約すると,フォーマット化は,(要素ノード及びその属性を含む)XML結果木に含まれる情報に基づいた制約を満たす(領域及びその特色を含む)領域木を構築することによって進行する。概念上は,(フォーマット化オブジェクト及びその特性を含む)フォーマット化オブジェクト木及び洗練を構成する中間段階が存在する。 これらの段階は,領域木の構築の間に,インタリーブした方式で進行してよい。

3.1 概念的手続き

3.1は,フォーマット化がどのように動作可能かの概念的記述を含む。この概念上の手続きは,結果が暗黙の制約に従う限り,どんな特定アルゴリズム又はデータ構造も要求しない。

手続きは,フォーマット化オブジェクトを処理することによって動作する。処理されている間,各オブジェクトは,他のオブジェクトでの処理を開始してよい。オブジェクトは階層的に構造化されるが,処理はそうではない。与えられたオブジェクトの処理は,どちらかというと,制御を他のプロセスに渡してよいが,制御を渡した箇所で,後に再びその制御を取り上げてもよいコルーチンに類似している。手続きは,fo:rootフォーマット化オブジェクトの処理を始めることによって開始する。

特に指定がなければ,フォーマット化オブジェクトを処理することは,領域を生成し,その領域を領域木の中に配置するためにその親に返却する。コルーチンと同様に,それは,後で制御を回復し,(存在する場合には)それ自体の子ども又はそれら子どもの部分集合のフォーマット化を始める。 フォーマット化オブジェクトは,領域木に既にある領域の特色に基づいて,パラメタをその子どもに提供する。この領域木は,フォーマット化オブジェクト又はその先祖が生成する領域を含む可能性がある。 次にフォーマット化オブジェクトは,そのフォーマット化オブジェクトの子どもが返却する領域を処理する。それは,このような領域をその親に対して単に返却するかもしれないし(それ自体が領域を生成しない場合には,常にこれを行う。),そうする代わりに,フォーマット化オブジェクトのセマンティクスに従って領域木の中の領域を整えるかもしれない。これは,その幾何的位置の変更を引き起こしてもよい。フォーマット化オブジェクトが処理を終了するのは,そのすべての子どもが(開始していた場合には)処理を終了したときとし,領域を生成して終了する

フォーマット化オブジェクトの中には,それ自体で領域を生成しないものもある。代わりに,これらのフォーマット化オブジェクトは,それらの子どもが返却した領域を単に返却する。その一方で,フォーマット化オブジェクトは,それ自体の子どもをフォーマット化している間に見つけられた情報に基づいて,領域を生成(及び返却)し続けてよい。 例えば,fo:page-sequenceフォーマット化オブジェクトは,それが未処理の子孫をもつフローを含む限り,ページの生成を続ける。

fo:rootフォーマット化オブジェクトに対して返却される領域は,ページ表示領域であって,領域木ルートの子どもとして,幾何的な暗黙(の配置)を伴うことなく,それらが返却される順序で単に配置される。

一般的な規則として,領域木の順序は,フォーマット化オブジェクトの順序に対応する。すなわち,一つのフォーマット化オブジェクトが,フォーマット化オブジェクト木の深さ優先たどりにおいて,もう一つのフォーマット化オブジェクトに優先し,どちらもその他のフォーマット化オブジェクトを含まない場合,特に指定がなければ,領域木の深さ優先たどりにおいて,第1優先によって生成される領域のすべては,第2優先によって生成される領域のすべてに優先する。 この規則の典型的な例外には,側浮動体,前浮動体及び脚注に類似するものが考えられる。

手続きの最後においては,領域及びその特色は構成済みであって,それらは,関連フォーマット化オブジェクトの定義と領域モデルの節とにおいて記述された制約を満たすことが要求される。特に,領域のサイズ及び位置は,フォーマット化オブジェクトの定義が別に指示しない場合は,領域モデルにおいて記述された配置及びスペーシングの制約に従う。

フォーマット化オブジェクトの定義,特性記述及び領域モデルは,アルゴリズムではない。したがって,フォーマット化オブジェクトのセマンティクスは,文字をあつめて語にする際,語を行内に配置する際,コンテナ内に行を移す際などに,行区切りアルゴリズムがどのように動作しなければならないかを指定しない。むしろこの規定は,フォーマッタがこれらの実行を完了したことを想定して,その結果が満たすことになる制約を記述する。


       

前へ

目次

トップへ          

次へ