Copyright (C) 1995 Nihon Unisys,Ltd. Copyright (C) 1998 NCALS.

6. 要素構造

要素構造の案内

6.1 前書き(式7~9) 6.2 文書要素(式10~12) 6.3 要素(式13) 6.4 開始タグ(式15~18) 6.5 終了タグ(式19~23) 6.6 内容(式24~27) 6.7 文書型指定(式28) 6.8 共通識別子指定(式29~30) 6.9 属性指定並び(式31~43) SGML規格の案内へ戻る。

6.1 前書き

  前書き = 他の前書き*,         基本文書型宣言,         (文書型宣言 | 他の前書き)*,         (連結型宣言 | 他の前書き)* ―(7)   他の前書き = 注釈宣言 | 処理指令 | s ―(8)   基本文書型宣言 = 文書型宣言 ―(9)

 SGML文書実体又はSGML部分文書実体は,その前書きの中の,文書型宣言で指定した 文書型定義及び連結型宣言で指定した連結処理定義に従う。SGML文実体は,それを 参照した実体が従っている前書きに従う。SGML実体の構文解析は,活性文書型があ れば,それらの活性文書型及び活性連結型に従い,活性文書型がなければ,基本文書 型及び活性連結型に従う。

 基本文書型宣言以外に文書型宣言を書くことができるのは,SGML宣言で“CONCUR YES”又は“EXPLICIT YES”と指定してある場合に限る。活性文書型は,SGML宣言 で“CONCUR YES”と指定してある場合に限って存在することができる。基本文書型 は,その他の文書型の少なくとも一つが活性状態にあるときに限って,活性状態に なることができる。

備考1. システムは,通常,その初期設定に際して活性文書型及び活性連結型の認 知を行う(参考7参照)。

2. 基本文書型だけに従う構文解析は,活性文書型が一つもない場合に起きる。

 少なくとも一つの連結処理定義を指定した場合には,その実体に活性連結型が存在 しうる。複数の活性連結型が存在しうるかどうかは,次のとおり,その連結型の指定に よって決まる。

(1)単純連結 単純連結の連結型は,暗黙連結及び明示連結の連結型に加えて,いくつ でも活性状態になることができる。

(2)暗黙連結 暗黙連結の連結型は,一つだけ活性状態になることができる。

(3)明示連結 明示連結の連結型は,それらが連結処理の連鎖をなすとき,いくつでも 活性状態になることができる。ここで,“連結処理の連鎖をなす”とは,第1の処 理の原始文書型が基本文書型であり,その結果文書型が第2の処理の原始文書型で あり,その結果文書型が第3の処理の原始文書型になるといったことを指す。この とき,最終の結果文書型は暗黙連結の連結型であってもよい。

6.1.1 制限

 前書きの中の基本文書型宣言を除く文書型宣言の出現回数は,SGML宣言のCONCUR 引数で指定した値以下でなければならない。

6.2 文書要素

  文書実現値集合 = 基本文書要素他の前書き ―(10)   基本文書要素  = 文書要素          ―(11)   文書要素    = 要素            ―(12)

6.3 要素

  要素 = 開始タグ?, 内容, 終了タグ? ―(13)

 要素の終了タグは,その要素が宣言内容EMPTYをもつ場合又はその要素が明示的な 内容参照を含む場合,省略しなければならない。

備考 この要件は,マークの最小化に依存しない。

6.3.1 最小化―タグの省略

 SGML宣言で“OMITTAG YES”と指定してある場合,要素の開始タグ及び終了タ グは,そのタグの省略によってあいまいさが生じないときに限り6.3.1.16.3.1.2 に従って省略することができる。

備考 文書型定義は,技術的に正しい省略をマーク誤り(10.2.2参照)と見なして    もよい。

6.3.1.1 開始タグの省略

 要素の開始タグは,その要素が文脈上必すであって,しかもそこに現れうる他の 形式の要素がどれも文脈上任意選択である場合,省略することができる。ただし, 次の(1)~(2)のときを除く。

(1)その要素に必すの属性があるか,その要素が宣言内容をもつとき

(2)その要素の実現値の内容が空であるとき

  開始タグの属性指定並びは,その開始タグを省略した場合,空として扱う。

  要素の開始タグは,その要素の内容が短縮参照列から始まり,しかもその短縮参  照区切り子の対応付けがその要素に結合した短縮参照対応表によって変更を受けて  いる場合,あいまいとなる。

