JIS X 4151:1992 文書記述言語SGML | ページ 23

104
X 4151-1992
に現れる。非SGML文字は,マーク又はデータと混同してしまうおそれがないから,システムがデー
タの区切り又は埋め草などに充てても構わない。
(4) データ文字 句読点,数学記号など区切り子には使わないそのほかの文字(マーク文字も,マークを
認知しない文脈ではデータ文字となる。こうしたデータを“解析対象文字データ”という。)。
7.2 文字参照 文字には,次の(1)(4)のように,書くのが大変であったり書けなかったりするものがあ
る。
(1) 入力装置のキーに対応するものがない文字。
(2) 表示できない文字。
(3) マーク又はデータ文字として直接に書けない非SGML文字。
(4) GMLの機能文字となっているもののデータとして使いたい制御文字。
このような文字を間接的に書く方法として,“文字参照”がある(ただし,例1.例2.では,目に見える
ことを考えて,直接にでも書くことができる負符号 “−” を対象としてある。)。
例1. <!ENTITY hyphen “−”>
<!ENTITY hyphen “&#45;”>
負符号の文字番号が45であれば,この二つの宣言は同値である。
これまでの例示では,実体文の表記に文字データだけを使っていた。上の例の第2の宣言では,文字参
照を使っている。文字参照は,“文字参照の開始 (character reference open)”区切り子cro (“&#”) で始まり,
区切り子refcで終わる。その中には,名前でなく,文字番号を書く。
表記には,文字データと文字参照とを混在させてもよい。
例2. <!ENTITY finis ”−|−”>
<!ENTITY finis ”&#45;|&#45;”>
負符号の文字番号が45であれば,この二つの宣言は同値である。
文字参照は,実体参照と同じく,属性の値及びデータ内容にも使うことができる。
機能文字については, “&#RS;”, “&#RE;”, “&#SPACE;” 及び “&#TAB;” という名前指定文字参照も
できる。名前指定文字参照は,その文字の機能も生かしたいときに使う。番号による文字参照は,その文
字を書くことだけを目的として,その文字の機能を殺したいときに使う。
文字参照に使う区切り子とその規格参照具象構文での文字列とを,次にまとめておく。
文字列 名前 働き
&# CRO 文字参照の開始
; REFC 参照の終了
7.3 データとしての区切り子文字 SGMLは,区切り子にどの文字を使うかを強制しない。SGMLは,
区切り子機能を“抽象構文”で定めるだけで,それらにどんな文字列を割り当てるかは具象構文の定義に
任せている。区切り子機能はたくさんあるが,次の(1)(5)の理由から,利用者がデータ文字を自由に書け
ることの本質的な妨げとはならない。
(1) たいていの区切り子は,マーク宣言又はタグの中にだけ現れる。要素の内容に現れる区切り子はごく
少数である。
(2) 区切り子機能に割り当ててある文字の種類は多くない。
(3) 内容の中で意味をもつ区切り子機能は,文脈に依存する。これらは,しかるべき文脈列が直後に続く
場合(又は特別な場合)にだけ区切り子として認知される。例えば,区切り子eroは,その後ろに名
前開始文字がきているときにだけ認知される。

――――― [JIS X 4151 pdf 111] ―――――

                                                                                            105
X 4151-1992
(4) たいていの区切り子は,複数の文字でできているので,その分だけデータとして現れる可能性が低い。
(5) 複数文字の区切り子又は文脈依存区切り子は,その途中で実体が始まったり終わったりする場合には
認知されない。
(5)から,そのデータ文字を参照として書くことであいまいさが回避できる。規格参照区切り子では,多
くの場合に,例1.に示す二つの実体があれば十分である。
例1. <!ENTITY amp ”&”>
<!ENTITY lt ”<”>
この実体の参照 “&amp;” 又は “&lt;” は, “&” 又は “<” をデータとして使いたいときに自由に書くこ
とができる。参照は,いつでも文脈依存区切り子を終わらせるからである。
“]” はマーク区間の終了となるので,場合によって,次の例2.のように実体への参照として書く必要が
ある。
例2. <!ENTITY rsqb ”]”>
斜線 (solidus) “/” は,SHORTTAGの機構(参考4参照)を使っている場合で,しかもその要素に対して
特に許したときに限って,区切り子となる。この区切り子は1文字だけでできているから,特に文脈列を
必要としないので,実体参照にしたことだけでは文字データとしての扱いになるという保証がない。そこ
で,例3.のように,見出し語 “CDATA” を指定して宣言しておく。この見出し語は,その実体文が区切り
子に見えても文字データとして扱え,という指示を表す。
例3. <!ENTITY sol CDATA ”/”>
引用符号 “”” も,一つの表記の中にデータとしてlitもlitaも出てくるような非常にまれな場合には,
例4.に示す実体への参照 “&quote;” として書く必要が生じる。たいていは,その表記にlitが出てくるな
らlitaでくくり,litaが出てくるならlitでくくることで用が済む。
例4. <!ENTITY quote“>
8. マーク区間 マーク区間は,マーク区間宣言の引数として文書に現れた区間をいい,その区間での区
切り子を無視する,その区間を特定の処理の際に無視するといった,特別な目的を明記しておく。
8.1 無視するマーク区間 文書を二つの処理システムにかける場合,一方の処理システムに対しては処
理指令となるものも,他方の処理システムでは役に立たない。そこで,SGML構文解析系が処理指令の一
方を無視することができるように,例1.のようにして,その処理指令を書いた文書の区間を無視せよと指
定しておく。
例1. <! [ IGNORE [<・ システムAの処理指令>]]>
このマーク区間宣言は,次の五つの部分からできている。
(1) マーク区間開始 区切り子mdoと“宣言部分集合の開始 (declaration subset open)”区切り子dsoからで
きている。dsoは,通常は,左大かっこ “[” である。
<! [
(2) 状態見出し語 例1.では, “IGNORE”。
IGNORE
(3) 区切り子dso ここからマーク区間が始まることを示す。
[
(4) マーク区間の内容
<・ システムAの処理指令>

――――― [JIS X 4151 pdf 112] ―――――

106
X 4151-1992
(5) マーク区間終了 “マーク区間終了 (marked section close)”区切り子のmsc及びmdcからできている。
mscは,通常は,2個の右大かっこ “]]” である(2個のdsoに対応させている。)。
]]>
他方の処理指令は,例2.のようにして,取り込むべき区間としてマークしておく。
例2. <![ INCLUDE [<・ システムBの処理指令>]]>
この文書をシステムAに送るときには,二つのマーク区間の見出し語を逆にする必要がある。これを簡
単に行うには,それぞれの処理システムに対して引数実体を設けて,その参照を使えばよい。例3.のよう
に,一方の実体文を “IGNORE” に,他方の実体文を “INCLUDE” にしておくのである。
例3. <!ENTITY % systemA ”IGNORE”>
<!ENTITY % systemB ”INCLUDE”>
それぞれのマーク区間宣言では,直接に “IGNORE” などの見出し語を書くのをやめ,その関係するシ
ステムの引数実体を参照しておく。例3.の宣言の下では,例4.の処理指令のうちの“システムB”のもの
だけが実行され,“システムA”のものは無視される。
例4. <![%systemA; [<・ システムAの処理指令>]]>
<![%systemB; [<・ システムBの処理指令>]]>
同じ文書の中で “%systemA;” 又は “%systemB;” を参照しているマーク区間は,すべて同様の扱いを受
ける。さて,二つの実体宣言の実体文を例5.のとおりに逆にしてみよう。
例5. <!ENTITY % systemA ”INCLUDE”>
<!ENTITY % systemB ”IGNORE”>
すると,今度は逆に “%systemB;” を参照しているマーク区間の方が無視される。
なお,区間の内容を無視する場合も,正しくそのマーク区間の終了を知るために,その中に入れ子にな
っているマーク区間開始又はマーク区間終了はきちんと認知される。
8.2 文書の複数の版 文書を出版するとき,その文がわずかに違う幾つもの版ができるものである。
SGMLでは,そうした文書を処理するのに,その共通部分の文を何度も複製しなくて済むようにできる。
これまでに解説してきた技法を応用して,その共通部分を基の文に,それぞれの版に特有の部分をマーク
区間にしてやればいい。
例 <![ %v1;[第1版の文]>
<![ %v2;[第2版の文]>
両方の版に共通する文
<![ %v1;[第1版の別の文]>
<![ %v2;[第2版の別の文]>
ここで,次の宣言を与える。
<!ENTITY % v1 ”INCLUDE”>
<!ENTITY % v2 ”IGNORE”>
すると,第1版が処理されて,次のような結果を得る。
第1版の文
両方の版に共通する文
第1版の別の文
宣言を逆にして,次のように与える。
<!ENTITY % v1 ”IGNORE”>

――――― [JIS X 4151 pdf 113] ―――――

                                                                                            107
X 4151-1992
<!ENTITY % v2 ”INCLUDE”>
すると,第2版が処理されて,次のような結果を得る。
第2版の文
両方の版に共通する文
第2版の別の文
8.3 解析しないマーク区間 マーク区間は,文字データ (Character DATA) として扱って構文解析しない
ように指定することもできる。
例1. <![ CDATA [
<・ 処理指令>
<p> この段落の参照&JSA;
は,参照として認知されない。</p>
<・ 処理指令>
]]>
このマーク区間の内容は,文字データとして扱われる。したがって,その二つの処理指令と参照とは,
認知されることもなければ,それらとして処理されることもない。
ほかの区切り子は無視してほしいものの,実体参照又は文字参照はきちんと処理してほしいときは,そ
のマーク区間を置換可能文字データ (Replaceable CDATA) と指定しておく。
例2. <![ RCDATA [
<・ 処理指令>
<p> この段落の参照&JSA;
は,参照として認知される。</p>
<・ 処理指令>
]]>
IGNOREと指定するマーク区間は入れ子にできたが,CDATA又はRCDATAと指定するマーク区間は入
れ子にできない。CDATA又はRCDATAと指定したマーク区間では,最初に出会ったマーク区間終了のと
ころで終わりとなる。
8.4 一時的なマーク区間 マーク区間は,その区間が一時的 (TEMPorary) なものであると明記しておく
こともできる。そうしておけば,後でそこを取り除く際にもすぐに分かる。
例 <![ TEMP [ <・newpage> ]]>
このようなマーク区間は,処理がうまくいかないとき,一時的に検査のための処理指令を入れたり一時
的な手当てをしたりするのに利用することができる。
8.5 見出し語の指定 見出し語を実体参照を使って指定するときの便宜を考えて,4種類の状態見出し語
と “TEMP” とは,重複して指定しても,複合して指定しても構わないことになっている。一つのマーク
区間宣言に複数の実体参照を書いておいても一向差し支えはなく,その参照を解消したときに生じる見出
し語の重複又は複合で誤りとなる心配をしないで済む。
状態見出し語の優先度は,次のとおりである。
IGNORE
CDATA
RCDATA
INCLUDE

――――― [JIS X 4151 pdf 114] ―――――

108
X 4151-1992
状態見出し語の指定がない場合には, “INCLUDE” の指定があったものとして扱われる。
8.6 実体としてのマーク区間 マーク区間を実体として宣言することで,そのマーク区間を複数の箇所
に取り込むことができる。
例1. <!ENTITY phrase1 MS
”RCDATA [
何度も使う<tag>の
例を含んだ句
”>
この宣言の下で,次の文があったとしよう。
これは,&phrasel;を使っている。
すると,次のように書き換わる。
これは,<![ RCDATA [
何度も使う<tag>の
例を含んだ句
]]>を使っている。
例1. での “<tag>” は,マークとして解析されることがない。マーク区間宣言に “RCDATA” と指定し
てあるからである。
なお,マーク区間の前後には記録開始も記録終了も入らないことに注意のこと。それらが必要なら,参
照の前後に記録開始及び記録終了を置いておかなければならない。
例2. これは,
&phrase1;
を使っている。
このようにマーク区間を実体として宣言しておく場合,宣言の時点では,そのマーク区間は構文解析を
受けないし,処理もされない。マーク区間開始及びマーク区間終了は,それを参照したときに自動的に追
加される。
9. 識別子属性 識別子属性は,その要素を他の要素と区別するための名前を値とする属性である。SGML
構文解析系は,識別子属性に共通する処理を行い,それぞれの手続きでの処理が軽減できるようにしてい
る。
識別子属性に値として与える名前は,ある要素から別の要素を参照するのに使う。例えば“図参照”か
ら“図”そのものを参照するのに使う。たいていの場合,その“図”を処理する手続きは,与えられた名
前に何かのデータ(例えばその“図”の番号)を結び付けて返す。“図参照”を処理する手続きは,そのデ
ータを使って印字する。こういう形の受渡しに,識別子属性を使うのである。
SGML構文解析系は,その属性の本当の意味が何であるかには関与しない。ただ,それが識別子属性で
あるとの指定だけがあればよい。
例1. <!−− 要素 内容 −−>
<!ELEMENT figure (figbody, figcap)>
<!−− 要素 名前 値 省略時値 −−>
<!ATTLIST figure id ID #IMPLIED>
識別子属性は,要素に一つだけ設けることができる。

――――― [JIS X 4151 pdf 115] ―――――

次のページ PDF 116

JIS X 4151:1992の引用国際規格 ISO 一覧

  • ISO 8879:1986(MOD)
  • ISO 8879:1986/AMENDMENT 1(MOD)

JIS X 4151:1992の国際規格 ICS 分類一覧

JIS X 4151:1992の関連規格と引用規格一覧