気の向くままに辿るIT/ICT/IoT
XSL

【Area Model / 領域モデル・エリアモデル】XSL 1.1 XSL Extensible Stylesheet Language Version1.1

ホーム前へ次へ
XSL領域モデルとは?

【Area Model / 領域モデル・エリアモデル】XSL 1.1 XSL Extensible Stylesheet Language Version1.1

XSL領域モデルとは

 W3C勧告XSLの「4 Area Model / 領域モデル・エリアモデル」とは

 Extensible Stylesheet Language (XSL) Version 1.1 / W3C Recommendation 05 December 2006の目次に沿った日本語訳です。

 当サイト管理人が2008年09月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。

<< 【XSL 1.1】 3. フォーマット仕様 / Introduction to Formatting

XSL領域モデル目次


4 領域モデル

 4.1 概論

 4.2 矩形領域
  4.2.1 領域タイプ
  4.2.2 共通の特徴
  4.2.3 幾何学の原理による定義
  4.2.4 ツリー構築指示命令 Tree Ordering
  4.2.5 スタック制約
  ※スタック:最後に入れたデータを最初に取り出せるようにしたデータ構造
  4.2.6 フォント基準テーブル Font Baseline Tables

 4.3 空間と文法条件
  4.3.1 空間解決ルール
  4.3.2 制約を超える空間仕様 Overconstrained space-specifiers

 4.4 ブロック領域
  4.4.1 スタックブロック領域
  4.4.2 割り込み調整

 4.5 行領域

 4.6 インライン領域
  4.6.1 スタックインライン領域
  4.6.2 絵文字・象形文字(日本語・アラビア語・中国語・韓国語含む)領域

 4.7 指定制約 Ordering Constraints
  4.7.1 一般的な指定制約
  4.7.2 行構造
  4.7.3 インライン構造

 4.8 保持と解除

 4.9 レンダリングモデル
  4.9.1 幾何学
  4.9.2 「Viewport」 幾何学
  4.9.3 視覚化
  4.9.4 [ Border ], [ Padding ], [ Background ]
  4.9.5 固有の特色
  4.9.6 階層と固有の特色の不一致

 4.10 領域木(ツリー構造)サンプル


4 領域モデル
 4.1 概論

【4 領域モデル】

 XSLではオブジェクト型ツリーの生成は(おそらくブラウザに搭載される事になる)型生成処理機に入力や仕様を提供します。

 型生成処理機は、初期化された全体構成としての領域範囲の階層を生成します。

 このセクションでは、これら領域のモデルと各領域が相互にどのように作用するかについて全体的な定義をします。

 その目的はオブジェクト型を意味づける表記を使って絶対的なフレームワーク(枠組み)を提供する事であり、固有のアルゴリズムを規定するものとしてではなく、この方法に順応する一連の制約を表現するものと受け止めるべきものです。

【4.1 概論】

 型生成処理機は、指示ツリーである領域ツリーを生成し、中間出力の幾何学的な構築を記述します。

 このツリーはルートノードであり、その目的は、該当するオブジェクトの子、きょうだい、親、子孫、先祖のオブジェクトがこのツリーを参照する事です。

 ルート以外の互いの領域ツリーノードは領域によって呼び出され、中間出力の一部である矩形と結び付けられます。

 領域はオブジェクト型ではなく、というより、オブジェクト型はゼロまたは1つ以上の矩形領域を生成し、通常、それぞれの領域はオブジェクト型ツリーにある一意のオブジェクトによって生成されます。

※このルールの唯一の例外としては、たとえば、合成された単独の象形文字・絵文字(日本語や中国語・韓国語などの多バイト文字を含む)などが生成される手順の中にある(合成された一部である)いくつかの文字などオブジェクト型ツリーのいくつかの葉ノードが単独の領域に生成され結合された時です。

 このようなケースにおいては、[ font-family ]と[ font-size ]のような関連する属性は生成されるオブジェクト型全てにおいて同一でなければいけません。

 つまり、異なる属性を持った複数の文字を合成する事はできないという事です。

 領域は、矩形を持ち、子領域は、その内部に配置され、オプションとして[ padding ]と[ border ]プロパティを持っています。

 それぞれの領域は、特性を持っていて、値に名前をつけ、名前でマッピングする事により、要素は、プロパティを持つ属性とオブジェクト型を利用する事ができるようになります。

 単独の特性は、領域エリアのレンダリングを定義、または、フォーマット化の結果に対する制約を定義し、その一方もしくはその両方の用途として利用されます。

 フォーマット目的や制約定義の為の厳密な特性は、[formatting traits]「フォーマット化特性」(「特性書式」・「特色型」)と呼ばれ、レンダリング特性の為に利用される特性は、「レンダリング特性」と呼ばれる事もあります。

 同一のプロパティから値がコピーされる特性、そのまま適用される特性や一致する名前のリストについては「B Property Summary」、「5 属性・プロパティの改善と解決」を参照。

※特性は、FOs(フォーマットオブジェクト)の洗練の過程でも結び付けられ、いくつかの特性は、他のオブジェクトがまだ洗練されていない間でもフォーマット中に結び付けられます。

 領域が生成されたオブジェクト型のそれぞれのタイプは、この領域内にこのオブジェクトが生成するオブジェクトの為に与えられる領域を生成し、これらは領域ツリー中にあるものです。

 これは、オブジェクト型の様々なタイプの相互作用によって若干変更される場合もあります。

 これは、オブジェクト領域内にいくつかのオブジェクト型、オブジェクト領域がある場合、オブジェクト型の属性は、領域が生成され、オブジェクト型の内容がそれらの間でどのように分配されるかによって決まる為です。

 領域の特性は以下のいずれかに該当します。


  • directly-derived
  • indirectly-derived

 [ directly-derived ]特性の値は、同じプロパティの値を持つオブジェクト型から算出されたものか、生成されるオブジェクト型の名前と一致するものです。

 [ indirectly-derived ]特性の値は、生成されるオブジェクト型にある1つ以上のプロパティの算出された値を伴う算出結果やこの領域上の他の特性または相互に作用する領域(先祖、親、きょうだい、それとまたは子)とそれとまたは型生成機によって構築された1つ以上の値です。

 その算出式は、オブジェクト型に依存する場合もあります。

 この説明は、結果ツリーにあるオブジェクト型の全てのプロパティの為に算出される洗練された値であるという仮定でのものであって、つまり、すべての関係と一致する値が算出され、継承される値が「5 属性・プロパティの改善と解決」に記述されているように伝えられるという意味です。

 この一度記述された値の継承の経過を許容するのは、この説明の中に出てくる算出された値についての情報を繰り返す必要を回避する為です。

 [ indirectly-derived ]特性の一例は以下の通りです。


  • block-progression-direction
  • inline-progression-direction
  • shift-direction
  • glyph-orientation
  • is-reference-area
  • is-viewport-area
  • left-position
  • right-position
  • top-position
  • bottom-position
  • left-offset
  • top-offset
  • is-first
  • is-last
  • alignment-point
  • area-class
  • start-intrusion-adjustment
  • end-intrusion-adjustment
  • generated-by
  • returned-by
  • folio-number
  • blink
  • underline-score
  • overline-score
  • through-score
  • underline-score-color
  • overline-score-color
  • through-score-color
  • alignment-baseline
  • baseline-shift
  • nominal-font
  • dominant-baseline-identifier
  • actual-baseline-table
  • script
  • ...etc.


 4.2 矩形領域
  4.2.1 領域タイプ
  4.2.2 共通の特徴

【4.2 矩形領域】

【4.2.1 領域タイプ】

領域には


  • ブロック領域
  • インライン領域

の2つのタイプがあり、領域が、型生成機によってどのようにスタックされるかによって違います。

 領域は、ブロック型によって定められたブロック領域の子やインライン領域の子を持ち、「ブロック領域」と「インライン領域」はいずれもスタックされ一緒に配置できますが、与えられた「領域の子」は全て1つのタイプでなければいけません。

 行領域は、ブロック領域の特別な種類で行領域の子は全てインライン領域です。

 象形文字・絵文字(日本語や中国語・韓国語などの多バイト文字を含む)領域はインライン領域の特別な種類で子領域を持っておらず、その内容としての単独の象形文字・絵文字画像を持ちます。

 通常の領域の例としては、


  • [ fo:block ]のオブジェクト型によってレンダリングされた段落が、ブロック領域を生成
  • [ fo:character ]のオブジェクト型によってレンダリングされた文字がインライン領域を生成(実際には象形文字・絵文字)

といったようなものが挙げられます。

【4.2.2 共通の特徴】

 生成されるオブジェクト型の


  • [ writing-mode ]プロパティ
  • [ reference-orientation ]プロパティ