6.3.1.2 終了タグの省略

 要素の終了タグは,次の(1)~(3)の直前に位置する場合,省略することができる。

(1)SGML文書実体又はSGML部分文書実体の終わり

(2)他の開いている要素の終了タグ

(3)その要素の内容となりえない要素又はSGML文字

備考 排除要素の対象となっている要素は,そのモデル群の字句として現れえな    いので,ここでの“内容となりえない要素”となる。

6.3.2 最小化―データタグ

 SGML宣言で“DATATAG YES”と指定してある場合,要素のデータは,その要素に 指定してあるデータタグ群に呼応する内容をもつ1個の要素となっているとき,その 要素の終了タグとなる。

 要素及びその部分要素のデータ内容は,その要素のデータタグ形式のデータタグひな (雛)形に合致する文字列があるかどうかを検査する。合致する文字列がある場合,その 文字列と,それに続くデータ埋め草ひな形に合致する文字列とを,その要素のデータタ グという。データタグは,要素の終了タグともなり,その親要素の文字データともなる。

備考 共通識別子がその要素のデータタグ群に呼応する要素として現れた場合で も,その共通識別子が,別の文脈から見ると1個の要素字句ともなっている ことがある。このような文脈では,データタグとは見なさない。その共通 識別子が,また,別のデータタグ群の異なったデータタグ形式に合致して いる場合も同様とする。

 要素のデータ内容は,前から1字ずつ検査していく。それぞれの文字位置で,データ タグ形式のデータタグひな形と最長一致で照合する。検査対象の開いている要素が複数 ある場合,最も近くに開いた要素に対する照合をまず行う。最長一致がとれなければ, その次に近くに開いた要素に対する照合を行う。この手順で,候補の要素に対する照合 を順次行う。

備考 データタグは,したがって,データタグひな形に最長一致する最も近くの 要素を終わらせる。

 データタグひな形と内容との照合は,その内容のマークの認知及び参照の置換を 行った後,しかもRE文字及びRS文字の無視を行う前に行う。

備考 データタグひな形は,したがって,RE文字又はRS文字への参照を含んでい て差し支えない。

 データタグは,終了タグを認知しない文脈では,認知しない。例えば,CDATA マーク区間では認知しない。

 データ埋め草ひな形との照合では,ひな形の文字列が1度も現れなくてもよいし,任 意回現れてもよい。その最後(1個しかないかもしれない。)のものが,ひな形全体の終 わりとなる。

 データタグをもつ要素は,終了タグを省略したとは見なさない。

6.3.3 量的制限

 開いている要素の個数は,量TAGLVLの値以下でなければならない。

 データタグの長さは,量DTAGLENの値以下でなければならない。

6.4 開始タグ

  開始タグ = (stago, 文書型指定, 共通識別子指定,         属性指定並び, s*, tagc) | 最小化開始タグ ―(14)

6.4.1 最小化

  最小化開始タグ = 空開始タグ | 閉じない開始タグ           | net可能開始タグ ―(15)

6.4.1.1 空開始タグ

  空開始タグ = stago, tagc ―(16)

 要素の開始タグは,その要素が基本文書要素の一部である場合,空開始タグとして もよい。このとき,このタグの共通識別子指定は,次のいずれかとして扱う。

(1)SGML宣言で“OMITTAG YES”と指定してある場合は,その基本文書型の中で 最も近くに始った開いている要素の共通識別子

(2)SGML宣言で“OMITTAG NO”と指定してある場合は,その基本文書型の中で 最も近くに終わった要素の共通識別子

(3)(1)~(2)に該当する要素がない場合は,その文書要素の共通識別子

備考 この共通識別子の充当は,何かのタグが省略してあるかどうかの判定に先 立って行う。

 空開始タグの属性指定並びは,空として扱う。

6.4.1.2 閉じない開始タグ

  閉じない開始タグ = stago, 文書型指定, 共通識別子指定,             属性指定並び, s* ―(17)

 開始タグは,区切り子機能stago又はetagoに割り当てた文字列の直前に位置する 場合,閉じない開始タグとしてもよい。このとき,その文字列がその文脈で正当な区切 り子となっているかいないかは影響しない。

6.4.1.3 net可能開始タグ

  net可能開始タグ = stago, 共通識別子指定,            属性指定並び, s*, net ―(18)

 要素の開始タグは,その要素が基本文書要素の一部である場合,net可能開始タグ としてもよい。

6.4.2 量的制限

 開始タグの長さは,その属性指定並びの中の参照を置換する前において,区切り子 stagotagc及びnetを除いて,量TAGLENの値以下でなければならない。

