Copyright (C) 1995 Nihon Unisys,Ltd.
Copyright (c) 1998 Nippon Cals Partnership

10. マーク宣言 ― 文書型定義


10. マーク宣言 ― 文書型定義の案内

10.1 文書型宣言(式110~115) 10.2 要素宣言(式116~140) 10.3 属性定義並び宣言(式141~147) 10.4 記法宣言(式148~149.2) 10.5 短縮参照対応表宣言(式150~151) 10.6 短縮参照使用宣言(式152~153) 9.マーク宣言 ー 一般へ戻る。 SGML規格の案内へ戻る。 11.マーク宣言 ー 連結処理定義へ進む。

10.1 文書型宣言

  文書型宣言     = mdo,          “DOCTYPE”, ps+, 文書型名,          (ps+, 外部識別子)?,          (ps+, dso, 文書型宣言部分集合, dsc)?,          ps*, mdc              ―(110)   文書型名      = 共通識別子             ―(111)   文書型宣言部分集合 = (実体集合 | 要素集合 | 短縮参照集合)* ―(112)   実体集合 = (実体宣言 | ds)* ―(113)   要素集合 = (要素宣言 |          属性定義並び宣言 | 記法宣言 | ds)* ―(114)   短縮参照集合 = (実体宣言 | 短縮参照対応表宣言 |           短縮参照使用宣言 | ds)* ―(115)

 文書型宣言に指定する文書型名は,同じ前書きの中で文書型名又は連結型名 として現れていない共通識別子でなければならない。

 文書型宣言に指定する外部識別子が表す実体は,その文書宣言部分集合の最 後に参照してその一部(又は全部)とする。文書型宣言で有効となる文書型定義 は,その文書型部分集合及びこの外部実体の中の宣言の組合せとする。

備考 文書型部分集合の中の引数実体宣言は,外部実体の構文解析に先立 って構文解析するので,外部実体の中での実体の宣言に優先する。

 文書型宣言は,その文書型に対する要素宣言を含んでいなければならない。

 短縮参照集合は,基本文書型宣言の中でだけ指定することができる。

 文書型宣言の中で,Ee及び引数実体参照は,その文書型宣言部分集合の中にし か現れてはならない。

10.2 要素宣言

  要素宣言 = mdo, “ELEMENT”, ps+, 要素型,        (ps+, タグ省略最小化)?,        ps+, (宣言内容 | 内容モデル), ps*, mdc     ―(116)

 要素宣言は,その要素型に対する要素型定義となる。文書実現値の中の要素 に現れる要素及び文字の順序は,その要素の要素型定義に従わなければならな い。  要素宣言の中のタグ省略最小化は,SGML宣言で“OMITTAG NO”と指定して ある場合に限って,その直前のpsとともに省略することができる。

10.2.1 要素型

  要素型 = 共通識別子 | 名前群 | 付番要素 | 付番群 ―(117)

 共通識別子は,一つの文書型定義の中で,要素宣言の要素型として1度しか現 れてはならず,更に,付番要素の付番核又は付番核に付番をつないでできる共通 識別子と同じであってはならない。

 要素型としての名前群は,その成分の名前を要素型名として出現の順に定義 し,それぞれの名前に対して同じ定義を与える。

 要素型としての名前群に並べた名前は,それぞれ共通識別子とする。

10.2.1.1 付番要素

  付番要素 = 付番核, ps+, 付番 ―(118)   付番群 = grpo, ts*, 付番核, (ts*, 接続子, ts*, 付番核)*,        ts*, grpc, ps+, 付番 ―(119)   付番核 = 名前 ―(120)   付番 = ―(121)

 要素型としての付番要素又は付番群は,その付番核に付番をつないでできる 共通識別子を指定する。

10.2.1.2 量的制限

 共通識別子の長さは,量NAMELENの値以下でなければならない。

