W3C勧告XSLの「Introduction to Formatting / フォーマット概論」とは
Extensible Stylesheet Language (XSL) Version 1.1 / W3C Recommendation 05 December 2006の目次に沿った日本語訳です。
当サイト管理人が2008年09月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。
<< 【XSL 1.1】 2. XSLT / XSL Transformation
3 フォーマット概論 3.1 プロシージャ(一連の処理手順)の概念 |
フォーマットとは、視聴者にとって効果的なXSLTによる効果を返す経過を表すものです。
ここでいうフォーマットするモデルは、領域ツリーを構築する事であり、領域ツリーというのはスペース制約と他のレンダリング情報を包含した情報と共に文書中の象形文字や形や画像の幾何学的な配置情報を含むように指示されたツリーです。
この情報は特徴の見出しを参照し、属性がオブジェクト型であり、XML要素にある属性である領域の為のものです。
「4 領域モデル」はスタックされた領域上の領域ツリーと既定の配置制約を表現したものです。
オブジェクト型とはオブジェクト型ツリーの中にある要素を指し、名称はXSL名前空間にあるものとし、その要素名によってあるオブジェクト型がオブジェクト型のクラスに属するという事を識別する事ができます。
それぞれのオブジェクト型のフォーマットの作用は、そのクラスのオブジェクト型によって生成される領域である事とどのようにその領域の特色が確立するか、更には、どのようにその領域が他のオブジェクト型が生成した領域を尊重しながら階層的に構築されるのかを表現したものです。
「6 オブジェクト書式」、「7 プロパティ・属性の書式設定」参照。
オブジェクト型にはブロックレベルとインラインレベルがあり、それらが生成した領域のタイプを参照して既定の配置メソッドへの参照を返します。
インライン領域は、例えば複数行中に象形文字とか文字がある場合、それは[ inline-progression-direction ]にスタックされます。
行自体は、ブロック領域であり、[ inline-progression-direction ]の中で垂直方向にスタックされ、これ全体は[ block-progression-direction ]と呼ばれます。
西洋文字書式では、[ block-progression-direction ]で言えば、「上から下に」向かって記述され、[ inline-progression-direction ]で言えば、「左から右に」記述されます。
この仕様上では、他の記述方式と同じように、[vertical](垂直)と[horizontal](水平)のような絶対値表示ではなく、[block]と[inline]を採用しています。
同じようにこの仕様は、追加や方向の絶対値仕様である[top][bottom][left][right]への置換にも適用していて[ block-progression-direction ]に[before][after]、[ inline-progression-direction ]に[start][end]といった方向に関する仕様を考えています。
これらは[ writing-mode ]プロパティの値として解釈されます。
このフォーマットのモデルの重要な部分は洗練させる事であり、洗練とは、仕上がった属性仕様がXML結果ツリーの基となる端末の処理経過です。
XML結果ツリーとオブジェクト型ツリーはとてもよく似ていて、この点は、概念上の実体と区別して考えるのに非常に役立ちます。
洗練の要件は
|
これらのうち、特に数値を求める表現は、領域ツリーの情報に依存します。
このサブセクションではどのようにフォーマットが行われるかの概念の説明をします。
この処理手順の概念には指示命令はなく、いくつかの固有のアルゴリズムや結果が出るまでの間のデータ構築は暗黙の制約に従います。
オブジェクト化処理をするにあたってその手順で行われ、互いのオブジェクトは他のオブジェクト処理中に処理を開始するかもしれませんが、オブジェクトが階層構築されている間は処理できず、その際にはオブジェクトを受け取った処理はco-routine※のように働き、他の処理を飛ばすかもしれませんが、現在進行形の処理が終了した後で改めて飛ばした処理を行います。
※co-routine:プログラム処理の一種で仮に1つの処理の途中で中断して次の処理を行った場合でも、その処理の終了後に再度、中断した処理の処理途中に戻り、そこから処理を始める並列・並行処理
この手続きは[ fo:root ]オブジェクトから階層に沿って開始されます。
一方、処理されたオブジェクト型は領域を生成し、領域ツリー中におかれた親(オブジェクト)に戻ります。
co-routineのように指示が与えられた時、その処理を開始し、その親(オブジェクト)が持つ子(オブジェクト)があれば、子が、またサブセットがあれば、サブセットを処理し続け、その親(オブジェクト)の階層下の処理が終わると親(オブジェクト)の階層に戻ります。
この時、オブジェクト型は、領域ツリーに既に存在する領域を持つオブジェクトまたは先祖のオブジェクト(によって生成された領域を含めた)特性に基づいたパラメータを子要素に渡します。
>> 【XSL 1.1】 4. 領域モデル / Area Model