によって関連付けられた領域は2つの方向を持ち(2次元)、[ block-progression-direction ]は、領域の子孫であるブロック領域をスタックする為の方向であり、[ inline-progression-direction ]は、領域内の子孫であるインライン領域をスタックする為の方向です。

 その他の特徴である[ shift-direction ]は、インライン領域上にあり、移動したベースラインが提供する方向を参照します。

 [ glyph-orientation ]もまた、レンダリングされた結果である象形文字・絵文字画像の方向を定義します。

 もし、ある領域の為の[ reference-orientation ]が「0」、つまり[top, bottom, left, right]エッジの要素が、領域の親と並列する場合には、一致します(重なって一つに見えます)。

 他方でエッジは、「7.21.3 reference-orientation」に記述されているように領域の親のエッジとの兼ね合いになります。

 [ inline-progression-direction ]と[ block-progression-direction ]は、「7.29.7 writing-mode」に記述されているようにこれらのエッジの位置によって決められます。

 [ is-reference-area ]のBoolean特性は、インデント仕様における座標システムを領域が確立するか否かを決めます。

 [ is-reference-area ]が[ true ]である領域は、参照領域と呼ばれます。

 参照領域はその親領域と異なる[ block-progression-direction ]だけを持っている場合もありますし、ブロック領域やインライン領域の場合もありますし、オブジェクト型が参照領域を生成するだけという事もあります。

 [ is-viewport-area ]のBoolean特性は、子孫領域を表示する事ができるか否かやその素材(領域)を切り詰めたり、スクロールしたりできるか否かをを決めます。

 例えば、印刷アプリケーションで、裁ち落しやトリムをするのと同じであり、この特性が[ true ]である領域は、「Viewport/ビューポート領域」[ viewport-area ]と呼ばれ、この場合[ is-reference-area ]も[ true ]という値を持ちます。

 通常の構成は、「viewport」と「reference」は対になっています。

 これは、Viewport領域を「V」、ブロック領域である参照領域を「R」とした場合、Rは、Vの唯一の子であり、Rの矩形の先頭エッジと末端エッジは、Vの矩形の先頭エッジと末端エッジと並列して重なる事を意味します。

 それぞれの領域は、


  • top-position
  • bottom-position
  • left-position
  • right-position

特性を持ち、より近い子孫の参照エリアのエッジに名付けられた任意の名前によって矩形のエッジからの距離が表現されますし、また、オブジェクト型の先祖によって生成された領域の場合の[ page-viewport-area ]は、絶対位置が固定になり、この場合の[ left-offset ]と[ top-offset ]は、レンダリングの為に領域が移動される相対位置によってその度合いが決まります。

 これらの特性は、フォーマットの過程で値を受け取るかまたは、絶対位置が与えられた領域の場合は洗練されている間に値を受け取ります。

 領域の[ inline-progression-direction ]と[ block-progression-direction ]は、それぞれ2つの方向の関連する領域の矩形の範囲内に表現されます。


  • Boolean特性である[ is-first ]と[ is-last ]特性は、領域が生成され、与えられたオブジェクト型を返します。
    「6.1.1 Definitions Common to Many Formatting Objects」参照
  • 矩形の線[ border-rectangle ]の外側の空間の量を表すのは、[ space-before ][ space-after ][ space-start ][ space-end ]です。

※相関方向を参照する[ before ][ after ][ start ][ end ]は以下のように定義されています。


  • [ padding ]の4方向のそれぞれの太さの設定は、[ padding-before ][ padding-after ][ padding-start ][ padding-end ]です。
  • 領域を囲む上下左右の4つの線のスタイルと太さと色
  • 領域の背景のレンダリングは、[ background-color ][ background-image ]と背景特性
  • 領域の名目上のフォント[ nominal-font ]は、フォントプロパティと領域の生成されるオブジェクト型の子孫の文字によって決まります。
    「5.5.7 Font Properties」参照

 他方で仕様上、オブジェクト型の特性は、生成される領域それぞれによって存在するもので、同じ値を持ちます(但し、「4.7.2 Line-building」と「4.9.4 Border, Padding, and Background」を参照の事)。

 ID特性は、オブジェクト型の為に算出されますが、領域には存在しません。


  4.2.3 幾何学の原理による定義
  4.2.4 ツリー構築指示命令 Tree Ordering
  4.2.5 スタック制約
  ※スタック:最後に入れたデータを最初に取り出せるようにしたデータ構造
  4.2.6 フォント基準テーブル Font Baseline Tables

【4.2.3 幾何学の原理による定義】

 表現上は、内容矩形[ content-rectangle ]は、境界[ padding ]の内側に閉じ込められた矩形で子孫領域の位置の制約を表現する為に使われます。

 つまり、内容領域内や外に文章や画像がある場合、それらの文章や画像の位置を示す範囲を特定する為の領域ともいえるかもしれません。

 子孫の象形文字・絵文字からの位置を示す事も可能ですし、他の領域が内容矩形[ content-rectangle ]の外側にある場合もあります。

 内容矩形[ content-rectangle ]に関係するのは、ある領域内に割り当てられた矩形[ allocation-rectangle ]で親領域内の領域の位置を制約する表現の為に使われます。

 インライン領域にとっては、これが通常の割り当てられた矩形[ normal-allocation-rectangle ]でも大きな矩形[ large-allocation-rectangle ]でも構いません。

 通常の矩形[ normal-allocation-rectangle ]は、[ block-progression-direction ]にある場合には内容矩形[ content-rectangle ]として展開し、[ inline-progression-direction ]にある場合には、境界線矩形[ border-rectangle ]として展開します。

 大きな矩形[ large-allocation-rectangle ]の場合は、境界線矩形[ border-rectangle ]です。

 特別の仕様でない限りは、ある領域内に割り当てられた矩形[ allocation-rectangle ]は、通常の矩形[ normal-allocation-rectangle ]とします。

 ブロック領域とは、[ block-progression-direction ]内に境界矩形[ border-rectangle ]として展開、配置された矩形[ normal-allocation-rectangle ]であり、[ end-indent ]と[ start-indent ]を等分した位置関係の[ inline-progression-direction ]にある内容矩形[ content-rectangle ]の外側にあります。

※[ inline-progression-direction ]にあるブロック領域の境界線矩形[ border-rectangle ]の外側の空間も含めた領域は、配置制約に影響しません、なぜならそれは、CSSボックスモデルとの互換性を促進する意図があるからです。

 矩形のエッジは、以下のようにデザインされますが、後述のように国や地域による記述方法(縦書き、横書き、右書き、左書き等)によって以下の定義に微妙に違いが出てきます。


左から右に書き、上から下に記述していく書式の場合には。。。
  • [ before-edge ]は、[ inline-progression-direction ]の中で最初に現れるエッジで[ inline-progression-direction ]と水平方向に対するエッジです。
  • [ after-edge ]は、[ before-edge ]と相対的(逆)です。
  • [ start-edge ]は、[ inline-progression-direction ]の垂直方向にあるエッジです。
  • [ end-edge ]は、[ start-edge ]と相対的(逆)です。

 この定義は、ある領域内の内容矩形が、その領域の[ inline-progression-direction ]と[ block-progression-direction ]の中で利用される事を目的としていますが、境界線領域[ border-rectangle ]、境界領域[ padding-rectangle ]や配置矩形[ allocation-rectangle ]は、親領域の方向を利用します。

 このように内容矩形の為にデザインされるエッジは、境界線領域[ border-rectangle ]、境界領域[ padding-rectangle ]や配置矩形[ allocation-rectangle ]のエッジの名称とは必ずしも一致しない場合もあります。

 これは、[ writing-modes ]や[ reference-orientation ]の違いを考えると領域をネストする場合に重要になってきます。

【4.2.4 ツリー構築指示命令 Tree Ordering】

 領域ツリーでは、親領域に指示された内容を持つ領域のセットで、この指示を参照する先頭領域や最後の領域、先行する領域、後に続く領域に関係します。

 いくつかの指示されたツリーでは、これに属する指示は少なくとも2つの方法で終始一貫したツリーの指示を展開します。


  • ツリーに横断的に適用される予め用意された指示 pre-order traversal order では、他との関係で変更されなければ、それぞれのノードの子が、そのノードに続きますが、ノードの氏族やその先祖の後に続く指示よりも先行します。
  • ツリーに横断的に適用される途中で設定された指示 post-order traversal order では、それぞれのノードの子は、そのノードに先行しますが、先行しているノードの氏族や先祖の指示の後に続きます。

 「先行する」「後に続く」というのは、氏族がない場合には、指示の範囲に依存して利用され、明記されなければいけません。

 しかしながら、これらのいずれの指示も与えられる事は可能で、ツリーの葉(子を持たないノード)というのは明白な指示です。

【4.2.5 スタック制約】

 このブロックスタック制約とインラインスタック制約の概念を定義するセクションは領域を要件とするものです。

 これらは指示関係として定義され、たとえば、もし、AとBがスタック制約を持つ場合、BとAがスタック制約を持つという意味である必要はありません。

 これらの定義は、自然な再帰やいくつかのケースでは、同じ定義のより簡単なケースに依存する場合もあります。

 これは、再帰の結果によりますが、循環するというわけではなく、定義の意図は、ツリー上のいくつかのレベルに分けられた領域を識別することであり、それらの中には何もない空間領域だけが存在する場合もあります。

 領域クラス[ area-class ]特性は、順次他の領域にスタックされたある領域の為の[ xsl-normal ]の列挙された値です。

 通常の領域では、この特性が[ xsl-normal ]です。

 ページレベルでラインの外[ page-level-out-of-line ]にある領域は、[ xsl-footnote ]、[ xsl-before-float ]や[ xsl-fixed ]といった[ area-class ]を持つ領域で、これらの領域は、共通のオブジェクト型の先祖である[ fo:page-sequence ]によって操作されます。

 [ reference-level-out-of-line ]領域は、[ xsl-side-float ]や[ xsl-absolute ]といった[ area-class ]を持つ領域で、これらの領域の配置は、関係のある参照エリア[ referene-area ]を生成するオブジェクト型によって操作されます。

 アンカー領域は、[ xsl-anchor ]という[ area-class ]を持つ領域で、これらの領域は、任意でスタックには影響を受けません。

