94
X 4151-1992
備考 この参考3の中の例では,1行を1記録とし,その前後に記録開始と記録終了とがあるものと
考える。
3.3.2 マークの中の記録の境界 タグ及び宣言の中では,記録開始も記録終了も間隔として扱う。これら
は,そのマークの中の分離子となる(ついでながら,タブ文字も分離子となる。)。
処理指令の中の記録の境界をどう扱うかは,その処理システムが決める。
4. 文書構造 SGMLのタグは,次の(1)(2)の役目を果たす。
(1) その文書での要素の間の構造関係を示す。
(2) その要素の共通識別子と属性とを指定する。
構造及び属性を指定する規則は,SGMLがすべての文書に共通のものとして定めている(その幾つかは
既に解説したし,残りのものもいずれ解説する。)。しかしながら,文書の中での要素そのもの及び属性そ
のものは,その文書の文書型定義が定義する。
4.1 文書型定義 共通識別子は,その要素がどの種類(“型”)のものであるかを表している。その特定
の型のすべての文書に適用するマーク宣言の集合を,文書型定義という。
文書型定義に現れる宣言のうち重要なものは,次の(1)(3)である。
(1) 要素宣言 その要素に現れてもよい共通識別子とその順序を定める。
(2) 属性定義並び宣言 その要素に指定できる属性とそのとり得る値を定める。
(3) 実体宣言 その型の文書の中で参照できる実体を定める。
例 <!ENTITY SGML “Standard Generalized Markup Language”>
この実体は,よく使う長い語句 “Standard Generalized Markup Language” を短い実体参照
“&SGML;” で済ますためのものである。
何度も同じことを繰り返さないで済むように,文書型定義は,普通,別個の実体として蓄えてある。そ
れぞれの文書では,その文書型を指定しその実体を参照できるようにした文書型定義を書くことで,その
中に取り込んで利用する。
4.2 要素宣言 要素は,文書型定義での規則に従った形でだけ文書に現れることができる。例えば,そ
の定義が段落の中に図を含めることを認めているのでない限り,図を段落の中に入れると誤りとなる。要
素宣言は,こうした規則を定めるのに使う。
4.2.1 内容モデル 文書のそれぞれの要素に対して,応用設計者がその要素宣言の二つの引数を指定する。
要素の共通識別子とその内容の内容モデルとである。内容モデルの引数は,その要素の中にどんな下位要
素及び文字列が現れてもよいかを定める。
例えば,教科書 (textbook) が前部 (front matter),本体 (body) 及び後部 (rear matter) でできているとし
たら,その宣言は次のようになる。
<!ELEMENT textbook (front, body, rear)>
“textbook” がその内容を定めようとしている要素の共通識別子であり, “(front, body, rear)” がその内容
を定める内容モデルである。この宣言は,textbookに共通識別子の “front”, “body” 及び “rear” が現れる
ことを述べている(共通識別子は,人間にとってはその意味を体現しているであろうが,SGML構文解析
系にとっては単なる記号にすぎない。)。
内容モデルは,群の一種である。群は,その成分を接続子でつないで並べたもので,その個々の成分を
字句という。群は,“群の開始 (group open)”区切り子grpoと“群の終了 (group close)”区切り子grpcと
でくくる。この前後の区切り子は,たとえその群が1個の字句しかもたない場合でも,必要である。
――――― [JIS X 4151 pdf 101] ―――――
95
X 4151-1992
モデル群での字句は,共通識別子である。群に使う区切り子には,その字句をつなぐ接続子のほかに,
出現標識がある。出現標識は,その共通識別子が何回現れることができるかを指定するのに使う。
4.2.2 接続子・出現標識 接続子は,共通識別子と共通識別子との間に書いて,それらがどう現れるかを
指定する。教科書の例では,“列 (sequence)”接続子seqが使ってあった。文の中では,カンマ “,” である。
この接続子は,モデルの中に共通識別子が並んでいたとおりの順番で,要素が文書の中に現れなければな
らないことを意味する。
出現標識は,対象とする共通識別子の直後に書く。教科書の例には,出現標識がなかった。これは,そ
れぞれの要素がちょうど1回現れなければならないことを意味する。例えば,前部 (front matter) と後部
(rear matter) を省略してもよいことにしたいのであれば,次の例1.のように疑問符 “・” を使えばいい。疑
問符は,“任意選択 (optional)”出現標識optである。
例1. <!ELEMENT textbook (front・, body, rear・)>
ここまでで,教科書の最上位の構造だけを定め終わった。文書型定義には, “front”, “body” 及び “rear”
の構造も定めておかなければならないし,更にそれらの下位の構造も,文字データの階層に至るまで,き
ちんと定めておかなければならない。
例を簡単にするため,本体は,段落 (paragraph) を並べたものであるとしておこう。すると,本体に現
れてもよい共通識別子は “p” だけということになるが,これは何回現れてもよい。そこで,複数の段落が
あることを示すために,この共通識別子には例2.に示すように正符号 “+” を付けておく。正符号は,“必
す反復”出現標識plusである。
例2. <!ELEMENT body (p+)>
この正符号は,本体の中に少なくとも1個の段落がなければならないことを示す。何かの理由で本体に
段落が1個もないものも認めたいのであれば,例3.に示すように正符号に代えてアステリスク “*” を付け
てやればよい。アステリスクは,“任意選択反復”出現標識repである。
例3. <!ELEMENT body (p*)>
さて,教科書の例で,本体に段落に加えて例 (example) もあってよいことにしてみよう。例に対する共
通識別子を “xmp” とすると,“幾つもの段落や例”は,例4.のように指定できる。
例4. <!ELEMENT body (p|xmp) +>
ここで,縦棒 “|” は“又は”接続子 (or) であり, “p|xmp” は“段落又は例”を表している。
モデル群は,幾つもの字句を含んでいるものの,それ自身1個の字句として扱うことができ,出現標識
を付けることもできる。例4.での群のかっこは,不可欠である。出現標識(“・”, “+” 及び “*”)は,接
続子(“,” 及び “|”)よりも優先順位が高いからである。
したがって,例4.を例5.のようにしたのでは意味が違ってしまう。
例5. <!ELEMENT body (P+|xmp+)>
こちらは“幾つもの段落又は幾つもの例”を意味するので,望む“幾つもの段落や例が混じったもの”
とはならないからである。
接続子には,もう一つある。いま,教科書の前部には表扉 (title page) があって,そこには表題 (title),
著者 (author) 及び出版社 (publisher) を記載するものだとしてみよう。ただし,記載の順番は問わないこ
とにしたい。すると,接続子seqは使えない。特定の順番を要求してしまうからである。もちろん,接続
子orも使えない。三つの中から一つだけを選ぶことになってしまうからである。
そこで,例6.に示すようにアンパーサンド “&” を使う。アンパーサンドは,“及び”を意味する接続子
andであり,モデル群の中のすべての共通識別子が現れなければならないことを示すが,その順番を問わ
――――― [JIS X 4151 pdf 102] ―――――
96
X 4151-1992
ない。
例6. <!ELEMENT titlepage (title & author & publisher)>
4.2.3 モデルでの実体参照 二つの要素が,例1.に示すように,同じではないものの,ほとんど同じ内容
モデルをもっている場合を考えてみよう。
例1. <!ELEMENT body (p|xmp|h1|h2|h3|h4) +>
<!ELEMENT rear (p |h1|h2|h3|h4) +>
本体にも後部にも,段落と見出し (heading) の “h1”, “h2”, “h3” 及び “h4” とがあるが,例が書ける
のは本体だけになっている。
このようにマーク宣言の引数に繰り返して現れる部分は,文書の文の中での繰返しと同じで,実体参照
を使うとうまくさばくことができる。違うのは,宣言の引数で使う実体参照(これを,“引数実体参照”と
いう。)には,その前にパーセント記号 “%” を付ける点だけである。このパーセント記号は,“引数実体
参照の開始 (parameter entity reference open)”区切り子peroである。peroは,実体宣言のときにも,その定
義しようとする実体が引数実体であることを示すために,付けなければならない(ただし,単独の引数と
して分けて書く。これは,参照と誤解されないためである。)。すると,例1.の宣言は,例2.のようにも書
くことができる。
例2. <!ENTITY %h1to4 ”h1|h2|h3|h4”>
<!ELEMENT body (p|xmp|%h1to4) +>
<!ELEMENT rear (p |%h1to4) +>
4.2.4 名前群 群の別の使い方を示そう。本体と後部とが,例1.のように同じ構造をもっていたとしよう。
例1. <!ELEMENT body (p|xmp) +>
<!ELEMENT rear (p|xmp) +>
これを例2.のようにすると,書く分量も少なくなるし,その宣言が要素の一群に対するものであること
を強調できることにもなる。
例2. <!ELEMENT (body|rear) (p|xmp) +>
4.2.5 データ文字 ここまでに示した要素は,いずれも下位の要素だけを成分とするものであった。しか
し,いずれ,応用が実際のデータを扱うところまで,言い換えれば,タグのないところまでたどり着くこ
とになる。
データを内容モデルに指定するときには,予約名 “#PCDATA” を使う。 “#PCDATA” は,“0個以上の
解析対象データ”を意味する。実質的に出現標識repの意味が込められているので,これには何も付ける
ことができない。例1.の宣言は,段落が0個以上の文字からなる文字列(記録終了及び間隔も含む。)であ
ることをいっている。
例1. <!ELEMENT p (#PCDATA)>
ところで, “#PCDATA” と大文字で書くのは,この語がSGMLで定めているものであることを強調する
ためである。規格参照具象構文を使っている場合,SGML構文解析系は,実体の名前を除いて,すべての
名前の大文字・小文字の違いを無視する。
例えば,段落の構造が例2.のようになっていることもあるだろう。
例2. <!ENTITY % phrase “quote|citation|reference”>
<!ELEMENT p (#PCDATA|%phrase) *>
この宣言は,段落が文字のほかに成句 (phrase) の要素が入り混じった列になっていることをいっている。
成句としては,引用句 (quote),引用文 (citation) 及び参照 (reference) がある。段落は,これらが幾つ並ん
――――― [JIS X 4151 pdf 103] ―――――
97
X 4151-1992
でいてもよいし,空でもよいことになる。
さて,シャープ記号 “#” は,“予約名標識 (reserved name indicator)”区切り子rniであり,利用者の定義
した名前も現れ得る文脈で予約名であることを明示するために使う。例えば,rniが付いているので
“#PCDATA” が共通識別子でないと分かるのである。
4.2.6 空の内容 その要素の内容を利用者が書くことがないような要素を定めることもできる。例えば,
図参照 (figure reference) で,その図はいつでも手続きがその内容の処理の際に生成してくれる場合がこれ
に当たる。空の要素を定めるには,普通の括弧でくくったモデル群の代わりに,見出し語 “EMPTY” を指
定する。
例 <!ELEMENT figref EMPTY>
内容を空と宣言した要素には,終了タグを書いてはならない(実際,終える内容そのものがないのだか
ら,書くまでもない。)。
4.2.7 非SGMLデータ 教科書の本体に,写真 (photograph) も入るのだとしたら,その宣言は例1.のよ
うになる。
例1. <!ELEMENT body (p|photo) +>
写真は,普通,その画像上のそれぞれの点の色を表したビットの列で表現する。このビット組合せは,
文章及びマークに使う文字とは意味が違う。SGMLが定める以外の,約束された記法に従って解釈しなけ
ればならない。
非SGMLデータは,SGML構文解析系で走査しないのだから,独立した実体として別に蓄え,その名前
は特殊な属性として指定する(詳しくは,13.1.2参照)。その要素の内容は,例2.のとおり空として宣言し
ておかなければならない。
例2. <!ELEMENT photo EMPTY>
4.2.8 内容モデルでの区切り子 内容モデルに現れる区切り子と,その規格参照区切り子集合での文字列
とを,次にまとめておく。
−くくり
文字列 名前 働き
( GRPO 群を開く。その中に書いたものをまとめて演算の対象にできるようにする。
) GRPC 群を閉じる。
−出現標識
文字列 名前 働き
・ OPT 任意選択(0回又は1回)を指定する。
+ PLUS 必ず反復(1回以上)を指定する。
* REP 任意選択反復(0回以上)を指定する。
−接続子
文字列 名前 働き
, SEQ モデル群に現れたのと同じ順ですべての要素が現れなければならないことを指定す
る。
| OR モデル群の中の一つの要素だけが現れなければならないことを指定する。
& AND モデル群の中のすべての要素が現れなければならないが,順を問わないことを指定す
る。
−その他
――――― [JIS X 4151 pdf 104] ―――――
98
X 4151-1992
文字列 名前 働き
# RNI 利用者が定義した名前ではなく,予約名が続くことを示す。
5. 属性 記述的マークであるタグには,その要素の共通識別子に加えて,属性も書くことができる。普
通,共通識別子は名詞にし,属性はその共通識別子の特性を表す名詞か形容詞にするのがよい(動詞及び
書式付け用語は,記述的でなく手続き的であり,SGMLでのマーク付けの精神に反するから,避けるのが
よい。)。
要素に認める属性は,文書型定義で定める。そこでは,その属性の値の範囲及び指定を省略したときの
値も定めておく。
5.1 属性の指定 2個の属性を書いたタグの例を,参考3図2に示す。
属性は,開始タグの中で共通識別子に続けて指定する。それぞれの属性に対する指定は,その名前,“値
標識 (value indicator)”区切り子vi及びその指定する値を並べて書く。参考3図2の例では,“security(機
密性)”という名前の属性に“Internal Use(内部使用)”という値を指定し,“sender(発信人)”に “LTG” を
指定している。
参考3図2
5.1.2 属性の値 属性の値は,データ文字や実体参照の列を,その前後に“表記 (literal)”区切り子litを
書いて指定する。litは,通常は引用符号 “”” である。代替の表記区切り子litaを使うこともできる。こち
らは,通常はアポストロフィ “” である。lit及びlitaは,どちらを使ってもよいが,一方で始めて他方で
終えることはできない。
空の値は,litを二つ並べて表す。
例 <listing name=Jones phone= ”555-1234” altphone= ” ”>
属性の値の中の,記録終了及びタブ文字は,間隔に置き換えられる。記録開始は,無視される(つまり,
取り除かれる。)。
属性の値を指定するのに使う区切り子機能と,その規格参照区切り子集合での文字列とを,次にまとめ
ておく。
文字列 名前 働き
= V1 値標識
” LIT 表記区切り子
LITA 表記区切り子(代替)
5.2 属性の宣言 それぞれの要素に対して,文書型定義には,その要素の属性を確定する情報を書いて
おかなければならない。要素に対する属性定義並びが書いてないときは,その要素に属性がないことにな
る。
5.2.1 属性定義の形式 属性定義並び宣言には,まず,その属性定義並びを結び付けようとする結合要素
型を書く。結合要素型は,1個の共通識別子でもよいし,複数の共通識別子の群でもよい。群の場合には,
その成分となっている共通識別子のすべてが同じ属性をもつことになる。
――――― [JIS X 4151 pdf 105] ―――――
次のページ PDF 106
JIS X 4151:1992の引用国際規格 ISO 一覧
- ISO 8879:1986(MOD)
- ISO 8879:1986/AMENDMENT 1(MOD)
JIS X 4151:1992の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.240 : 情報技術(IT)の応用 > 35.240.30 : 情報,ドキュメンテーション及び出版業務におけるITの応用
JIS X 4151:1992の関連規格と引用規格一覧
- 規格番号
- 規格名称
- JISX0202:1998
- 情報技術―文字符号の構造及び拡張法
- JISX0208:1997
- 7ビット及び8ビットの2バイト情報交換用符号化漢字集合