7. DSSSL指定
DSSSL指定はSGML文書であって,DSSSLの文書体系に適合する。DSSSL文書体系は,ISO/IEC 10744の体系形式定義要求に適合する文書体系となっている。
SGML文書はDSSSL文書体系への適合していることを,SGML宣言のAPPINFOパラメタにArcBaseトークンを含め,DTDに次の記述をいれることで宣言してよい。
注: この規格の7.及び9.の記述には,SGML文書の一部が含まれている。理解を容易にするために,HyTimeの注釈規約に基づいた解釈を行う可能性のない注釈部分は,日本語に訳してある。
7.1 DSSSL文書体系
DSSSL文書体系を,次のメタDTDで定義する。
要素型形式dsssl-specificationは,一つ以上の処理指定要素型形式を含む。要素dsssl-specification内の宣言要素は,DSSSL指定要素内のすべての処理指定要素に適用する。
処理指定要素型形式には,二つの種別がある。要素型形式transformation-specificationは,変換処理の指定を行なう。要素型形式style-specificationは,フォーマット処理の指定を行なう。これらの要素型形式のインスタンスを処理指定と呼ぶ。各処理指定要素はそれ自体だけで指定を構成してよく,同じ型の別の処理指定要素を使用してもよい。処理指定要素は,SGML一意識別子を用いて識別する。あるSGML文書中の処理指定要素は,要素型形式external-specificationを用いて局所的な一意識別子を割当てることによって,他のSGML文書中の処理指定要素を使用できる。処理指定要素と,それが使用する処理指定要素とを合わせて,処理指定と呼ぶ。
利用者は,SGML文書の処理を処理指定要素を識別することによって指定する。これらの要素を識別する方法は,処理系依存とする。
備考 処理系は,文書をシステム識別子によって識別し,オプションの一意識別子によって文書内の要素を識別して,処理指定要素を識別してよい。一意識別子が全く指定されていない場合は,その文書内の最初の処理指定要素を用いる。
各処理指定要素は,本体要素と呼ぶ要素を含んでよい。本体要素は,処理に固有な記法に従う処理指定を内容とする。要素型形式transformation-specificationの場合,この記法はDSSSL変換言語であって,要素型形式style-specificationの場合,この記法はDSSSLスタイル言語とする。さらに各処理指定要素は,その記法の構文解析に必要な情報をもつ宣言要素を含んでよい。
処理指定要素列で記述した処理指定を,指定部列と見なす。各指定部は,要素型形式で表現した複数の宣言及び指定部の本体と呼ぶ処理固有記法を用いた一つの指定からなる。処理指定要素列を解析した結果の指定部列は,指定要素の順にその内部の指定部を並べた指定部列となる。一つの処理指定要素を解析した指定部列は,処理指定要素の内容の指定部に続き,その処理指定要素が使用する処理指定要素列を解析した指定部列からなる。最初の指定部の宣言は,処理指定要素内及びその指定要素を含む要素dsssl-specification内に含まれる宣言からなる。最初の指定部の本体は,処理指定要素に含まれる本体要素を結合したものとなる。
処理指定は,最初にすべての指定部の宣言を処理し,その後に本体を順に処理する。一つの指定部内では,競合する宣言があってはならない。二つの異なる指定部内の宣言が競合する場合,先行する指定部の宣言を優先する。同様に,一つの指定部の本体内では,競合する指定が存在してはならない。しかし,異なる指定部に属する二つの指定が競合する場合,先行する指定部の指定を優先する。
処理指定の宣言は,指定部の本体及びすべての入力SGML文書内に出現するすべてのビット組みが,どのように文字に変換されるかを指定する。宣言は,任意の順に出現してよい。特に,宣言前に文字名を使用してよい。
宣言又は本体要素内で使用する各文字名は,要素型形式standard-chars,要素型形式other-chars又は要素型形式char-repertoireのいずれかを用いて宣言しなければならない。
要素型形式char-repertoire,要素型形式features及び要素型形式grove-plan以外のすべての宣言要素型形式は,機能charsetを必要とする。
7.1.1 機能
要素型形式featureは,指定で用いる機能の宣言を行なう。処理指定は,使用するすべての機能を宣言しなければならない。
この要素の内容は,機能名のリストとする。
この宣言の効果は,累積する。
7.1.2 SGMLグローブ設計
要素型形式sgml-grove-planは,SGML特性集合のためにグローブ設計に取り込む追加のモジュール名を列挙する。属性modaddは,追加するモジュールを指定する。処理系は,次の三つのモジュールを自動的に取り込む。
(1) baseabs(基本抽象モジュール)
(2) prlgabs0(前書き抽象モジュール0)
(3) instabs(インスタンス抽象モジュール)
変換言語では,さらにモジュールprlgabs1(前書き抽象モジュール1)を自動的に取り込む。
この宣言の効果は,累積する。
7.1.3 文字レパートリ
要素型形式char-repertoireは,属性nameによって与えられる公開識別子をもつ文字レパートリを指定において使用すると宣言する。
要素char-repertoireは,要素型形式baseset-encoding,要素型形式literal-described-char,要素型形式add-name-chars,要素型形式add-separator-chars,要素型形式standard-chars,要素型形式other-chars及び要素型形式map-sdata-entityのインスタンス,並びに言語形式character-property-declaration及び言語形式added-char-properties-declarationのインスタンスの列に等しい。
7.1.4 標準文字
要素型形式standard-charsは,ISO/IEC 10646-1又はISO/IEC 6429で定義する文字集合に対応する文字レパートリ内の文字の名前を宣言する。ISO/IEC 10646-1又はISO/IEC 6429内の文字は,それぞれの対応する文字集合内の符号で識別し,それを国際符号と呼ぶ。
要素の内容は,複数の文字名及び10進数で表した複数の数値からなる対のリストとする。その対のリストは,各文字の名前が,続く番号で指定した国際符号に対応することを宣言する。
処理指定は,ISO/IEC 10646-1内の,次の各文字番号の名前を宣言しなければならない。
(1) 32(スペース)
(2) 34(引用符)
(3) 35(番号記号)
(4) 39(アポストロフィー)
(5) 40(左小かっこ)
(6) 41(右小かっこ)
(7) 42(アステリスク)
(8) 43(正符号)
(9) 45(ハイフン,負符号)
(10) 46(ピリオド)
(11) 47(斜線)
(12)-(22) 48-57(0から9の数字)
(23) 58(コロン)
(24) 59(セミコロン)
(25) 60 [不等号(より小)]
(26) 61(等号)
(27) 62[不等号(より大)]
(28) 63(疑問符)
(29)-(54) 65 から 90 (AからZのアルファベット大文字)
(55) 92(逆斜線)
(56)-(90) 97 から 122 (aからzのアルファベット小文字)
さらに,ISO/IEC 6429内の,次の各文字番号の名前を宣言しなければならない。
(91) 10(改行)
(92) 13(復帰)
同一の指定部内の要素standard-charsにおいて,一つの文字名が二回以上出現する場合は,エラーとする。要素型形式standard-chars内の,ある文字名に関する宣言は,以降の指定部で出現するその文字名の宣言より優先する。
処理系は,ISO所有者識別子をもつ公開識別子によって識別する基本文字集合に関して,ビット組を国際符号に対応させる方法をあらかじめ知っていてよい。基本文字集合がISO所有者識別子を含む公式公開識別子をもち,その基本文字集合から派生した文書文字集合が使用する各文字に関して,一意文字名が要素型形式standard-charsを用いて宣言されている場合,その基本文字集合のための要素型形式baseset-encodingは不要となる。
7.1.5 その他文字
要素型形式other-charsは,ISO/IEC 10646-1又はISO/IEC 6429が定義する文字集合には対応しない文字レパートリ内の文字の名前を宣言する。
要素の内容は,文字名のリストとする。
例1:
logoSGML runic-f runic-u
これらの宣言は,累積する。
7.1.6 符号化基本集合
要素型形式baseset-encodingは,SGML宣言において基本文字集合内の文字番号の意味に対応すると宣言された意味をもつSGML文書中のビット組みが,どのように文字に変換されるかを指定する。
要素baseset-encodingの内容は,対応する10進数で指定した文字番号及び文字名の対のリストとなる。その対のリストは,文字名が,属性nameで指定した公開識別子をもつ文字集合内において,文字番号に対応することを指定する。
要素baseset-encoding間での競合は,各文字番号ごとに解決する。複数の要素baseset-encodingが同じ基本文字集合のために存在してもよいが,同一の指定部内の同一の基本文字集合で,同じ文字番号に対して二つの指定が存在する場合は誤りとする。
例2:
31 runic-f
32 runic-u
7.1.7 リテラル記述文字
要素型形式literal-described-charは,SGML宣言内において属性descの値と等しい最小リテラルを用いて宣言された意味をもつSGML文書中のビット組が,要素の内容において指定した名前をもつ文字に変換されることを指定する。
例3:
logoSGML
7.1.8 SDATA実体対応
要素型形式map-sdata-entityは,内部SDATA実体への参照がその要素内容において名前を与えられる文字を示すことを宣言する。その実体参照名は,属性nameの値に等しく,その実体の代替テキストは属性textの値に等しい。その要素内容は一つの文字名とする。
グローブ設計が特性entity-nameをノードクラスsdataに含む場合,SDATA実体の対応は最初にその名前で探し,見つからない場合にそのテキストで探して行う。
例4:
greekA
greekB
7.1.9 分離文字
要素型形式add-separator-charsは,文字を,DSSSLの変換言語及びスタイル言語中において空白類文字として許容される終端変数separator-characterとして宣言する。
この宣言は累積する。
7.1.10 名前文字
要素型形式add-name-charsは,追加の文字を,DSSSLの変換言語及びスタイル言語中において識別子として許容される終端変数added-name-characterとして宣言する。
この宣言は累積する。
7.1.11 組み合わせ文字
要素型形式combine-charは,三つ以上の文字名を含むリストとする。要素型形式combine-charは,二つ目以降の文字からなる文字列を,最初の文字で置換することを宣言する。この要素型形式の使用には,機能combine-charを必要とする。
7.2 公開識別子
この規格では,公開識別子はISO/IEC 9070が規定する公開識別子の正規文字列形式に適合しなければならない。
7.3 字句規約
7.3.1 大文字と小文字の区別
大文字と小文字は,常に区別する。
備考 伝統的なプログラム言語Lispの処理系は,大文字と小文字を区別しない。
7.3.2 識別子
[1] identifier = initial (subsequent* final)?| peculiar-identifier
[2] initial = letter | special-initial | added-name-character
[3] letter = a | b | c |...| z | A | B | C| ... | Z
[4] special-initial = special | :
[5] special = ! | $ | % | & | * | / | < | = | > | ? | ~ | _ | ^
[6] subsequent = initial | digit | special-subsequent
[7] special-subsequent = . | + | -
[8] final = letter | special | added-name-character | digit | special-subsequent
[9] peculiar-identifier = + | - | ...
他のプログラム言語が許容するほとんどの識別子は,DSSSLでも許容する。識別子は,アルファベット及び数字に加えて,$%&*/:<=>?~_^+-.及び,要素型形式add-name-chars又は要素型形式char-repertoireで宣言した終端変数added-named-characterを含んでよい。識別子は,数を開始する文字で始まってはならない。しかし,+,-及び...は識別子とする。識別子は,文字:だけからなる場合は例外として,文字:で終わってはならない。
7.3.3 トークン,空白類文字及び注釈
[10] token = identifier | keyword | boolean | number | character | string | named-constant | glyph-identifier | ( | ) | ' | . | ` | , | ,@
[11] delimiter = whitespace | ( | ) | モ| ;
[12] whitespace = space | record-start | record-end | tab | form-feed | separator-character
[13] comment = ; any-character-except-record-end*
[14] atmosphere = whitespace | comment
[15] intertoken-space = atmosphere*
空白類文字には,スペース,レコード開始,レコード終了及び終端変数separator-charactersがある。空白類文字は,可読性を改善するために用い,識別子,数値などの空白類文字なしでは字句単位に分割できない,トークン間を区切るために用いる。しかし,トークン間の区切りとして以外の空白類文字は重要ではない。空白類文字は二つのトークンの間に出現してよいが,一つのトークン内では出現してはならない。空白類文字は文字列の中で出現してもよい。この場合には重要となる。
文字セミコロン(;)は,注釈の開始を示す。注釈は,セミコロンの出現したレコードの終わりまで続く。処理系は注釈を検知しないが,レコード終了は空白類文字として検知する。このため注釈を識別子又は数値の中でに置いてはならない。
構文変数intertoken-spaceの示す文字は,トークンの前後どちら側にも出現してよいが,トークン内で出現してはならない。
"暗黙の終了"を必要とするトークン,例えば,識別子,数,文字,文字ドット及び#!定数は,どの構文変数delimiterの要素によっても終了するが,それ以外のどの文字によっても終了するとは限らない。