「ブロックスタック制約」

 Pがブロック領域だった場合、ブロックスタック制約はPに先行する壁であり、Pは参照領域またはPの[ border-before-width ]や[ padding-before-width ]がゼロでない事を表します。

 同様にブロックスタック制約はPに先行する壁であり、Pは参照領域またはPの[ border-after-width ]や[ padding-after-width ]がゼロでない事を表します。

 AとBがスタック領域であった場合、更にSが空間仕様の順番(「4.3 空間と文法条件」参照)であり、AとBがSというスタック制約を持ち、領域が続く場合は、そのSという制約が保持されます。


  1. Bは、ブロック領域であり、Aの最初の通常の子であり、更にSは、Bの前にある空間(space-before)として順次現れます。
  2. Aは、ブロック領域であり、Bの最後の通常の子であり、更にSはAの後ろの空間(space-after)として順次現れます。
  3. AとBは共にブロック領域で共に存在する事ができます。
    1. Bは、次にAの氏族領域をスタックし、Sは、順次Aの後ろの空間(space-after)で且つBの前にある空間(space-before)として順次現れます。
    2. Bは、ブロック領域Pの最初の通常の子であり、Bは、行領域ではなく、Pに先行する壁ではなく、AとPは、Sというブロックスタック制約を持ち、且つSは、Bの前にある空間(space-before)に続くSとして現れます。
    3. Aは、ブロック領域Pの最後のの通常の子であり、Aは、行領域ではなく、Pに続く壁ではなく、PとBは、Sというブロックスタック制約を持ち、且つSは、Sの後に続くAの後ろの空間(space-after)として現れます。
    4. Aは、ブロック領域Eを持つSというブロックスタッキング制約を持ち、Eは、Bを持つSというブロックスタック制約を持ち、Eはカラ[empty](通常の子がないとか、borderやpaddingやblock-progression-dimensionがゼロ)で、SはSに続くSとして現れます。

※定義上の2か所でのスタッカブル[stackable]の使用できる事は、[ xsl-footnote ]や[ xsl-before-float ]といった[ area-class ]の領域間にも置く事ができるようにブロックスタック制約を許可します。

「ブロック領域の前後のエッジ」

 AとBがブロックスタック制約を持つ時、AとBの前後のエッジは、次のようにペアで再帰的に指示されます。


  • 【ケース1】Aという内容矩形の前にあるエッジとBという配置された矩形の前にあるエッジ
  • 【ケース2】Aという配置された矩形の後ろにあるエッジとBという内容矩形の後にあるエッジ
  • 【ケース3a】Aという配置された矩形の後ろにあるエッジとBという配置された矩形の前にあるエッジ
  • 【ケース3b】AとPという隣り合うエッジの最初とBという配置された矩形の前にあるエッジ
  • 【ケース3c】Aという配置された矩形の後にあるエッジとPとBという隣り合うエッジの2番目
  • 【ケース3d】AとEという隣り合うエッジの最初とEとBという隣り合うエッジの2番目

「インラインスタック制約」

 このセクションは、2つの領域間(2つのインライン領域または1つのインライン領域と1つの行領域)のインラインスタック制約を再帰的な定義と先行する壁と後に続く壁の概念も一緒に定義します。

 これらの定義は、一方が他方に複雑に絡み合います。

 インラインスタック制約はブロックスタック制約の定義と並列ですが、付加的な複雑さを伴うインライン領域間のスタック制約を持つ場合もあり、[ inline-progression-directions ]と相対的にスタックされる場合があります。

 これは、参照領域ではないブロック領域が、親領域と異なる[ block-progression-direction ]を持たない場合があるので、ブロックスタック制約による問題ではありません。

 PとQがインラインスタック制約を持つならば、その時PはQに先行する壁であり、もしPが参照領域または、PとQのエッジが隣り合う最初のゼロでない[ border-width ]や[ padding-width ]を持ちます。

 AとBが通常の領域で且つ、Sが空間仕様の順番であれば、それはAとBがSというインラインスタック制約を持つと定義されていて、後に続く領域があれば、その制約を引き継ぐ事になります。


  1. Aは、インライン領域または、行領域であり、Bは、インライン領域でAという最初の通常の子を持ち、更にはSがBという[ space-start ]の順番で現れます。
  2. Bは、インライン領域または、行領域であり、Aはインライン領域でBという最後の通常の子を持ち、更にはSがBという[ space-end ]の順番で現れます。
  3. AとBは共にインライン領域または、行領域であり、共に存在する事ができます。
    1. AとBは、共にインライン領域で、Bは、次の通常のAという氏族領域、かつSはAという[ space-end ]とBという[ space-start ]の順番で現れます。
    2. Bは、インライン領域で、最初にインライン領域Pという子を持ち、Pは、Aの壁ではなく、AとP、そしてSはBという[space-start]の後ろに続きます。
    3. Aは、インライン領域で、最後にインライン領域Pという子を持ち、Pは、Bの壁ではなく、PとBは、Sというインラインスタック制約を持ち、Pの[ inline-progression-direction ]は、PとBという通常の先祖領域の最も近い[ inline-progression-direction ]と同様であり、SはSの後に続くAという[ space-end ]として現れます。
    4. Bは、インライン領域で、最後にインライン領域Pという子を持ち、Pは、Aの壁ではなく、AとPは、Sというインラインスタック制約を持ち、Pの[ inline-progression-direction ]は、AとPという通常の先祖領域の最も近い[ inline-progression-direction ]と逆(相対)であり、SはBという[ space-end ]の後に続きます。
    5. Aは、インライン領域で、最初にインライン領域Pという子を持ち、Pは、Bの壁ではなく、PとBは、Sというインラインスタック制約を持ち、Pの[ inline-progression-direction ]は、PとBという通常の先祖領域の最も近い[ inline-progression-direction ]と逆(相対)であり、SはSの後に続くAという[ space-start ]として現れます。

「英語とアラビア語の混合」

 AとBがインラインスタック制約を持つ時、AとBの前後のエッジは、次のようにペアで再帰的に指示されます。


  • 【ケース1】Aという内容矩形の[ start-edge ]とBという配置された矩形の[ start-edge ]
  • 【ケース2】Aという配置された矩形の[ end-edge ]とBという内容矩形の[ end-edge ]
  • 【ケース3a】Aという配置された矩形の[ end-edge ]とBという配置された矩形の[ end-edge ]
  • 【ケース3b】AとPという隣り合うエッジの最初とBという配置された矩形の[ start-edge ]
  • 【ケース3c】Aという配置された矩形の[ end-edge ]とPとBという隣り合うエッジの2番目
  • 【ケース3d】AとPという隣り合うエッジの最初とBという配置された矩形の[ end-edge ]
  • 【ケース3e】Aという配置された矩形の[ start-edge ]とPとBという隣り合うエッジの2番目

 2つの領域が隣り合うというのは、それらがブロックスタック制約またはインラインスタック制約を持つ場合を表します。

 最も近くに通常の先祖がない間は、同じタイプの隣り合うブロックやインラインの領域と隣接する事ができます。

 このように例えば、異なる行領域に存在する2つのインライン領域は、決して隣接する事はありません。

 ある領域Aが領域Pにあり、もし、AがPの子孫で、PとAがブロックスタック制約またはインラインスタック制約を持つ場合、Pの子孫ではなくAの先祖でAは、算出される最小、最大、最適値がゼロでない(この場合にはブロックスタック制約である)[ space-before ]または、(この場合にはインラインスタック制約である)[ space-start ]を持ちます。

 このケースでは、Pと2番目に隣り合うAはPの先頭エッジになると定義されています。

 Aの空間仕様である先頭のエッジがPの始まりも定義する事になります。

 同様に領域Aの終わりは領域Pであり、もしAがPの子孫だった場合には、AとPはブロックスタック制約またはインラインスタック制約を持ち、Pの子孫ではなく、Aの先祖であり、Aは、算出される最小、最大、最適値がゼロでない(この場合にはブロックスタック制約である)[ space-after ]または、(この場合にはインラインスタック制約である)[ space-end ]を持ちます。

 このケースでは、AとPという最初に隣り合うエッジがPにとっての末端のエッジになると定義されています。

 Aの空間仕様である末端のエッジがPの終わりも定義する事になります。

【4.2.6 フォント基準テーブル Font Baseline Tables】

 それぞれの書体は、書体で文字を一直線に合わせる好みの基準を持っています。

 西洋書式は、アルファベット基準を利用していますが、この基準は底辺に近いものです。

 もっといえば、互いのフォントは、それぞれ異なる書体の文字を一直線に埋め込む方法を好みます。

 たとえば、西洋書式では、表意文字やインド象形文字を一直線に埋め込む基準を区別しています。

 それぞれのブロック領域とインライン領域は、排他的な識別基準特性を持っており、値はその領域の子孫であるインライン領域が期待する調節方法に一致する識別基準であり、それぞれのインライン領域は、調整基準を持ち、この調整基準は、領域がその親領域にどのように一致させるかの仕様です。

 これらの特性は、「7.9.1 Fonts and Font Data」セクションにある子孫として解釈されます。

 それぞれのフォントは、実態基準テーブル(actual-baseline-table)マップがその領域の[ start-edge ]を指し示し、識別します。

 専門用語を多用すると、[ inline-progression-direction ]にある行と一致する場所を示して排他的な識別基準特性が排他的な基準に呼ばれます。


 4.3 空間と文法条件
  4.3.1 空間解決ルール
  4.3.2 制約を超える空間仕様 Overconstrained space-specifiers