10.2.2 タグ省略最小化

  タグ省略最小化 = 開始タグ最小化, ps+, 終了タグ最小化 ―(122)   開始タグ最小化 = “O”| minus ―(123)   終了タグ最小化 = “O”| minus ―(124)

 タグ省略最小化は,次の(1)~(2)のとおりに開始タグ及び終了タグの最小化 の扱い方を指定する。

(1)O そのタグの省略(6.3.1参照)を許す。
(2)minus そのタグの省略をマークの誤りとする。  タグ省略最小化の中のminusは,文脈上の制約なしで区切り子として認知する。

 開始タグの省略が6.3.1によって禁止になっている場合には,開始タグ最小化 にminusを指定することが望ましい。

 その要素の宣言内容がEMPTYである場合及びその要素に内容参照属性がある 場合には,終了タグ最小化に“O”を指定することが望ましい。

備考 “O”と指定しておくことで,その空の要素に終了タグがないことの 備忘となる。(指定してもしなくても,マークの最小化には何ら影響 しない。)

10.2.3 宣言内容

  宣言内容 = “CDATA”|“RCDATA”|“EMPTY”       ―(125)  宣言内容での見出し語は,次のとおりにその要素の内容を指定する。 (1)CDATA その内容は,文字データとする。 (2)RCDATA その内容は置換可能文字データとする。 (3)EMPTY その内容は,空とする。

10.2.4 内容モデル

  内容モデル = (モデル群 | “ANY”),          (ps+, 例外)? ―(126)   モデル群 = grpo, ts*, 内容字句,         (ts*, 接続子, 内容字句)*,         ts*, grpc, 出現標識? ―(127)   内容字句 = 素内容字句 | モデル群 ―(128)   素内容字句 = (rni, “PCDATA”)|          要素字句 | データタグ群 ―(129)   要素字句 = 共通識別子, 出現標識? ―(130)

 内容モデルでの見出し語は,次の(1)~(2)のとおりとする。

(1)ANY その内容モデルとして,同じ文書型定義の中で要素型と定義してある 共通識別子及び“#PCDATA”を成分とする,任意選択反復可能なor群を指定 する。

(2)PCDATA 構文解析対象文字データを許すことを指定する。
 内容モデルの中に“#PCDATA”又はデータタグ群がある場合,その要素の内容 は,混合内容とする。そうでない場合,その要素の内容は,要素内容とする。

備考 “#PCDATA”は,その要素の内容の中のどこにでもデータ文字を 許す場合にだけ指定することを推奨する。いいかえれば,“#PCDATA” は,要素モデルの唯一の内容字句として指定するか,接続子としてor だけを使っているモデル群の成分として指定するかだけにしておく ことを推奨する。 この推奨の根拠は,要素内容の中でなら分離子と認知できるもの も,混合内容の中ではデータとして扱われてしまうからである。 この推奨に従わない例として,次の内容モデルがある。 (x, #PCDATA) この内容モデルに従うと,“x”の開始タグの直前のReは,データと なり,要素“x”が文脈上必すであるので,その開始タグとなる。 すると,実際の“x”の開始タグは,2個目の“x”は許されていない から誤りとなってしまう。 このような推奨外の内容モデルは,一般に,その“#PCDATA”を, その内容が“#PCDATA”であって,その前後のタグが省略可能な要素 を表す共通識別子で置換することで,同値なものに書き換えること ができる。 この推奨は,データタグ機構を使うことを抑制することを意図す るものではなく(10.2.4.4の備考参照),分離子について注意を促す ことを意図している。

 要素の内容の中の内容及び文字は,その内容モデルに従い,次の(1)~(3)の優先 順位で,そのモデル群の中の字句及び例外を満たさなければならない。

(1)反復標識rep又はplusがある場合,最も近くに満たした字句の反復。 (2)モデル群の中の字句。排除要素例外の対象となっている字句は除く(10.2.5 参照)。 (3)添加要素例外として指定してある字句(10.2.5.1参照)。