6.5 終了タグ

  終了タグ = (etago, 文書型指定, 共通識別子指定, s*, tagc) |         最小化終了タグ ―(19)

 終了タグは,その文書型指定で指定した文書型の実現値の中の,その共通識別子指定 で指定した共通識別子をもつ要素のうち,最も近くに始まった開いている要素を終わ らせる。

6.5.1 最小化

  最小化終了タグ = 空終了タグ | 閉じない終了タグ |            簡略終了タグ ―(20)

 終了タグは,SGML宣言で“SHORTTAG YES”と指定してある場合,最小化終了タ グとしてもよい。

6.5.1.1 空終了タグ

  空終了タグ = etago, tagc ―(21)

 終了タグが空終了タグである場合,その共通識別子は,基本文書要素の実現値の中の, 最も近くに始まった開いている要素の共通識別子とする。このような要素が存在しな ければ,その終了タグは誤りとする。

6.5.1.2 閉じない終了タグ

  閉じない終了タグ = etago, 文書型指定, 共通識別子指定, s*  ―(22)

 終了タグは,区切り子機能stago又はetagoに割り当てた文字列の直前に位置する 場合,閉じない終了タグとしてもよい。このとき,その文字列がその文脈で正当な区切 り子となっているかいないかは影響しない。

6.5.1.3 簡略終了タグ

  簡略終了タグ = net                     ―(23)

 文字列netは,基本文書型の中の開いている要素のうちで,その開始タグがnet可能 開始タグとなっているものがある場合,簡略終了タグとして認知する。このとき,その 終了タグは,該当する要素のうちの最も近くに始まった要素を終わらせる。

6.6 内容

  内容 = 混合内容 | 要素内容 |       置換可能文字データ | 文字データ ―(24)   混合内容 = (データ文字 | 要素 | 他の内容)* ―(25)   要素内容 = (要素 | 他の内容 | s)* ―(26)   他の内容 = 注釈宣言 | 短縮参照使用宣言 |        連結集合使用宣言 | 処理指令 | shortref |        文字参照 | 一般実体参照 | マーク区間宣言 | Ee ―(27)

 要素の内容は,その要素の宣言内容又は内容モデルに従った4種類のどれかになって いるか,空であるかでなければならない。ただし,その要素が明示的な内容参照をもつ 場合は,空としなければならない。

 要素の内容が,その要素の宣言内容に従って置換可能文字データ又は文字データと なっている場合,その内容は,その文脈依存区切り子etago(正当な終了タグとなって いなくてもよい。)又は正当なnetによってだけ終わる。ただし,その内容が混合内 容であるとしたら誤りとなってしまう終了は,誤りとする。

備考 内容の中の文字は,次の(1)~(2)の場合にデータ内容となる。

(1)宣言による場合

 要素の内容が,要素宣言の宣言内容引数に従って置換可能文字データ又      は文字データとなっている。

(2)構文解析による場合

 要素の内容が混合内容となっていて,マークとは認知されなかったため      に,データと構文解析された。

6.6.1 記録の境界

 内容の中に現れるRSは,マークと解釈できない場合,無視する。

 内容の中で,すべての参照の置換及びマークの認知の後に残るREは,次の(1)~(3) のとおりにそれがマークのためだけに存在するのでなければ,データとして扱う。

(1)要素の最初のREは,その直前にRS,データ又は真の部分要素がなければ,無視する。

(2)要素の最後のREは,その直後にデータ又は真の部分要素がなければ,無視する。

(3)RS又はREの直後に位置しないREは,その間にデータ又は真の部分要素がなければ,  無視する。