【4.3 空間と文法条件】

 空間仕様は、混合データタイプであり、混合データタイプの構成要素は、「最小値」、「最適値」、「最大値」、「条件値」、「優先値」です。

 「最小値」、「最適値」、「最大値」とは、長さの事であり、距離に関する制約が定義され、すなわちそれは距離が最適値になるのが望ましく、いかなる場合でも最小値より小さい、最大値より大きいというケースがないものとします。

 これらの値の中には、[ overlap ]のように負の値(マイナスの値)を持つ場合もありますが、こうした場合の最小値は、この負の値よりも小さい値か等しい値、そしてまた最適値は最大値に比べより小さいか等しい値であるべきです。

 「条件値」とは、列挙された値であり、空間仕様が、参照領域や行領域の始めまたは、終わりに影響を持つか否かを操作する為のものです。

 条件値として設定可能な値は、[ retain ]と[ discard ]で、条件的な空間仕様は、この値が、[ discard ]の場合に有効です。

 「優先値」とは、強制的な数値か特別なトークンのいずれかを持つ値で、強制的な空間仕様は、この値が効力を持つものとします。

 空間仕様は、順次出現し、お互いの値に影響する場合もあります。

 その制約が、空間仕様の順番によって強いられるのは、条件値と優先値に一致する確固たる空間仕様を結びつけ、以下に示すような空間解決ルールを持ってそれぞれの空間仕様を計算する事によって算出されます。

 距離において解決の順番によって強いられるその制約は、加算され、それは、その距離が、確固たる最小値の合計よりも小さくなったり、確固たる最大値の合計よりも大きくなったりする事はあり得ません。

【4.3.1 空間解決ルール】

 Sという空間仕様が与えられた場合の空間仕様の挙動は、次のように算出されます。

 要素に対して順次、Sという空間仕様が含まれるSというインラインスタック制約かブロックスタック制約を最大限考慮します(Sは空間仕様の順番「4.2.5 スタック制約」参照)。


  • もしSが、行領域にある[ space-before ]、[ space-after ]だった場合のSとはSというサブシーケンスの最大限であり、Sを含んでいて、Sにある空間仕様の全ては、行領域の特性を持ちます。
  • もしSが、行領域ではなく、ブロック領域にある[ space-before ]、[ space-after ]だった場合のSとはSというサブシーケンスの最大限であり、Sを含んでいて、Sにある空間仕様の全ては、行領域ではなく、ブロック領域の特性を持ちます。
  • もしSが、行領域の[ space-start ]、[ space-end ]だった場合のSとはSそのものです。

 Sという空間仕様の挙動は、無条件であり、強制的に空間仕様はSという順番を算出します。


  1. もしSにある空間仕様のいくつかが、条件値だった場合には、参照領域または行領域の始まりを表すだけなので、空間仕様は抑制され、空間仕様の挙動はゼロという意味です。もっといえば、空間仕様条件が後に続く連続した順番をも抑制するという事です。この目的は、Uという空間仕様がVという空間仕様に続くのを抑制し、もし、UがVに続いたら、そしてUとVが空間仕様条件によるかまたは、最小値、最大値、最適値がゼロという双方、または一方の状態によってのみ順番の中で区別されます。
    • もし参照領域や行領域の終わりを表す空間仕様条件だった場合には、連続した順番を優先するいかなる他の空間仕様条件も抑制します。このルールの目的は、Uという空間仕様が、Vという空間仕様の優先度を抑制し、もし、UがVを優先した場合、UとVは、空間仕様条件によるかまたは、最小値、最大値、最適値がゼロという双方、または一方の状態によってのみ順番の中で区別されます。
  2. もしSにある空間仕様がまだある場合には、強制され、すべての強制力を持たない空間仕様は抑制され、強制される空間仕様のそれぞれの値は解決された値として受け取られます。
  3. 変更時に、もしSにある空間仕様がまだある場合には、強制されず、すべての強制力を持たない空間仕様は抑制され、解決された空間仕様は、抑制されない空間仕様として定義され、優先度は、数値的に最大となり、この間、最適値は最大となります。他の全ての空間仕様は抑制されます。もし、空間仕様が1つだけしかなかったら、その値が解決された値として受け取られます。
    • 一方でこれらのルールに続けて2つ以上の空間仕様が全て同じ高い優先度であった時には、最適値は同じになります。順番の中で最後の空間仕様である解決された空間仕様は、最適値としての通常の最適とされる値を受け取る事によってこれらの空間に適用します。最小値の中で最大のもの、それは最小値であり、少なくとも最大の値とは最大値であって、他の全ての空間仕様は抑制されます。
  4. もしSが制約を超えた自由度の高いものであった場合には、その最大値は、ブロック領域に含まれる実際の[ block-progression-dimension ]のものとしてセットされます(「4.3.2 制約を超える空間仕様」参照)。

 例:参照領域の開始位置で結合している空間値のシーケンスを仮定してみると、最初は、10ポイントという値を持つ空間(最小、最適、最大が全て10ポイントと等しい)、そして条件付きで破棄され、2番目は、4ポイントという値を持つ空間で、条件付きで残されます。3番目は、5ポイントという値を持つ空間で、条件付きで破棄され、3つ全ての空間は優先してゼロを持っています。その時、最初の空間(10ポイント)は、ルール1の下に抑制され、2番目の空間(4ポイント)は、ルール3の下に抑制されます。3番目の結果となる値は、それが条件付き空間から派生した場合であっても無条件で5ポイントです。

 ブロック領域の境界は、(それがスタック制約を持っている事から派生するいずれかの辺にある領域に先行する「before-edge」や「after-edge」で境界の存在を定義する事による空間仕様を除き、)いかなる空間仕様とも相互作用しません。

 ブロック領域Bの「before-edge」や「after-edge」にある線や境界は、条件付きであるものとして記述される場合があります。もし、そうであれば、ゼロがセットされ、その割り当てられたエッジは、参照領域内にあるエッジに先導され、Bの[is-first]特性は「false」であるか、または、その割り当てられたエッジは、参照領域内にあるエッジの跡をたどり、Bの[is-first]特性は「false」です。これらのけーすのいずれかでは、線と境界は、スタック制約定義の目的においてゼロとなるように取得されます。

 インライン領域Iの「start-edge」や「end-edge」にある線や境界は、条件付きであるものとして記述される場合があります。もし、そうであれば、ゼロがセットされ、もし、その割り当てられたエッジが行了以内のエッジを先導し、Iの[is-first]特性は「false」であるか、または、その割り当てられたエッジは、行領域内のエッジの跡をたどり、Iの[is-first]特性は「false」です。これらのけーすのいずれかでは、線と境界は、スタック制約定義の目的においてゼロとなるように取得されます。

【4.3.2 制約を超える空間仕様】

 ある領域Pが、[ block-progression-dimension ]が[ auto ]であるオブジェクト型によって生成された場合には、制約というのは、Pという内容矩形の[ before-edge ]と[ after-edge ]を必要であるものとし、様々なPの子孫間に制約を伴い、結果として[ block-progression-dimension ]の実体値に関する制約という事になります。

 もし[ block-progression-dimension ]が、長さとしての仕様に代わる場合には、例えば、仕様化されたサイズを持つ不完全な[ fo:block ]のように制約を超えた領域ツリーにある結果となる場合があります。

 このケースでは、Pと子孫の間にあるいくつかの制約は高い自由度を持つべきで、これらの適格な扱いとしては、前のセクションで扱っているように制約を超えた自由度の高いものになると言う事です。


  • もし、[ display-align ]値が、[ after ]または[ center ]で、Pがオブジェクト型によって生成された最初の通常の領域だった場合、Pの最初の通常の子領域の[ space-before ]は、制約を超えた自由度の高い仕様です。
  • もし、[ display-align ]値が、[ before ]または[ center ]で、Pがオブジェクト型によって生成された最後の通常の領域だった場合、Pの最後の通常の子領域の[ space-after ]は、制約を超えた自由度の高い仕様です。


 4.4 ブロック領域
  4.4.1 スタックブロック領域
  4.4.2 割り込み調整

【4.4 ブロック領域】

 ブロック領域はいくつかの特性を持ち、子領域の位置にしばしば影響します。

 [ line-height ]は、行の配置計算に利用されます。

 [ line-stacking-strategy ]特性は、配置の種類である[ font-height ][ max-height ][ line-height ]という列挙値で子孫の行領域に対して利用されます。

 これは、下記のように厳格に規定されており、すべての領域はこれらの特性を持ちますが、子に当たる行領域をスタックする領域として妥当性を持つ事に限定されます。

 行領域を持たない典型的なあるブロック領域は、[ start-indent ][ end-indent ]と最も近い位置にある先祖の参照領域の値によって決められた[ inline-progression-direction ]にあるサイズを持ちます。

 行領域を持たないあるブロック領域は、その生成するオブジェクト型の説明に他の仕様化がなされていない限り「4.4.1 スタックされるブロック領域」に定義されているように正確にスタックされなければいけません。

 このケースでは、その[ block-progression-dimension ]は[ block-progression-dimensions ]と子孫の空間仕様に基づいて制約されます(「4.3.2 制約を超えた空間仕様」参照)。