備考 例えば,次の要素の実現値を考えてみる。         “a”が連続している場合,それは要素の反復として扱い,そのモデル群 の反復としては扱わない。

 二つのタグの間にあるすべての文字は,たとえその一部がマーク区間宣言で 文字データと宣言してあったとしても,1個の“#PCDATA”を満たすものとして 扱う。

 要素字句としての共通識別子は,文書型定義で要素型として指定してあっても なくても,正当なものとして扱う。

備考 この規定によって,文書型で定義してある比較的少数の共通識別子に 加えて,公開の定義を利用した多数の共通識別子が使えることになる。

10.2.4.1 接続子

  接続子 = and | or | seq                 ―(131)

 モデル群の中に複数の内容字句がある場合,対応する要素の出現順序及び選 択は,その接続子に応じて,次の(1)~(3)のとおりでなければならない。

(1)and すべてが現れなければならないが,その順序は任意でよい。
(2)or その中の1個だけが現れなければならない。
(3)seq すべてが指定の順序で現れなければならない。
 1個のモデル群の中では,1種類の接続子だけを使わなければならない。(入 れ子になったモデル群には,別の接続子を使ってもよい。)

 モデル群が1個の内容字句からなる場合,そのモデル群は,接続子seqが指定 してあるものとして扱う。

10.2.4.2 出現標識

  出現標識 = opt | plus | rep ―(132)

 選択した内容モデルに対応する内容は,それに出現標識が付けてない限り, ちょうど1度現れなければならない。出現標識が付けてある場合は,その出現標 識に従って,次の(1)~(3)のとおりでなければならない。

(1)opt 任意選択(0回又は1回)
(2)plus 必すの反復(1回以上)
(3)rep 任意選択の反復(0回以上)
 内容字句“#PCDATA”には,出現標識repが付けてあるものとして扱う。

 潜在的に任意選択となっている内容字句は,出現標識の指定がなければopt が付けてあるものとして扱い,plusの指定があればrepが付けてあるものとし て扱う。

10.2.4.3 あいまいな内容モデル

 内容モデルは,あいまいであってはならない。すなわち,文書の実現値に現れ る要素又は文字列は,その実現値を先読みすることなく,それが満たす素内容字 句が一つだけに決まらなければならない。内容モデルがあいまいであるかどう かの判定は,10.2.4での優先順位を考慮せずに行う。

備考 あいまいな内容モデルの例を,次に示す。         要素“a”に続いて現れた要素“b”は,この内容モデルの中の二つの 素内容字句“b”のどちらも満たすからである。このあいまいさは, 次のように中間的な要素を設けることで回避することができる。             要素“b”が満たす字句は,“f”がその“b”の前で終わっているかど うかから,あいまいさなく決まる(内容モデルについての理論的な基礎 付けは,参考9に示す。)。

10.2.4.4 データタグ群

  データタグ群 = dtgo, ts*, 共通識別子, ts*, seq, ts*, データタグ形式, ts*, dtgc, 出現標識? ―(133)   データタグ形式 =(データタグひな形群 | データタグひな形),            (ts*, seq, ts*, データタグ埋め草ひな形)? ―(134)   データタグひな形群 = grpo, ts*, データタグひな形, (ts*, or, ts*, データタグひな形)*, ts*, grpc ―(135)   データタグひな形 = 引数表記 ―(136)   データタグ埋め草ひな形 = 引数表記 ―(137)

 データタグ群は,その共通識別子と“#PCDATA”とを接続子seqで並べたモ デル群として扱う。