備考 REをデータとするかどうかの判定は,マークの認知の過程で行う。マークの 認知は,タグの省略の認知を含めて,(1)~(3)に従ってREが無視できるかど うかの判定に先立って行う。この手順では, (quote | #PCDATA)* のように,要素の内容のどこにでもデータが現れうる通常の場合,直感に合 った結果が得られる。しかしながら, (x , #PCDATA) のように,内容モデルがデータの現れうる位置に制限を課す場合には,(1)又 は(2)の状況がマークの認知の最中に誤りとなることがある。このような内容 モデルは,通常必要としないので,推奨しない(10.2.4参照)。

 上の規則を要素に適用するにあたっては,その部分要素の内容を無視する。すなわち, 真の部分要素であれ,添加した部分要素であれ,それが始まったのと同じ記録内で終わる 原子(atom)として扱う。

record 1<outer><sub> record 2</sub> </outer>record 3 この要素outerの最初のREは,record 2 の終わりに位置する。このRE は,subがouterの真の部分要素であればデータとなるが,subが添加し た要素であれば,outerの中に直前に位置するデータも真の部分要素もな いので,無視する。いずれの場合にしても,部分要素subの最初のREは, record 1の終わりに位置する。このREは,その直前にその部分要素のデー タも真の部分要素もないので,無視する。

 REは,それに続く最初のデータ又は真の部分要素の直前に位置するものとして扱う。 (その間にマーク宣言,処理指令又は添加部分要素があるときは,その直後に位置する ものとして扱う。)

備考1. 特定文字データ実体,非SGML実体又はSGML部分文書実体はデータとして 扱うが,処理指令実体はデータとして扱わない。

2. SGMLは記録の境界の扱い方を定義しているが,SGML文書をいわゆる記録 を単位として構成しなければならないわけではない。

  3. すべての実体は,SGML文書実体及び外部実体を含めて,実際にRSで始まっ ていないのであればRSで始まるとは見なさないし,REで終わっていない のであればREで終わるとは見なさない。

6.7 文書型指定

  文書型指定 = 名前群?                    ―(28)

 文書型指定を含むマークは,次の(1)~(2)の場合にだけ処理する。

(1)その文書型指定の名前群の中に,活性文書型の名前がある場合

(2)名前群がない場合(その文書型指定が空の場合)

備考 空の文書型指定をもつ(名前群がない)マークは,どんな文書の実現値にも 使えることになる。

 文書型指定の名前群は,SGML宣言で“CONCUR YES”と指定してある場合にだけ, 指定することができる。

6.8 共通識別子指定

  共通識別子指定 = 共通識別子 | 付番核 ―(29)   共通識別子 = 名前 ―(30)

 共通識別子は,その文書型定義の中で要素型として指定してある名前であって,次の いずれかの名前でなければならない。

(1)その要素の要素型宣言の要素モデルの中に指定してある名前

(2)適用可能な添加要素例外に指定してある名前

(3)その文書要素の開始タグ又は終了タグに現れた文書型名

6.8.1 付番機構

 SGML宣言で“RANK YES”と指定してある場合には,6.8.1.16.8.1.2を 適用する。

6.8.1.1 完全な共通識別子

 付番要素に対してその開始タグに完全な共通識別子を指定した場合,その共通識別子 の付番部分は,その付番要素の付番核の現番号となり,更に,その付番核が成分となっ ている付番群のすべての付番核の現番号ともなる。

6.8.1.2 付番核

 共通識別子指定を付番核としてもよいのは,その付番核が,適用可能な要素宣言の 付番要素又は付番群の成分として指定してある場合に限る。

 付番核を指定することは,その後ろにその付番核の現番号をつないでできる共通識 別子を指定したのと同値とする。付番核の指定は,その付番核に対して現番号を定め る要素がその前に現れていなければ,誤りとする。

6.9 属性指定並び

  属性指定並び = 属性指定*                 ―(31)   属性指定   = s*, (名前, s*, vi, s*)?, 属性値指定  ―(32)

 属性指定並びの正当性は,その要素に結合した属性定義並びに従って決まる。属性 指定並びは,この結合した属性定義並びが存在しない場合,空でなければならない。

 属性定義が存在する属性は,それが暗黙の属性でない限り,指定しなければならな い。ただし,マークの最小化を使った場合(6.9.1.1参照)を除く。

 属性指定は,それぞれの属性定義に対して高々1個しか指定できない。

 属性指定は,区切り子の直後に位置する場合にだけ,その先頭のsを省略することが できる。

6.9.1 最小化

6.9.1.1 属性指定の省略

 SGML宣言で“SHORTTAG YES”又は“OMITTAG YES”と指定してある場合, 次の(1)~(2)を適用する。

(1)属性指定は,必すの属性及びその属性が現れる属性定義並びをもつ要素の最初の出  現での現属性に対してだけ指定すればよい。指定しなかった属性は,その宣言され  た省略時値に等しい属性値を指定したものとして扱う。

(2)現属性に対して属性値指定を与えると,その指定した属性値が省略時値となる。 この新しい省略時値は,その属性を定義している属性定義並びに結合したすべての 要素で有効とする。

6.9.1.2 属性名の省略

 SGML宣言で“SHORTTAG YES”と指定してある場合,属性指定の名前及びviは, 属性値指定が,その属性に対する宣言値の群の成分の,区切り子でくくってない名前字 句であるならば,省略することができる。

備考 名前字句は,属性定義並びの中の一つの群にだけ現れることができる (10.3参照)。

6.9.2 量的制限

 属性指定並びの正規の長さは,その中の属性名及び属性値の正規の長さの総和とする。 属性指定並びの正規の長さは,量ATTSPLENの値以下でなければならない。

 属性名の正規の長さは,その名前の文字の個数に量NORMSEPの値を加えた値とする。

6.9.3 属性値指定

  属性値指定 = 属性値 | 属性値表記              ―(33)   属性値表記 = (lit, 置換可能文字データ, lit) |          (lita, 置換可能文字データ, lita)       ―(34)

 属性値表記は,その中の参照を置換し,Ee及びRSを無視し,RE又はSEPCHARをSPACEに置換した上で,属性値として解釈する。

備考 属性値表記の解釈にあたっては,その属性の実際の宣言値とは無関係に, その属性が文字データであるものとして行う。

 文字データ以外の属性値は,その文字列の中に現れる2個以上連続するSPACEを1個 のSPACEに置換し,先頭及び末尾に現れるSPACEをすべて無視する。

備考 この箇条は,元の表記が何であるかによらない。例えば,CDATA実体である かSDATA実体であるかによらない。

6.9.3.1 最小化

 属性値指定は,名前文字だけからなり,しかも次の条件を満たす場合,属性値として もよい(属性値表記としなくてもよい。)。

(1)その属性値が属性定義並びに現れている。 (2)SGML宣言で“SHORTTAG YES”と指定してある。

6.9.4 属性値

  属性値 = 文字データ | 一般実体名 | 一般実体名並び |        識別子値 | 識別子参照値 | 識別子参照並び |        名前 | 名前並び | 名前字句 | 名前字句並び |        記法名 | | 数並び | 数字句 | 数字句並び ―(35)   一般実体名並び = 名前並び ―(35.1)   識別子値 = 名前 ―(36)   識別子参照並び = 名前並び ―(37)   識別子参照値 = 名前 ―(38)   名前並び = 名前, (SPACE, 名前)* ―(39)   名前字句並び = 名前字句, (SPACE, 名前字句)* ―(40)   記法名 = 名前 ―(41)   数並び = , (SPACE, )* ―(42)   数字句並び = 数字句, (SPACE, 数字句)* ―(43)

 属性値は,その属性定義の宣言値に従って15種類のどれかとしなければならない。

6.9.4.1 構文要件

 属性値は,その宣言値に従わなければならない。  属性値は,その宣言値が群を含む場合,その群の中の字句でなければならない。  空の属性値表記を指定してもよいのは,属性値の種類が文字データである場合に限る。

6.9.4.2 固定属性

 固定属性に対して指定する属性値は,その省略時値でなければならない。

6.9.4.3 一般実体名

 属性値としての一般実体名及び一般実体名並びの中の名前は,データ実体又はSGML 部分文書実体の名前でなければならない。これらの名前は,名前群の指定のない一般実 体参照として使うときと同様に宣言してなければならない。

6.9.4.4 記法名

 記法属性に対する属性値は,その要素の文書型宣言で宣言してなければならない。

 明示的な内容参照がある場合,記法属性に属性値を指定することは誤りとする。

6.9.4.5 量的制限

 属性値の正規の長さは,その値が直接に指定してあるか属性値表記から解釈した ものであるかを問わず,次の(1)~(2)の値に量NORMSEPの値を加えた値とする。

(1)一般実体名並び,識別子参照並び,名前並び,名前字句並び,数並び及び数字句並  びに対しては,その並びに1個の字句しかない場合も含めて,その並びの中のそれぞ  れの字句について,その文字の個数と量NORMSEPの値とを加えた総和。 (2)その他の属性値に対しては,その値の中の文字の総数に,CDATA実体及びSDATA 実体の出現回数だけ量NORMSEPの値を加えた総和。

 属性値の正規の長さは,量LITLENの値以下でなければならない。

 1個の開始タグの中の,属性の値としての識別子参照値及び識別子参照並びの名前の 個数は,省略時値を含めて,量GRPCNTの値以下でなければならない。

 1個の属性指定並びの中の,属性の値としての一般実体名及び一般実体名並びの名前 の個数は,省略時値を含めて,量GRPCNTの値以下でなければならない。

SGML規格の案内へ戻る。 6.要素構造の案内へ戻る。 7.処理命令へ続く。