【4.4.1 スタックブロック領域】

 ある領域内の子にあたるブロック領域の典型的なものは、親領域内の[ block-progression-dimension ]にスタックされ、ブロック領域の位置づけをする既定のメソッドです。

 しかしながら、オブジェクト型は、例えば、リストアイテムやテーブルのように子領域が生成された領域内の子領域の位置付けの他のメソッド仕様からは解放されます。

 Pという親領域にとって子領域とは、ブロック領域のことであり、Pは、次のような条件を保持している場合に正確にスタックされるものとして定義されています。


  1. Bというそれぞれのブロック領域には、Pという子孫領域があり、次のように保持されます。
    • 配置された矩形の[ before-edge ]と[ after-edge ]は、Pという内容領域の[ before-edge ]と[ after-edge ]と並列になります。
    • 配置された矩形のその[ start-edge ]は、Rという内容矩形の[ start-edge ]と並列であり(RはBという閉じた先祖参照領域にあり)、距離による内側のオフセット値は、以下に定義されているような[ start-intrusion-adjustment ]が加算され、[ border-start ]、[ padding-start ]、[ space-start ]の値が減算されたブロック領域の[ start-indent ]と等しくなります。
    • 配置された矩形の[ end-edge ]は、Rという内容矩形の[ end-edge ]と並列で距離による内側のオフセット値は、以下に定義されているような[ end-intrusion-adjustment ]が加算され、[ border-end ]、[ padding-end ]、[ space-end ]の値が減算されたブロック領域の[ end-indent ]と等しくなります。

    ※インデントの概念は、内容矩形に提供される事が意図されていますが、制約は配置された矩形の為に書かれており、理由については「4.2.3 幾何学的な定義」の冒頭に記述されていますが、内容矩形のエッジは、配置された矩形と似たような名称とは一致しない場合もあります。

    ※[ start-intrusion-adjustment ]と[ end-intrusion-adjustment ]は[ inline-progression-direction ]にある変動(floats)による割り込みを扱う為の特性です。

    ※マージンプロパティがインデントにどのような影響を与えるのかについては「5.3.2 マージン・スペース・インデントプロパティ」セクションも参照して下さい。

  2. Pにぶら下がるサブツリーにあるBとB'という通常の領域のペアはそれぞれ、もしBとB'がSというブロックスタック制約を持つ場合には、Bは、空(カラ)ではない事を表し(「4.2.5 スタック制約」参照)、BとB'の隣り合うエッジ間の距離は、Sにある空間仕様の解決された値によって不変の強制される制約を持ちます。
  3. 例:ダイアグラムでは、もし領域Aが3ポイントという値の[space-after]、1ポイントの[space-before]を持つB、2ポイントの[space-before]を持つCがあり、全ては、効力の先導を伴い、線と境界がゼロであると仮定すると、制約は、Aの下に4ポイントを場所Bの領域確保した矩形、Aの下に6ポイントをCの領域確保した矩形となるでしょう。このように4ポイントのギャップは、Pから背景色を受け取り、Cの前の2ポイントのギャップは、Bから背景色を受け取ります。