備考 例えば,規格参照区切り子集合の下で,モデル群    ([hours, (":"|":"), " "], minutes)    は,次のモデル群として扱う。    ((hours, #PCDATA), minutes)

 データタグ群は,基本文書型宣言の中にだけ現れることができる。

 データタグ形式の中の引数表記は,他の引数表記と同様に解釈する。ただし, その中には,機能文字の文字参照又は非SGML文字を参照する文字番号による文 字参照が現れてはならない。

10.2.4.5 量的制限

 内容モデルの入れ子の深さは,量GRPLVLの値以下でなければならない。

 1個の内容モデルの中の内容字句の総数(入れ子の中も含める。)は,量GRP GTCNTの値以下でなければならない。

 データタグひな形の中の引数表記を解釈した結果の長さは,量DTEMPLENの 値以下でなければならない。

10.2.5 例外

  例外 = (排除要素, (ps+, 添加要素)?) | 添加要素 ―(138)

 例外は,その要素の実現値の中のすべての場所(その内容が混合内容又は要素 内容である部分要素も含める。)に適用する。

 文書の実現値の中で,排除要素の対象とも添加要素の対象ともなっている要 素があれば,排除要素の対象として扱う。

10.2.5.1 添加要素

  添加要素 = plus, 名前群 ―(139)

 内容モデルの中に指定した添加要素は,その内容モデルのモデル群の効果を 次のとおりに変更する。そのモデル群の中の共通識別子又は群を“Q”,それ に付けてある出現標識を“x”(出現標識が付けてないときは,空とする。), 適用可能な添加要素を“R1”~“Rn”とするとき,字句
Qx を,次の指定があったものとして扱う。

(R1|R2|...|Rn)*, (Q, (R1|R2|...|Rn)*)x

 内容モデルの要素字句を満たせる要素は,添加要素の対象となっていたとし ても,その要素字句を満たすものとして扱う。

備考1. 添加要素の指定は,文脈上の部分要素に対して使わないことが望ま しい。添加要素の指定は,文書の中に現れる箇所での論理的な内容の 一部とはなっていない要素,例えば,索引項目や挿入した図などに対 して使うのが望ましい。   2. 添加要素に続くReは,通常の場合,無視する。一方,真の部分要素に 続くReは,データとして扱う。

10.2.5.2 排除要素

  排除要素 = minus, 名前群 ―(140)

 内容モデルの中に指定した排除要素は,そのモデル群の効果を変更して,選択 項目を除外する(ちょうど,文書の中から任意選択の要素を除外するのと同様な 働きをもつ)。

 排除要素が次のとおりにモデル群を変更するときは,誤りとする。

(1)添加要素に指定してある字句,出現標識opt若しくはrepが付けてある字句 又はor群の成分となっている字句以外の字句を排除する。 (2)字句が必すであるか任意選択であるかを変更する。 備考 例えば,必すであるモデル群のすべての成分を排除すると,誤りとなる。 それは,そのモデル群がもはや必すでなくなってしまうからである。

10.3 属性定義並び宣言

  属性定義並び宣言 = mdo,             “ATTLIST”, ps+, (結合要素型 | 結合記法名),             ps+, 属性定義並び, ps*, mdc ―(141)   属性定義並び = 属性定義, (ps+, 属性定義)* ―(142)   属性定義 = 属性名, ps+, 宣言値, ps+, 省略時値 ―(143)

 属性定義並び宣言の結合要素型は,その宣言と同じ宣言部分集合の中の他の 属性定義並びに現れてはならない。

10.3.1 量的制限

 1個の属性定義並びの中の,属性名及び名前字句の総数は,量ATT CNTの値以下でなければならない。

備考 省略時値は,この総数に含めない。

10.3.2 属性名

  属性名 = 名前 ―(144)

 属性名は,一つの属性定義並びの中に1度だけ指定することができる。

 一つの文書型定義の中では,宣言値“ID”をもつすべての属性に同じ属性名 を与えることが望ましい。

備考 識別子値をもつすべての属性に共通の名前を付けることで,一つの 文書の実現値の中で識別子値が一意的でなければならないという要 件を強調することができる。

10.3.3 宣言値

  宣言値 = “CDATA”|“ENTITY”|“ENTITIES”|        “ID”|“IDREF”|“IDREFS”|        “NAME”|“NAMES”|“NMTOKEN”|“NMTOKENS”|        “NUMBER”|“NUMBERS”|“NUTOKEN”|“NUTOKENS”|        記法 | 名前字句群 ―(145)   記法 = “NOTATION”, ps+, 名前群 ―(146)

 宣言値での見出し語は,次の(1)~(15)のとおりに,その属性値の種類を 指定する。

(1)CDATA 文字データ
(2)ENTITY 一般実体名
(3)ENTITIES 一般実体名並び
(4)ID 識別子値
(5)IDREF 識別子参照値
(6)IDREFS 識別子参照並び
(7)NAME 名前
(8)NAMES 名前並び
(9)NMTOKEN 名前字句
(10)NMTOKENS 名前字句並び
(11)NOTATION 要素の内容に対するデータ内容記法を識別する記法名,その 名前群は,記法名として許容する名前を指定する。
(12)NUMBER
(13)NUMBERS 数並び
(14)NUTOKEN 数字句
(15)NUTOKENS 数字句並び
 “ID”及び“NOTATION”は,一つの属性定義並びの中で1度だけ指定すること ができる。

 字句は,一つの属性定義並びの中で,異なる群の中であっても,2度以上現れて はならない。

 “NOTATION”は,その宣言内容が“EMPTY”である要素に対して指定してはな らない。

10.3.4 省略時値

  省略時値 = ((rni, “FIXED”, ps+)?, 属性値指定) |         (rni, (“REQUIRED”|“CURRENT”|         “CONREF”|“IMPLIED”)) ―(147)

 省略時値での見出し語は,次の(1)~(5)のとおりにその属性の値を指定する。

(1)FIXED その属性は,固定属性とする。
(2)REQUIRED その属性は,必す属性とする。
(3)CURRENT その属性は,現属性とする。
(4)CONREF その属性は,内容参照属性とする。
(5)IMPLIED その属性は,補充可能属性とする。

備考 空の表記を指定しても,“IMPLIED”を指定したのと同値とは ならない。

 省略時値の中の属性値指定は,6.9.4.1の構文上の要件を満足しなけ ればならない。

備考 その省略時値が属性指定の中に現れると,更に一般実体名,一般 実体名並び及び記法属性に対する検査を行うことになる。

 宣言値が“ID”である場合,その省略時値には,“IMPLIED”又は“REQUIRED” を指定しなければならない。

 “CONREF”は,宣言値が“EMPTY”と指定してある要素に対して指定すること ができない。

10.3.4.1 量的制限

 見出し語“CONREF”,“REQUIRED”及び“IMPLIED”の正規の長さは, 0とする。

10.3.4.2 容量

 現属性の省略時値の容量値ATTCHCAPに対する容量点 としては,文書の中でその属性に指定してある一番長い属性値の長さを計算する。

10.4 記法宣言

  記法宣言 = mdo, “NOTATION”, ps+, 記法名,          ps+, 記法識別子, ps*, mdc ―(148)   記法識別子 = 外部識別子 ―(149)

 記法宣言の中の記法名は,同じ文書型定義の中の他の記法宣言に指定しては ならない。

 記法宣言の中の記法識別子が公開識別子を含んでいて,しかもSGML宣言で “FORMAL YES”と指定してある場合,その公開識別子の公開文種別は, “NOTATION”でなければならない。 10.4.1 データ属性

備考 データ属性は,データ内容記法に対して定義する。値は,その記法に 従うデータ実体に対しての実体宣言の中に指定する。

 データ属性の宣言値は,“ENTITY”,“ENTITIES”,“ID”,“IDREF”, “IDREFS”又は“NOTATION”であってはならない。

 “CURRENT”又は“CONREF”は,データ属性に対して指定することができない。

10.4.1.1 結合記法名

  結合記法名 = rni, “NOTATION”,          ps+, (記法名 | 名前群) ―(149.1)

 結合記法名での見出し語NOTATIONは,定義しようとしている属性をデータ属 性して指定する。

 結合記法名の名前群の中の名前は,その属性定義並びが現れたのと同じ文書 型定義の中で記法名として宣言してあり,しかも他の属性定義並びに指定して いない名前でなければならない。これらの名前は,その属性定義並びの前に宣 言してある必要はない。しかし,その記法として宣言する実体への参照の前に 宣言しておかなければならない。

10.4.1.2 データ属性指定

  データ属性指定 = ps+, dso, 属性指定並び, s*, dsc ―(149.2)

 データ属性指定の中の属性指定並びの正否は,そのデータ内容記法を結合し た属性定義並びによって決まる。この属性定義並びは,そのデータ属性指定の 前に宣言してなければならない。

 この属性定義並びが空である場合は,属性指定並びも空でなければならない。

10.5 短縮参照対応表宣言

  短縮参照対応表宣言 = mdo, “SHORTREF”, ps+, 対応表名,             (ps+, 引数表記, ps+, 名前)+,              ps*, mdc ―(150)   対応表名 = 名前 ―(151)

 短縮参照対応表宣言の対応表名は,同じ文書型定義の中の他の短縮参照対応 表宣言に指定してはならない。

 短縮参照対応表宣言の中の引数表記と名前とのそれぞれの対は,その引数表 記を解釈した結果の文字列を短縮参照の区切り子とし,この区切り子にその名 前を対応付ける。その名前は,同じ文書型定義の中で一般実体の名前として宣 言してあるものでなければならない。

備考 この一般実体は,必すとする。文書を他のシステムに送ったとき, そのシステムが短縮参照機能を提供していず,しかも引数実体参照が 使えない文脈では,短縮参照をその対応付いた名前の実体で置換しな ければならなくなるからである。

 短縮参照の区切り子は,一つの短縮参照対応表宣言の中で1度だけ対応付け ることができる。

 指定のなかった短縮参照の区切り子は,名前に対応付けしてないものとして 扱う。

10.6 短縮参照使用宣言

  短縮参照使用宣言 = mdo, “USEMAP”, ps+, 対応表指定,            (ps+, 結合要素型)?, ps*, mdc ―(152)   対応表指定 = 対応表名 | (rni, “EMPTY”) ―(153)

 対応表指定での見出し語“EMPTY”は,空対応表を指定する。 10.6.1 文書型宣言での使用 短縮参照使用宣言が文書型宣言の中に現れる 場合は,その中に結合要素型を指定しなければならない。その対応表指定で指 定した対応表は,結合要素型の要素が現要素となったとき,いつでも現対応表と なる。

 対応表指定の中の対応表名は,同じ文書型宣言の中の短縮参照対応表宣言で 定義してあるものでなければならない。

備考 対応表名は,その短縮参照使用宣言の前に定義しなくてもよいが, その対応表が現対応表となる前には定義しなければならない。

 すでに対応表が結合した結合要素型を指定した場合,誤りとはしないが, その短縮参照使用宣言は無視する。

10.6.2 文書実現値での使用

 短縮参照使用宣言が文書実現値に現れる場合は,その中に結合要素型を指定 してはならない。その対応表指定で指定した対応表は,現要素であるその実現 値に対する現対応表となる。

 対応表指定の中の対応表名は,その実現値が従う文書型定義の中の短縮参照 対応表宣言で定義してあるものでなければならない。

10.6.3 現対応表

 対応表は,それに結合した要素が現要素となって いる間,現対応表となる。現対応表は,その要素の実現値に対して次の(1)~(2) の場合に切り替わる。

(1)その部分要素が現要素となった場合 その間だけ切り替わる。

(2)その実現値の中に短縮参照使用宣言が現れた場合 以後,その宣言に従った ものに切り替わる。

 要素に結合した短縮参照対応表が無い場合,その要素の実現値に対する現対 応表は,その要素が始まった時点での現対応表とする。その要素が文書要素で ある場合,その現対応表は,空対応表とする。 10.マーク宣言 ー 文書型定義の案内へ戻る。 SGML規格の案内へ戻る。 11.マーク宣言 ー 連結処理へ続く。