6. DSSSL概要 一般化マーク付けの鍵となる特徴は,文書に関連するフォーマット処理及び文書に付属するその他の処理情報と,文書に埋込んだ共通タグとを分離していることにある。 どの一般化マーク付け方式においても,処理指定をSGMLマークに関連付けする方式が存在する。この方式は,情報を要素の特定インスタンスに関連付けるだけでなく,一般の要素型,すなわちクラスにも関連付けることができなければならない。DSSSLの主要な目的は,SGML文書又はSGML文書の一部の論理マークに処理情報を関連付けするための,標準化した枠組み及び標準化した方式を提供することにある。 DSSSLは,要素の階層として構造化した文書と共に用いることを意図している。以降では,DSSSLの概念を詳細に記述するためにSGMLの用語を用いる。 DSSSLは,フォーマット処理及び他の処理指定をこれらの論理要素に関連付け可能とし,その結果提示のためのフォーマット済み文書を生成できる。例えば,設計者は,すべての章が新規の表ページで始まり,表はページ幅規則に従うと同時にページの上又は下だけに位置付けると指定してよい。DSSSLの木構造変換処理の際に,フォーマット処理情報を出力グローブに追加してよい。この情報は,SGML属性として表現してよい。これらの情報は,さらにフォーマット処理によって特定の値をもつ特質に変換されてよい。 6.1 標準化の領域 DSSSLは,次の四つの異なる標準化の領域を提供する。 a) 1個以上のSGML文書を0個以上のSGML文書に変換するための,言語及び処理モデル。 この言語を変換言語と呼ぶ。この変換は,変換指定を用いて制御する。変換指定は,関連のリストを含む。一つの関連には,照会式,変換式及びオプションの優先順位式の最大三つの部分からなる。機能的には,新規の構造の作成,既存の構造の複製,既存の構造の並べ変え及びグループ変えを,関連指定によって利用者が指定可能にする。 b) SGML文書にフォーマット処理特質の適用を指定するための言語。 フォーマット処理特質及び他のフォーマット関連処理特質をSGML文書に適用する処理を,フォーマット処理と呼ぶ。この処理は,スタイル指定によって制御する。スタイル指定は,構築規則の列を含む。構築規則には,いくつかの種類がある。詳細は,12.4.1 を参照のこと。 備考 DSSSLスタイル言語は,処理自体を規定せず,処理の部分を制御する指定言語の意味及び形式だけを標準化していることに注意されたい。残りのフォーマット処理機能・行分割・段分割・ページ分割・他の様相スペースの配分などは標準化せず,フォーマタの制御に任せている。 c) SGML文書の部分を識別するために用いる,SDQLと呼ぶ照会言語。 SDQLは,DSSSL変換言語及びDSSSLスタイル言語の両方の部分となっている。SDQLは,SGML文書の階層構造を渡り歩き,処理を行なうSGMLマーク及び内容の重要な部分を識別するために用いる。完全仕様のSDQLに加えて,この規格は中核照会言語(core query language)と呼ぶSDQLの部分集合を規定する。中核照会言語に関する詳細は,10.2.4を参照のこと。完全仕様のSDQLに関する詳細は,10.を参照のこと。 d) 式言語 DSSSL式言語は,DSSSL変換言語及びDSSSLスタイル言語の両方の部分となっている。DSSSL式言語は,オブジェクトの作成及び操作のために用いる。完全仕様の式言語に加えて,この規格は中核式言語(core expression lanugage)と呼ぶ式言語の部分集合を規定する。中核式言語の詳細は,8.6を参照のこと。DSSSL式言語は,IEEE Scheme規格及び"Schemeに関する報告 改訂4版(R4RS)"で定義するプログラム言語Schemeに基づく。DSSSLは,関数的で,副作用のないSchemeの部分集合を用いる。DSSSL式言語の完全な記述については,8.を参照のこと。 6.2 概念モデル DSSSL概念モデルは,次の二つの異なる処理からなる。 (1) 変換処理 (2) フォーマット処理 これら二つの処理は組合わせて使用してよく,単独で使用してもよい。 DSSSL概念モデルを,図1に示す。
影付きの領域は,DSSSLによって標準化する処理モデルの部分を示す。 6.3 DSSSL言語 各DSSSL処理は,適切なDSSSL言語によって制御する。変換指定は,変換処理を制御する。同様に,スタイル指定はフォーマット処理の様々な部分を制御する。 6.3.1 変換言語 変換処理は,変換指定及びSGML文書型定義の制御のもとで,SGML文書を他のSGML文書に変換する。変換処理の結果のSGML文書は,その後のフォーマット処理の入力として用いてよい。 変換処理において,利用者は対応付け又は変換と呼ぶ処理の対象となる,SGML文書の部分を識別する。指定に合致する内容及び構造をもつSGML文書の部分の各ノードについて,指定は新しく作成する構造を記述し,それに基づいて変換を達成する。 変換処理で実行するすべての操作は,後のフォーマット処理とは独立している。変換処理の際には,次の操作を含んでよい。 (1) 構造の組合わせ SGML構造を再配置及び再分類して,全く新しい構造を作成する。例えば,入力DTDに従い,脚注が脚注参照とともに本文中にある場合に,文書のフォーマットの際に脚注を集めて,章の終わりに配置してよい。 (2) 他の要素に対して利用者指定可能の関係をもつ,新しい要素の作成。 新しい構造又は属性を作成してよい。例えば,3ポイント規則などの特殊なフォーマット記述をSGML属性として表現し,視覚的な効果を得るために表の5行ごとに関連付けしてよい。 (3) 特定の内容列に対する,新しい記述の関連付け。 入力中の要素列が,別個のフォーマット処理記述との関連の契機となる場合がある。例えば,警告に続く段落は,他の段落とは区別して提示すると要求してよい。 (4) 特定の内容構成要素に対する,新しい記述の関連付け。 関連指定を,入力文書中で特にマーク付けされていない特定のテキスト文字列に,特別なフォーマット情報を関連付けるために用いてよい。一例として,文字列モISOモをISOのロゴに置き換えるなどの処理がある。 DSSSLは,フォーマット情報を前述の任意の組合わせに基づいて関連付けできる。SGML文書の構造及び内容の両方を変更できる。 変換言語は,前述の例で示すとおりフォーマット処理を容易にするために用いることができ,時間の経過に伴なって変更されたDTDに基づいて作成された文書を拡張又は変更するために用いることができる。公開されたDTDを用いた文書を,独自又は社内のDTDに基づく文書への変換するためにも用いてもよい。 変換言語の重要性及びその使用の妥当性は,SGML応用,DSSSL応用,フォーマタの能力及び実装に依存して変化する。多くのフォーマティング応用は,変換処理を全く必要としない。 6.3.1.1 変換処理の構成要素 構成要素となる処理を次に示す。 (1) グローブ構築処理系 この処理の入力は,SGML文書とする。SGML文書又は副文書は,構文解析の結果,グローブと呼ぶノードの集合で表現される。グローブは,要素木に類似しているが,属性値の部分木などの他の部分木を含んでよい。グローブ内での関係は,特性に基づいて表現する。グローブ及びSGML特性定義に関する詳細は,9.を参照のこと。 (2) 変換子 変換子に対する入力は,変換指定及びグローブ構築処理系の段階で作成した入力文書グローブから成る。 変換指定は,関連指定の集合からなる。各関連指定は,入力文書内の類似したオブジェクトから,結果グローブのオブジェクトへの変換を指定する。この変換の重要な点は,オブジェクトが出力インスタンスの明示的な位置だけに対応可能ではなく,他の入力オブジェクトの変換結果を参照点として用いた位置にも対応できることにある。 変換子の出力は,結果グローブとなる。変換子は,複数のSGML文書を処理の入力として動作してよく,同様に複数のSGML文書を結果としてよい。変換子の詳細は,11.を参照のこと。 (3) SGML出力処理 SGML出力処理は,交換・検証・フォーマット処理系への入力を目的として,SGML文書に転換するグローブを生成する。SGML出力処理は,この目的で用いる。SGML出力処理の出力は,適正なSGML文書とする。SGML出力処理の詳細は,11.4を参照のこと。 変換処理のモデルを,図2に示す。影付きの部分は,この規格が規定するDSSSL指定の構成要素を示す。
6.3.1.2 符号化文字,文字及びグリフ識別子のモデル このモデルには,次の三つの構成要素が存在する。 (1) SGML入力文書中の符号化文字 (2) グローブ内の文字 (3) 最終結果文書のグリフ識別子 SGML入力文書中の符号化文字は,通常,ISO 8859-1(Latin-1) などの特定の文字符号化規格に基づいて符号化される。SGML宣言は,記述形式で指定した文字集合又は一つ以上の標準化されているか若しくは少なくとも登録されている符号化文字集合のコードポイントに関連して指定した文字集合を含む。しかし,私用の符号化文字集合を参照することも,単に符号化文字に最小化リテラルを用いて記述を与えることも許容している。 文字符号化方式は,数多く存在する。文字符号化のいくつかは,送りのない文字を基底文字と共に用いて,ダイアクリティカル記号付きの文字を表わす。さらに,SGMLはキー入力できない文字を表わすために,実体参照を許容している。例えば,アキュートアクセントのついた小文字のeは,同じ文書中で次の四つの形式を用いて表現してよい。 (1) 単一の文字 (2) 送りのないダイアクリティカルマーク及びe(2文字) (3) e及び組み合わせダイアクリティカルマーク(2文字) (4) 実体参照é この多様性は,正規表現を用いた検索において問題を起こす。 DSSSLにおいては,入力文字を文字列に正規化し,それぞれが特定の意味を表す。この方式では,もともとの文字が,一つの文字,特定の文字集合内の複数の文字又は実体参照のどの符号化を使っているかに依存しない。各DSSSL指定は,単一の文字のレパートリを定義する。文字レパートリは,DSSSL指定,入力グローブ及び流し込みオブジェクト木で用いるすべての文字を含む。したがって,それらの文字だけを使用してよい。各文字の宣言は,語の区切りを示す文字などのフォーマット処理に意味のある特性の集合も含む。 DSSSL指定は,入力文書とは異なる符号化文字集合を用いて符号化されてもよく,DSSSL木で用いた文字と同じレパートリの文字の並びに翻訳される。要素名の合致などすべての比較は,もとのSGML文書の符号化文字ではなく,この翻訳後の文字の比較で行う。 入力グローブの文字の並びは,文字から文字への対応の制御のもとで,変換処理によって他の文字の並びに変更される場合がある。この技法は,典型的には入力文書の一部が,字句変換したテキストを含む場合に用いる。 フォーマタへの入力グローブ内の文字は,フォーマット処理の間にグリフ識別子に変換される。この変換は文字からグリフへの対応及びリガチャからグリフへの対応によって制御され,一つ以上の文字を一つ以上のグリフ識別子に対応する。使用する対応は文書に固定したものではなく,フォーマット特質として表現でき,領域又は入力グローブの一部に対して指定してよい。リガチャは,一つ以上の文字を一つのグリフに対応させることによって指定する。 付加的な特性によって,使用するフォントを指定する。この情報は,グリフ識別子と共に用いて,可視化に用いる実際の形状を選択する。ハイフネーション点は,文字に基づいて決定する。しかし,幅の計算は,実際に可視化する形状のメトリク情報,つまりグリフに基づく。 6.3.2 スタイル言語 この規格において"フォーマット処理"という言葉は,次の四つ処理の任意の組合わせを意味する。 (1) 入力文書内容に表示スタイルを適用し,それらの表示媒体上における位置を決定する処理。 (2) 入力文書の位置と関連して行う,結果文書内の内容の選択及び並べ変え。 (3) 新しい素材の生成などの,入力文書には明示的には存在しない素材の取り込み。 (4) 入力文書にある素材の出力文書からの除去。 DSSSLにおいては,フォーマット済み文書のスタイルを,フォーマット特質を用いて定義する。フォーマット特質は,流し込みオブジェクト木と呼ぶ中間的な木構造に付加する。DSSSLは,スタイル指定に十分な柔軟性を備えており,行分割・ページ分割・スペース配分アルゴリズムなど,特定のフォーマット処理系で用いる組版又はフォーマティングアルゴリズムの集合には束縛されていない。これらのフォーマット処理の様々な部分は,各実装に固有である。この規格では,行分割規則及びページ分割規則は,制約及び他のフォーマット処理系を支配するフォーマット処理特質との関連を用いて表現してよい。フォーマタの出力は,この規格では定義しない。それは,印刷又は可視化に適したフォーマット済み文書となる。 フォーマット処理は,スタイル指定を用いる。スタイル指定は,構築規則,ページモデル定義,段集合モデル定義,他の一般の宣言及び定義並びに応用定義の宣言及び定義を含む。 6.3.2.1 フォーマット処理の構成要素 フォーマット処理は,概念的には次の五つの処理から構成される。 (1) SGML文書からグローブを構築する。 (2) 構築規則を入力グローブ内のオブジェクトに適用して,流し込みオブジェクト木を作成する。 (3) ページ及び段の幾何構成を,ページモデル及び段集合モデルを参照しながら,ページ列流し込みオブジェクト(page-sequence)及び段集合流し込みオブジェクト(column-set)の特質によって定義する。 (4) 流し込みオブジェクトクラスの意味及びその流し込みオブジェクトに関連する特質の値が指定する規則に基づいて,組処理及びレイアウト処理を行う。各流し込みオブジェクトは,流し込みオブジェクトクラスのインスタンスであって,フォーマットによって流し込みオブジェクト木の上における親が位置付けを行い,明示的な大きさをもつ領域列を生成する。 6.3.2.2 グローブ構築処理 フォーマット処理は,変換処理と同じグローブ構築処理を用いる。グローブ構築処理は,入力SGML文書をグローブに,つまり階層的に構造化したオブジェクトの集合に変換する。グローブの詳細は,9.を参照のこと。 6.3.2.3 流し込みオブジェクト木 グローブは,構築規則を用いてさらに処理され,適切なフォーマット処理特質及びページレイアウト特質をもった流し込みオブジェクトからなる木を生成する。構築指定の形式的定義は,12.4.1を参照のこと。原子流し込みオブジェクト以外の各流し込みオブジェクトは,一つ以上の流し込みオブジェクト列を子にもつ。各子の流し込みオブジェクト列は,その流し込みオブジェクトのポートと呼ぶ点に付属する。ポートは,主要ポート又は名前付きポートのどちらかとなる。 流し込みオブジェクトクラスは,ある分類の流し込みオブジェクトに適用するフォーマット特質の集合を定義する。各流し込みオブジェクトクラスは,ポート名集合も定義する。子流し込みオブジェクトのクラスは,付属する流し込みオブジェクトのクラス及び付属するポートの名前によって決定するクラスに適合していなければならない。特定のポートに付属した流し込みオブジェクトは,順序付けられている。しかし,同じ流し込みオブジェクトであっても,異なるポートに付属する流し込みオブジェクトの場合,それらのオブジェクト間では,順序は定義されない。 流し込みオブジェクト木の生成処理は,次の二つからなる。 (1) フォーマット特質を,各流し込みオブジェクトに関連付ける。 (2) グローブ内のデータ文字を示すノードを,文字流し込みオブジェクトに変換する。各文字流し込みオブジェクトは,グリフ選択と,フォントファミリ・フォント重みなどのスタイル指定とを制御する特質をもっている。 流し込みオブジェクト木の構築の際,特定のフォーマット特質をもつSGML文書の一部及び同じ段又はページに流し込むために一緒に扱うことのできるSGML文書の一部の識別などのために,SDQLを用いてよい。共に流し込む内容は,流し込み木内の親のもつ同一のポート内の流し込みオブジェクト列に配置する。 備考 例えば,文書がいくつかの標準的な段落及び脚注段落からなる場合に,脚注段落はまとめられて脚注を表わす親流し込みオブジェクトのポートの内容となり得る。同様に,普通の段落はまとめられ,段列を表わす流し込みオブジェクトのポートの内容となり得る。 6.3.2.4 流し込みオブジェクトクラス 流し込みオブジェクトクラス及びそれに適用する特質は,文書内容のフォーマット上の外見及び振る舞いを定義する。 次の流し込みオブジェクトクラスを,この規格で定義する。 (1) 列流し込みオブジェクトクラス(sequence) (2) 行外グループ流し込みオブジェクトクラス(display-group) (3) 単純ページ列流し込みオブジェクトクラス(simple-page-sequence) (4) ページ列流し込みオブジェクトクラス(page-sequence) (5) 段集合列流し込みオブジェクトクラス(column-set-sequence) (6) 段落流し込みオブジェクトクラス(paragraph) (7) 段落区切り流し込みオブジェクトクラス(paragraph-break) (8) 行フィールド流し込みオブジェクトクラス(line-field) (9) 側線流し込みオブジェクトクラス(sideline) (10) 錨流し込みオブジェクトクラス(anchor) (11) 文字流し込みオブジェクトクラス(character) (12) リーダ罫流し込みオブジェクトクラス(leader) (13) 埋込みテキスト流し込みオブジェクトクラス(embedded-text) (14) 罫線流し込みオブジェクトクラス(rule) (15) 外部グラフィック流し込みオブジェクトクラス(external-graphic) (16) 取り込みコンテナ流し込みオブジェクトクラス(included-container) (17) 傍線・抹消線流し込みオブジェクト流し込みオブジェクトクラス(score) (18) 囲み罫流し込みオブジェクトクラス(box) (19) 横並び流し込みオブジェクトクラス(side-by-side) (20) グリフ注釈流し込みオブジェクトクラス(glyph-annotation) (21) 揃え点流し込みオブジェクトクラス(alignement-point) (22) 揃え段流し込みオブジェクトクラス(aligned-column) (23) 複数行行内注釈流し込みオブジェクトクラス(multi-line-inline-note) (24) 強調マーク流し込みオブジェクトクラス(emphasizing-mark) (25) 表用流し込みオブジェクトクラスグループ (a) 表流し込みオブジェクトクラス(table) (b) 表部分流し込みオブジェクトクラス(table-part) (c) 表列流し込みオブジェクトクラス(table-column) (d) 表行流し込みオブジェクトクラス(table-row) (e) 表セル流し込みオブジェクトクラス(table-cell) (f) 表罫線流し込みオブジェクトクラス(table-border) (26) オンライン表示用流し込みオブジェクトクラスグループ (a) スクロール流し込みオブジェクト(scroll) (b) 複数モード流し込みオブジェクトクラス(multi-mode) (c) リンク流し込みオブジェクト(link) (d) 余注流し込みオブジェクト(marginalia) さらに,DSSSL応用は,独自の流し込みオブジェクトクラス集合を定義してよく,同様に応用独自の流し込みオブジェクトクラス又はDSSSLが定義する流し込みオブジェクトクラスに適用する応用独自の特質を定義してよい。 6.3.2.5 領域 流し込みオブジェクトのフォーマット結果は,領域列となる。領域は,四角形であって,固定の幅・高さをもつ。領域には,行内,行外の二つの種別がある。行内領域は行の一部となり,行外領域は直接には行の一部とならない。 どちらの種別の領域も,流し込みの処理によって位置決めされる。流し込み処理の正確な性質は,領域の種別によって異なる。領域の流し込みについての詳細は,12.3を参照のこと。 行外領域は,領域コンテナに流し込むことによって位置決めする。領域コンテナの大きさは,流し込み方向に成長してよいが,他の方向には固定されている。 6.3.2.6 ページ及び段幾何構成 DSSSLにおけるページレイアウトは,ページ列流し込みオブジェクト上の特質page-model及び段集合列流し込みオブジェクト上の特質column-setを用いて指定する。 ページ列流し込みオブジェクトは,フォーマットの結果として,ページ領域列を生成する。ページモデルは,ページ内の領域階層の可能な構造と位置決めを指定する。構造には,ページの幅及び高さ,並びにページ区画の指定を含んでいる。ページ区画は,固定の大きさをもつ領域コンテナであって,そこにフォーマット済み内容を,ページ区画流し込み対応(page region flow map)の指定どおりに配置する。ページ区画流し込み対応は,ポート名とページ区画との結合を行う。各ページ区画は,ヘッダ指定及びフッタ指定をもってよい。ページ列流し込みオブジェクト及び関連するページモデルの詳細は,12.6.4及び12.6.4.1を参照のこと。 段集合列流し込みオブジェクトは,フォーマットの結果段集合領域列を生成する。段集合領域は,平行な段の集合からなる。各段集合領域の構造及び位置決めは,その段集合が従う段集合モデルによって制御する。段集合モデルは,各段集合について領域の可能な階層構造を指定する。段集合は,入れ子になってよい。段集合領域は,流し込み方向に平行な方向に,幾何的にいくつかの段に分割される。各段集合と関連して,流し込み方向において他の領域との相対位置を制約する区域が存在する場合がある。許容される区域として,区域top-float,区域text,区域bottom-float及び区域footnoteがある。 段集合モデルは,段集合の可能な構造及び位置決めの指定を提供する。段集合モデルは,段部分集合,流し込み方向指定,幅指定,高さ指定などからなる。段部分集合指定は,段部分集合流し込み対応を含む。段部分集合流し込み対応は,指定した区域に内容を流し込むポートを指示する。段集合モデルは,段抜きの概念にも対応している。段集合列流し込みオブジェクトの詳細は12.6.5を,段集合モデルの詳細は12.6.5.1を参照のこと。 6.3.2.7 式言語 フォーマット処理は,8.6で定義する中核式言語を用いるか又はオプション機能として8.に記載の完全仕様の式言語を用いる。 図3に,フォーマット処理のモデルを示す。
6.3.2.8 符号化文字,文字及びグリフ識別子のモデル フォーマット処理は,符号化文字,文字及びグリフ識別子に関して,6.3.1.2 に示すモデルを使用する。