【4.4.2 割り込み調整】

 [ start-intrusion-adjustment ]と[ end-intrusion-adjustment ]両方の割り込み調整は、側面の変動の結果として生じる凹みやズレを考慮して定義されています。

 もしAとBが領域であり、同じ先祖の最も近い参照領域である場合、もし、[ inline-progression-direction ]と並列の行があってAという配置された矩形とBという配置された矩形の両方に交わる場合には、AとBは[ inline-overlapping ]であると定義されています。

 もしAが[ float="start" ]という値を持つ[ xsl-side-float ]で、Bはブロック領域であり、AとBが最も近い同一の先祖である参照領域を持ち、もしAとBが[ inline-overlapping ]でBの[ start-indent ]が、Aの[ start-indent ]とAの[ inline-progression-dimension ]の合計よりも小さい場合には、AはBを侵害すると定義されています。

 AとBのその始まり位置の侵害は、Aの[ start-indent ]とAの[ inline-progression-dimension ]の合計よりも小さい場合には、Bの[ start-indent ]による量になるものと定義されています。

 もしAが[ float="end" ]という値を持つ[ xsl-side-float ]で、Bはブロック領域であり、AとBが最も近い同一の先祖である参照領域を持ち、もしAとBが[ inline-overlapping ]でBの[ end-indent ]が、Aの[ end-indent ]とAの[ inline-progression-dimension ]の合計よりも小さい場合には、AはBを侵害すると定義されています。

 BにおけるAの終端の侵害は、Bの[ end-indent ]が、Aの[ end-indent ]とAの[ inline-progression-dimension ]の合計よりも小さい場合には、Bの[ end-indent ]による量になるものと定義されています。

 もしBが行領域ではなく、ブロック領域であれば、[ local-start-intrusion-adjustment ]は、次にあるような長さの最大値として算出されます。


  1. ゼロ
  2. Bの親領域が参照領域ではない場合は、Bの親領域の[ start-intrusion-adjustment ]
  3. もしBが[ intrusion-displace="block" ]であれば、生成されるAというオブジェクト型が生成されるBというオブジェクト型の子孫ではなく、[ float="start" ]という値を持つ[ xsl-side-float ]クラスとしてのAという各領域は、Aの開始位置侵害であり、AがBという子としての行領域を侵害します。
  4. もしBが[ intrusion-displace="block" ]であれば、[ float="start" ]という値を持つ[ xsl-side-float ]クラスとしてのAという各領域、またもしAとBが[ inline-overlapping ]でBというB'の先祖であるブロック領域があればそれぞれは、Bという最も近くにある先祖にあたる参照領域の子孫であり、AはB'という子に当たる行領域を侵害(Bに関してAの開始位置侵害)します。

 Bというブロック領域の[ start-intrusion-adjustment ]は、通常のブロック領域として生成された[ local-start-intrusion-adjustment ]の最大値になり、Bという生成されるオブジェクト型によって返されます。

 もし、Lが行領域で、その[ start-intrusion-adjustment ]は、次のような長さの最大値として算出されます。


  1. Lの親領域の[ start-intrusion-adjustment ]
  2. [ float="start" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域は、LにおいてAの開始位置が侵害します
  3. もし、Lという親領域が[ intrusion-displace = "indent" ]である場合、[ float="start" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域は、AとLが[ inline-overlapping ]であり、Lという先祖に当たる最も近い参照領域の子孫であるLというB'の先祖に当たるそれぞれのブロック領域であり、このような時、AはBに関してAの開始位置侵害であり、B'というL'という子領域を持つ行領域についてAが侵害します。

 ブロック領域における[ end-intrusion-adjustment ]は、まさに類似した方法で算出されます。

 もしBが行領域ではなく、ブロック領域である場合、その時の[ end-intrusion-adjustment ]は、次のような長さの最大値として算出されます。


  1. ゼロ
  2. Bの親領域が参照領域ではない場合は、Bの親領域の[ end-intrusion-adjustment ]
  3. もしBが[ intrusion-displace="block" ]であれば、[ float="end" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域は、生成されるAというオブジェクト型が生成されるBというオブジェクト型の子孫ではなく、且つ、Bに関してAは末端位置侵害であり、AがBという子としての行領域を侵害します。
  4. もしBが[ intrusion-displace="block" ]であれば、[ float="end" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域は、AとBが[ inline-overlapping ]でBというB'の先祖であるブロック領域があればそれぞれは、Bという最も近くにある先祖にあたる参照領域の子孫であり、このような場合AはB'という子に当たる行領域を侵害(B'に関してAの末端位置侵害)します。

 Bというブロック領域の[ end-intrusion-adjustment ]は、通常のブロック領域が生成され、生成されるBという一般的なオブジェクト型によって返される[ local-end-intrusion-adjustment ]の最大値になると定義されています。

 もし、Lが行領域であれば、[ end-intrusion-adjustment ]は、次のような長さとしての最大値として算出されます。


  1. Lの親領域の[ end-intrusion-adjustment ]
  2. [ float="end" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域は、Lに関してAの末端位置侵害であり、LにおいてAの末端位置が侵害します
  3. もし、Lという親領域が[ intrusion-displace = "indent" ]である場合、[ float="end" ]という値を持つ[ xsl-side-float ]クラスとしてのAというそれぞれの領域では、AとLが[ inline-overlapping ]であり、Lという先祖に当たる最も近い参照領域の子孫であるLというB'の先祖に当たるそれぞれのブロック領域で、このような時、AはB'に関して末端位置侵害であり、B'というL'という子を持つ行領域についてAが侵害します。


 4.5 行領域

 4.6 インライン領域
  4.6.1 スタックインライン領域
  4.6.2 絵文字・象形文字(日本語・アラビア語・中国語・韓国語等含む)領域

【4.5 行領域】

 行領域は、ブロック領域の特別なタイプであり、生成された親領域と同一のオブジェクト型によって生成されます。

 行領域は、[ border ]と[ padding ]プロパティを持っておらず、すべてゼロとして扱われます。

 行領域は、[ baseline-start-point ](基準開始位置)との兼ね合いで行領域内にスタックされ、行領域の内容矩形としての開始エッジについては、型生成機によって位置が決定されます。

 行として配置された矩形は、[ line-stacking-strategy ]特性の値によって決まり、もしその値が配置された矩形の[ font-height ]であれば、それは、[ nominal-requested-line-rectangle ]であり、以下のように定義されています。


その値が[ max-height ]なら、配置された矩形は、[ maximum-line-rectangle ](最大行矩形)であり、更に次のように定義されています。

-もし、その値が[ line-height ]なら、配置された矩形は、[ per-inline-height-rectangle ](行ごとの高さを持つ矩形)であり、それは更に以下のように定義されています。

--もし、[ line-stacking-strategy ]特性が、[ font-height ]か[ max-height ]なら[ space-before ]と[ space-after ]は、ともに半分先行する(half-leading)値として設定され、[ font-height ]や[ max-height ]はゼロとして設定されます。

 行領域における[ nominal-requested-line-rectangle ]は、矩形であり、開始エッジは、最も近くにある先祖である参照領域の内容矩形としての開始エッジであり、行領域の開始インデントと開始位置割り込み調整値の合計によってそれをオフセット値とし、終端エッジは、最も近くにある先祖の参照領域の内容矩形の終端エッジであり、行領域の終端インデントと終端割り込み調整値の合計によってそれをオフセット値とし、[ before-edge ]は、親ブロック領域のテキストの高さによって基準開始位置と区別され、[ after-edge ]は、親ブロック領域のテキストの高さによって基準開始位置と区別されます。

 それは、ブロック領域の子であるそれぞれの行領域において同一の[ block-progression-dimension ]を持つ事を意味します。

 行領域における最大行矩形は、開始エッジと終端エッジが並列で[ nominal-requested-line-rectangle ]の開始エッジと終端エッジと一致し、[ block-progression-dimension ]内の範囲は、[ nominal-requested-line-rectangle ]と行領域内にスタックされる全ての行領域の配置された矩形を両方とも取り囲む事ができる最小値になります。但し、これは、行領域の子孫によって異なる場合もあります。

 行領域における[ per-inline-height-rectangle ](行ごとの高さを持つ矩形)は、開始エッジと終端エッジが並列で[ nominal-requested-line-rectangle ]の開始エッジと終端エッジと一致し、[ block-progression-dimension ]は次のように決定されます。


インライン領域として拡張された矩形は、開始エッジと末端エッジが配置された矩形と一致し、直前のエッジと直後のエッジが(a.)半分先行した位置と等しい距離に配置された矩形の外側にあり、その領域の配置された矩形は、生成されるオブジェクト型の説明によって通常の配置された矩形になると明記されていて、また(b.)直前の空間と直後の空間を尊重しながら、その領域の配置された矩形は、最大配置矩形になると明記されています。

[ expanded-nominal-requested-line-rectangle ](拡張された名目上の行矩形)は[ nominal-requested-line-rectangle ]の持つ開始エッジと終端エッジと一致する開始エッジと終端エッジを持つ矩形であり、直前のエッジと直後のエッジは、半分先行したのと同等距離である[ nominal-requested-line-rectangle ]の外側にあります。

[ block-progression-direction ]にある行ごとの高さの矩形の範囲は、行領域内にスタックされた全ての行領域の[ expanded-nominal-requested-line-rectangle ](拡張された名目上の矩形)と[ expanded-rectangle ](拡張された矩形)の両方と一致する最小の値になると定義されています。


※[ nominal-requested-line-rectangle ]の利用は、ある基準から異なる基準への空間と同等であり、[ maximum-line-rectangle ]の利用は、行領域との間の均一な空間を許容するものです。
※[ per-inline-height-rectangle ]と直前の空間と直後の空間がゼロという場合の利用は、CSSスタイルラインボックススタッキング[CSS-style line box stacking]を許容し、また、条件とは関係なく拡張された矩形に含まれる半分先行した値も同様です。このように行の高さが、"discard"という条件はこのケースでは、効果がありません。。

【4.6 インライン領域】

 インライン領域は、[ line-height ]特性を持ち、ブロック領域内に含まれる[ line-height ]が異なる場合に備えています。

 これは、[ line-stacking-strategy ]が、[ line-height ]であるときの先祖に当たる行領域として配置に影響する場合もあります。

 インライン領域は、[ nominal-font ](名目上のフォント)の為に[ actual-baseline-table ](実体値基準テーブル)を持っています。

 [ actual-baseline-table ](実体値基準テーブル)は、インライン領域の子孫がどのように配置され、スタックされるかを決める[ dominant-baseline-identifier ](優先基準識別子)を持っています。

 あるインライン領域が子領域を持つ場合もあれば、持たない場合もあり、それが参照領域である場合もあれば、参照領域でない場合もあります。

 子領域を持たないインライン領域における内容矩形の寸法は、生成されるオブジェクト型によって仕様として算出され、子としてのブロック領域と共にインライン領域が形成されます。

 子としてのインライン領域を持つインライン領域は、[ block-progression-direction ]にある[ text-depth ](テキストの深度を表す属性)によって、その優先基準(「4.2.6 フォント基準テーブル」参照)から展開される内容矩形を持ち、[ text-altitude ](テキストの高さを表す属性)によって相対方向に位置します。

 [ inline-progression-direction ]内では、それは、最初の子である配置された矩形の開始エッジと、最後の子である配置された矩形の終端エッジまで拡張されます。

 このようなインライン領域の配置された矩形は、その内容矩形と同一です。

 そのインライン領域に配置された子を持たない矩形は、生成されるオブジェクト型の説明の中で明記されているように通常の配置された矩形か、拡大配置された矩形です。

※[ line-stacking-strategy ]が[ line-height ]であるとき、配置は、拡張された矩形に依存して配置されます。

※子を持つインライン領域の例としては、行内の数式の一部や[ right-to-left ]内にある[ left-to-right ]などのように混合した書式システムから生じる領域を含む場合もあります。

【4.6.1 スタックインライン領域】

 ある領域にある子としての行領域は、親領域内の[ inline-progression-direction ]にスタックされるのが典型的です。

 インライン領域は、「4.2.6 フォント基準テーブル」で定義されているように優先基準との兼ね合いでスタックされます。

 子がインライン領域であるPという親領域において、Pは、次のような全ての条件を保持する場合、正確にスタックされると定義されています。


  1. PというIを子孫とするそれぞれのインライン領域は、I上に配置される矩形の開始エッジと終端エッジ、直前のエッジ、直後のエッジは、Iの最も近い先祖にあたる参照領域としての内容矩形のエッジに並列して一致します。
  2. それぞれの通常領域であるIとPに紐づくサブツリーにあるIは、もしIとI'が、Sというインラインスタック制約を持つ場合、IとI'の隣り合うエッジ間の距離は、Sにある空間仕様の解決された値によって強制されるという制約を持ち不変です。
  3. PというIというインライン領域をを子孫とする領域は、IというQを親に持つ優先基準によって移動した方向にある距離は、Qという優先基準とIという調整基準特性に一致するQという基準にIとの移動した基準を加算したものになります。

※最初の内容は、混合した異なる基準タイプの書式システムにおいて補正する為に算出され、その他の内容は、上位と下位という意味合いにおいて意図的に要件としたものです。

【4.6.2 絵文字・象形文字(日本語・アラビア語・中国語・韓国語含む)領域】

 もっとも一般的なインライン領域は、固有のフォントである文字や文字列の説明を含む象形文字・絵文字領域です。

 象形文字・絵文字とは、領域の印刷上の特性によって決められた結合された[ nominal-font ](名目上のフォント)を持ち、書式モードと[ reference-orientation ]によって決まる[ glyph-orientation ]という文字情報を提供し、レンダリングされた時に象形文字の傾向を決めます。

 象形文字・絵文字の調整箇所と優先基準識別子は、例えば、西洋書式の中の象形文字基準など使用する書式システムに依存して示され、行領域の子孫に当たる行領域の配置を操作する為に使われます。

 型生成機は、親領域と異なる[ inline-progression-directions ]混合書式システムの場合にスタックされるインライン領域を調整したインライン領域を生成する場合もあります。

 象形文字・絵文字領域は子領域を持ちません。

 [ block-progression-direction ]と実体値基準テーブルは、フォントにある全ての象形文字・絵文字と同一です。

 一致させる方法としては、フォント中にある全ての象形文字・絵文字の通常のサイズを利用するよりも象形文字・絵文字のサイズの実体値に基づく象形文字・絵文字領域である[ block-progression-direction ]を選択する方がいい場合もあります。


 4.7 指定制約 Ordering Constraints
  4.7.1 一般的な指定制約
  4.7.2 行構造
  4.7.3 インライン構造

【4.7 指定制約・指示制約 Ordering Constraints】

【4.7.1 一般的な指定制約・指示制約】

 フォーマット型に帰属する領域であるサブセットSは、一般的なオブジェクト型と同じ指定を持つサブセットにある領域であれば適切な指定によって呼ばれます。

 仕様上は、もし、A1とA2が、Sにある領域であり、F1がF2を優先した状態でF1とF2というオブジェクト型の子によって返される場合には、領域ツリーを横断して適用される事前指定によってA1はA2を優先しなければいけません。

 もし、F1とF2が等しく、かつ、A1がA2を優先して返す場合には、A1は、領域ツリーに横断的に適用される事前指定によってA2を優先しなければいけません。

 それぞれのオブジェクト型FとエリアクラスCは互いに領域クラスCを伴ったFに返される領域として現れるサブセットであり、他に特段の仕様がない限り、適切に指定されなければいけません。

【4.7.2 行構造】

 このセクションは、[ fo:block ]または、これに近いブロックレベルオブジェクトによって提供される指示制約について記述するものです。

 ブロックレベルのオブジェクト型であるFは、構築する行がブロック領域によって構築され、親オブジェクト型に返され、通常の領域とまたは、ブロック領域の子として構築されたブロック領域や行領域の子としての子オブジェクト型によってFに返されるアンカー領域を配置します。

 このようなFというオブジェクト型は、フォームに通常領域のS1、S2...、Snというサブセットの指定によって構成されるパーテーションPと子オブジェクト型によって返されるアンカー領域、このようにそれらすべてを満足させる次のような指定を可能にしなければいけません。


  1. 各サブセットは、単独のブロック領域として行領域に順次現れます。
  2. パーテーション指定は、オブジェクト型ツリーの指定の後に続きます。仕様上は、以下の2点を想定しています。
    • もしAが、SjにあるSiとB(iとjは、i < j の関係)にあるか、または、AとBが共にサブセット内のBの前にあるAを持つSjという同じサブセットにある場合
    • AがBという優先されるきょうだいオブジェクト型によって返されるかまたは、AとBがBの前に返されるAを持つ同一のオブジェクト型によって返される場合
  3. 改行は、正式な区切りとして現れます。仕様上は、以下を想定しています。
    • もしAが、Sjの最後の領域で、かつ、BがSj+1の最初の領域である場合、影響範囲にある言語や書式の規則とハイフン制約(「7.10 Common Hyphenation Properties」、「7.16.1 hyphenation-keep」、「7.16.2 hyphenation-ladder-count」)は、SjとSj+1にある全ての領域内のAとBの間の改行を認めなければいけません。
  4. 強制改行は尊重されます。仕様上は、以下を想定しています。
    • もしCが、Fの子孫であり、かつ、CがUnicode文字列である[ fo:character ]が、[ U+000A ]で、Aが、Cによって生成された領域である場合には、CはFとAの子として存在し、サブセットSj内にある最後の領域であるか、CがFというC'という子の子孫であり、AがC'によって返されたA'という領域で終わる(感覚としては、「4.2.5 スタック制約」参照)か、このような場合のA'がサブセットSj内の最後の領域である場合。
  5. 領域ツリーの指定に続く区切り指定は、象形文字・絵文字・日本語・韓国語・中国語などの多バイト文字を除いて、置換され削除されます。仕様上は、以下を想定しています。
    • B1、B2...、Bpが、領域やFによって返される領域の通常の子領域であり、領域ツリーの横断的な事前指定で指定される場合には、これらの子領域と区切り文字が1:1で一致します。
      • Sjは単独のブロック領域として現れ、Bjはそのブロック領域
      • Sjは行領域として現れ、Bjは子領域がSj内の同一の行領域として存在する行領域であり、同一の指定である(言語・書式規則の影響範囲が象形文字領域を置換、挿入、削除する為に呼ばれ、置換や挿入された象形文字領域が一致する然るべき場所である領域ツリーに存在し、象形文字領域の削除とは領域ツリーに現れない事を意味し、たとえば、挿入と置換がハイフンでつなぐ目的でハイフンの追加やスペル変更の為に生じる場合もあり、分節法による象形画像や合成文字構造の場合を除く。削除については次の6番目にも記述されています。)
  6. ホワイトスペース処理が、強制的に行われます。固有のケースについては前述5番目の通りです。Gという領域に象形文字がある場合
    • (a.)Gのホワイトスペース処理は、無視され、Gの文字は、XML内のホワイトスペースとして分類されます。
    • (b.)Gのホワイトスペース処理は、ラインフィードの前、ラインフィードの前後、領域Gの改行を抑制する場合、領域Gが行領域の終わりである場合には、無視されます。
    • (c.)Gのホワイトスペース処理は、ラインフィードの後、ラインフィードの前後、領域Gの改行を抑制する場合、領域Gが行領域の始めである場合には、無視されます。

     このケースでは、領域Gは削除されます。これは、「true」となる為の(b.)または(c.)節にある条件に起因する場合があり、削除という結果になります。

 単独の象形文字領域を持つ象形文字領域の順番の置き換えである置換は、限定的に行われるべきであり、最初と最後の[ inline-progression-direction ]内の[ margin ]、[ border ]、[ padding ]や移動基準や[ letter-spacing ]の値がゼロの場合、文字構成としてのスペースにおいては[ false ]であり、全ての他の適切な特性を持つ値は、一致します。

 (例えば、alignment-adjust, alignment-baseline, color trait, background traits, dominant-baseline-identifier, font traits, text-depth, text-altitude, glyph-orientation-horizontal, glyph-orientation-vertical, line-height, line-height-shift-adjustment, text-decoration, text-shadowなど)

※行領域は、[ background ]特性や生成されるオブジェクト型の[ text-decoration ]特性、レンダリング中にマークを持つ他の特性は受け入れません。

【4.7.3 インライン構造】

 このセクションは、[ fo:inline ]または、これに近いインラインレベルオブジェクトによって提供される指示制約について記述するものです。

 Fという1つ以上のインライン領域で構築されるインラインレベルのオブジェクト型は、通常のインライン領域とまたは、アンカーインライン領域が生成するインライン領域の子としての子オブジェクト型によって返されます。

 このようなFというオブジェクト型はお互いに通常のインライン領域またはアンカーインライン領域のS1,S2...Snというサブセットと子フォーマット型に返される通常のブロック領域において現れる区切りPの記述を可能にしなければならず、次のようなケース全てを満足させるものでなければいけません。


  1. それぞれのサブセットはインライン領域として、または単独のブロック領域として順次現れます。
  2. 区切り指定は、先に定義したようにオブジェクト型ツリーの指定に続くものとされています。
  3. 区切りは、先に定義したように、改行が認められています。
  4. 強制改行は、先に定義したように尊重されます。
  5. 領域ツリーの指定に続く区切りは、先に定義したように象形文字の置換と削除は除外します。


 4.8 保持と解除

【4.8 保持と解除】

 保持と解除条件は、領域のクラスによって提供され、典型的なものとしては、ページ参照領域、列領域、行領域があります。

 条件を与えられた妥当なクラスは、文脈として参照され、このクラスにある領域は、文脈領域です。

 「6.4.1 概論」では、頁参照領域は、[ fo:page-sequence ]が[ fo:page-master ]にある仕様を利用する事によって生成される領域で、列領域は、通常のフロー参照領域が[ region-body ]または、[ fo:page-master ]の他のタイプから生成される[ region-reference-areas ]によって生成される領域です。

 保持や解除条件は、オブジェクト型のオープンステートメントであり、領域のツリー(上に成り立つ)関係は、適切な文脈領域を持って生成されます。

 これらのツリー関係は、主に先行する領域または、後続の領域の為に定義されます。

 もしAがPという子孫を持つ場合には、Aは、通常領域としての優先されるきょうだいがなく、Pを含んでいない状態にある先祖領域もない場合にはAは、Pに先行すると定義されています。

 同様にAは、もしAが、次に続く通常領域としてのきょうだ領域がなく、Pを含んでいない状態にある先祖領域もない場合にはAは、Pに後続すると定義されています。

 与えられたフォーマット型というのは、フローの中にある次のオブジェクト型が横断的に適用される事前指定の範囲内にある最初のオブジェクト型に続き、与えられたオブジェクト型と、生成され戻される通常領域の子孫ではないものを指します。

 解除条件は、[ break-before ]条件か[ break-after ]条件のいずれかです。

 [ break-before ]条件は、 生成され、オブジェクト型によって返された最初の領域が文脈領域[ context-area ]に先行しているという事を満たす条件です。

 [ break-after ]条件は、フローの中にある次のオブジェクト型に依存します。次のオブジェクト型が存在しないかまたは、最初の通常領域が生成され、そのオブジェクト型が文脈領域[ context-area ]に先行する事によって返されるという条件を満たします。

 解除条件は、[ break-before ]か[ break-after ]プロパティによって制限されます。

 これらの特性を持つページの洗練された値は、 下記のような[ page-reference-areas ]の現れる文脈を持つ解除条件に制限されます。

 [ even-page ](偶数ページ)や[ odd-page ](奇数ページ)の値は、偶数番号付けされた[ even-numbered ]ページ参照領域[ page-reference-areas ]や奇数番号付けされた[ odd-numbered ]ページ参照領域[ page-reference-areas ]を持つ解除条件に制限され、それぞれの列の値は、列領域[ column-areas ]の文脈を持つ解除条件によって制限され、[ break-before ]や[ break-after ]特性にある自動で付与される値は、解除条件のない制限です。

 保持条件は、[ keep-with-previous ]条件か[ keep-with-next ]条件、[ keep-together ]条件のいずれかです。

 オブジェクト上の[ keep-with-previous ]条件は、文脈領域[ context-area ]内で先行しないオブジェクト型によって最初の領域が生成され、返される事、または、領域ツリーに横断的に適用される[ post-order ]にある優先されない領域である事を満たす条件です。

 [ keep-with-next ]条件は、最後の生成された領域が文脈領域[ context-area ]内で後続しないオブジェクト型によって返される事、または、領域ツリーの横断的に適用される事前指定[ pre-order ]にある後続しない領域である場合の条件です。

 [ keep-together ]条件は、全ての領域が生成され、単独の文脈領域[ context-area ]の子孫であるオブジェクト型によって返される場合の条件です。

 保持条件は、[ keep-with-previous ]プロパティ、[ keep-with-next ]プロパティ、[ keep-together ]プロパティを[ within-page ]、[ within-column ]、[ within-line ](ページ内、列内、行内)によって制限します。

 それぞれの構成の洗練された値は、制限となる保持条件の強さを規定しており、数が大きいほど強くなり、[ always ]は他のどの値よりも強力になります。

 [ auto ]という値を持つ構成は、保持条件に制限されません。

 [ within-page ]構成は、ページ参照領域[ page-reference-areas ]に現れる文脈を持つ保持条件を制限し、[ within-column ]は、列領域[ column-areas ]内に現れる文脈を持つ保持条件を制限し、[ within-line ]は、行領域[ line-areas ]内に現れる文脈を持つ保持条件を制限します。

 領域ツリーは、すべての解除条件制限に制約されます。

 互いの保持条件は、解除条件によるものか、自身の条件を上回る強い保持条件である場合を除き、条件を常に満たさなければいけません。

 もし、全てが同等の強さを持つ保持条件がある場合には、最大限満たされるように、その強さの条件のサブセットは、全ての解除条件とより強力な保持条件のサブセットを満たさなければいけません。


 4.9 レンダリングモデル
  4.9.1 幾何学
  4.9.2 「Viewport」 幾何学
  4.9.3 視覚化
  4.9.4 [ Border ], [ Padding ], [ Background ]
  4.9.5 固有の特色
  4.9.6 階層と固有の特色の不一致

【4.9 レンダリングモデル】

 このセクションは領域ツリーと視覚的にレンダリングされた出力間の関係を明快にします。

 領域が生成される際には以下の3つの特色があります。


  1. 領域背景
  2. 領域における固有の特色(象形文字や画像や装飾)
  3. 領域線

 領域ツリーは、領域ツリー中に一致する領域を持ち、中間出力上にある特色によって描写されます。

 このセクションは、そのような特色の幾何学的な場所とどのように特色が解決されるかを示します。

【4.9.1 幾何学】

 それぞれの領域は、特有の場所に描画されます。

 オブジェクト型は、例えば、内容矩形のleft、right、top、bottomなどの各エッジなどオブジェクトの場所に関係する固有の特色の場所を示します。

 このセクションは、どのように領域の場所が決まり、固有の特色の場所を決めるかを記します。

 お互いのページは、[ page-viewport-area ]を持ち、これらは、中間出力と同サイズで一致します。

 [ page-reference-area ](ページ参照領域)は、「4.9.2 Viewport幾何学」セクション下に記述されている通り[ page-viewport-area ]によるオフセット値です。

 [ xsl-fixed ]という[ area-class ](領域クラス)を持つツリーにあるすべての領域は、内容矩形の[ left-edge ]、[ right-edge ]、[ top-edge ]、[ bottom-edge ]によって配置され、これらのエッジは、[ left-position ]、[ right-position ]、[ top-position ]、[ bottom-position ]特性により示される距離によって先祖の[ page-viewport-area ]の内容矩形の内側のオフセット値です。

 ツリー中にある領域は、[ viewport-area ]の子を持ち、その子領域は、「4.9.2 Viewport幾何学」セクションに記述されている通りに描画されます。

 ツリー中の他の領域は、内容矩形の[ left-edge ]、[ right-edge ]、[ top-edge ]、[ bottom-edge ]によって配置され、その内容矩形は、[ left-position ]、[ right-position ]、[ top-position ]、[ bottom-position ]特性により示される距離による最も近い先祖にあたる参照領域[ reference-area ]の内容矩形の内側のオフセット値です。

 これらは、その領域が関係する[ relative-position ](relative-position of relative)を持つ場合には、[ top-offset ]と[ left-offset ]特性の値によって下と左に移動されます。

【4.9.2 「Viewport」 幾何学】

 [ viewport-area ]の子を持つ参照領域[ reference-area ]は、内容矩形の[ start-edge ]と[ end-edge ]、親の[ viewport-area ]である内容矩形の[ start-edge ]と[ end-edge ]と並列です。

 内容矩形の[ start-edge ]は、[ inline-scroll-amount ](インラインスクロール量)による親の[ viewport-area ]である内容矩形の[ start-edge ]からのオフセット値で、内容矩形の[ before-edge ]は、[ block-scroll-amount ](ブロックスクロール量)による親の[ viewport-area ]である内容矩形の[ before-edge ]からのオフセット値です。

 もし、[ reference-area ](参照領域)の[ block-progression-dimension ]が[ viewport-area ]よりも大きく、[ reference-area ](参照領域)の[ overflow ](オーバーフロー)特性が[ scroll ]であって、ユーザーエージェントによって提供されていれば、[ inline-scroll-amount ](インラインスクロール量)と[ block-scroll-amount ](ブロックスクロール量)は、スクロールメカニズムによって決められますが、もしそうでなければ、両方ともゼロです。

【4.9.3 視覚化】

 特色の視覚化は、特色の場所に依存し、領域の視覚化は、先祖にあたる[ viewport-area ]の[ overflow ]に依存します。

 もし、ある領域が[ hidden ]という視覚化の値を持っていれば、その領域は特色なく生成されます。

 もし、ある領域が、[ overflow ]属性が[ hidden ]かまたは、環境が動的ではなく、[ overflow ]属性が[ scroll ]であれば、その領域は[ clipping rectangle ]として決められ、その領域の[ clip ]特性の値によって決定される矩形になると定義されており、その子孫領域のひとつによって生成された特色というのは、[ clipping rectangle ]の外側にある特色の一部が現れない事を示します。

【4.9.4 [ Border ], [ Padding ], [ Background ]】

 [ border-rectangle ]と[ padding-rectangle ]は、[ border-before-width ]など一般的なpadding幅、border幅に値によって内容矩形との関係を決められます。

 いくつかの領域は、[ viewport-area ]の子を持たず、[ border ]は、通常の線のカラー・色とスタイル特性と一致する[ border-rectangle ]と[ padding-rectangle ]の間に描画されます。

 この時、[ viewport-area ]の子に対しては[ border ]は描画されません。

 [ viewport-area ]であり[ reference-area ]である領域の一部ではないある領域は、背景が描画されます。

 [ viewport-area ]であり[ reference-area ]である領域の中の[ viewport-area ]または、[ reference-area ]のいずれかである領域は、もし、[ background-attachment ]が[ scroll ]という値に洗練され、[ reference-area ]の[ block-progression-dimension ]が、[ viewport-area ]よりも大きい場合、背景は、[ viewport-area ]ではなく、[ reference-area ]上に描画され、もう一方は、[ reference-area ]ではなく、[ viewport-area ]に描画されます。

 背景は、[ background-image ][ background-color ][ background-repeat ][ background-position-vertical ][ background-position-horizontal ]特性を持ち、一致する[ padding-rectangle ]に描画されます。

【4.9.5 固有の特色】

 オブジェクト型のそれぞれのクラスというのは、その生成された領域が持つ固有の特色が、オブジェクト型説明の仕様となっています。

 例えば、[ fo:character ]オブジェクトは、象形領域を生成し、領域のフォント特性と[ glyph ]特性と[ blink ]特性を持ち、一致する領域内に象形を描く事によって全体として描画されます。

 追加仕様としては、様々な[ score ]と[ score-color ]特性など他の特性が他の固有の特性を明記します。

 [ underline-score ]、[ overline-score ]、[ through-score ]といった[ score ]特性の場合には、厚さと位置は、影響範囲ににある[ nominal-font ]によって明記されます(フォントがこれらの量の仕様が適用されない場合には、その時々の状況に依存します。)。

【4.9.6 階層と固有の特色の不一致】

 特色は以下の記述のように階層化され、他の特色の下方にある特色の指定の一部として定義されます。

 相反する2つの特色が定義され、もし、それらが中間出力上同じ位置を示した場合、2つの特色は干渉し、一方は他方の下位に位置し、下位の指定は中間出力上の影響範囲になく、2つの特色は両方ともに提供されます。

 同じ領域内で生成される特色は、次のように階層化されます。

 領域背景が下位領域の固有の特色であり、その固有の特色が下位の[ border ]となります。

 領域内の固有の特色間の階層化は、領域の生成されるオブジェクト型とプロパティの取り決めによって定義されます。

 例えば、象形領域は[ text-decoration ]用に生成される下位の特色によって描かれます。

 領域として積み重ねられた階層は、文脈と[ z-index ]値の積み重ねによって定義されます。

 Aという領域の階層は、A'の先祖または自身であるAという領域とBにあるB'が、同一の文脈と[ z-index ]値の階層を持ち、A'の[ z-index ]値がB'よりも小さい時、Bという領域よりも小さいと定義されます。

 2つあれば、どちらか一方の階層は、同一の階層を持って定義された他の領域よりも小さいという事です。

 もし、AとBが領域で、Aという階層がBという階層よりも小さい時、Aによって生成されたすべての特色は、Bによって生成されたすべての特色の下位になります。

 もし、AとBが同一の階層を持つ領域で、AとBの背景は、AとBによって生成された全ての他の特色の下位になります。

 もっといえば、Aが、まだ同じ階層にないBという領域の先祖にあたる領域であれば、Aの背景は、Bの全ての領域の下位になり、Bという領域の全ては、Aという固有の領域または境界線の下位に位置します。

 つまり、階層は、上に上にと積み重ねられるので最初にある先祖のAという領域の背景というのはAという領域そのものであり、その上に子孫領域を重ねていくと、元からあったAという領域自体は、状態としては、結果的に子孫領域の下に置かれた状態になりますが、生成される順としてはAが親など先祖にあたり、子孫である領域は、その下にぶら下がる階層となるという事です。

 もし、AとBが同一の階層を持ち、一方が他方の先祖領域であれば、背景を持たないという特色を持つAが背景を持たないという特色を持つBがあれば、背景が干渉するというエラーが生じます。

 このように最初の領域の特色が他の領域の下位にある場合には、横断的な事前指定にある優先順によって復帰される場合もあります。


 4.10 領域木(ツリー構造)サンプル

【4.10 領域木(ツリー構造)サンプル】

 翻訳対象W3Cドキュメント内領域ツリーサンプル参照。

>> 【XSL 1.1】 5. プロパティ洗練と解決 / Property Refinement / Resolution


ホーム前へ次へ