[1] SGML の区切子機能の一つである mdo
(markup declaration open - マーク宣言開き)
は、マーク宣言の開始を識別します。
規格参照具象構文をはじめとするほとんどの具象構文では、
<! を mdo
に割り当てています。
mdo
が認知されるのは、適当な認知様相にあって、
mdo
に割り当てられた文字列の直後に名前または
mdc
または dso
または com
が続く場合のみです。
それ以外の場合には認知されず、単なる文字データとして扱われます。
実体中の文字列 | 規格参照具象構文の場合 | 解釈 |
mdo 名前 | <!type | マーク宣言の開始 |
mdo dso | <![ > | マーク区間宣言の開始 |
mdo com | <!-- | 注釈宣言の開始 |
mdo mdc | <!> | 空の注釈宣言 |
mdo
の後に名前が続く場合は、その名前はマーク宣言の種類を表す見出し語でなければなりません。
普通は ELEMENT
や ATTLIST
などですが、
SGML宣言の NAMES
で違った見出し語を指定している場合は、その名前
(要素型とか属性定義並びとか) になります。
(もっとも、そのような SGML 宣言が使われているという話は聞きません。)
[2] 素の SGML では、 SGML 宣言を開始する部分も mdo "SGML"
ですが、 WebSGML では "<!SGML"
になっています。
そもそも SGML 宣言では必ず規格参照構文を用いることになっているので、
実際上の違いはないので、どうして変更されたのかは分かりませんが、
Web SGML では SGML 宣言の外部参照の記述が可能になったので、
参照としての SGML 宣言も、文書実体の残りの部分に具象構文に関わらず
mdo
に <!
が用いられることを示すためにこうなっているのかもしれません。
[3] それはそうとして、変な具象構文を使っていると、
<!SGML ...> {document{ {header{ {title{ちょっとした例文}} }} {body{ {h{ちょっとした例文}} {p{ちょっとした例文を書いてみました。}} }} }}
のように記号が混じって微妙に変な雰囲気を醸し出すことになりますね。
もっとも、従来から文書型宣言と文書実現値で別の具象構文を使うことが出来た
(SCOPE
) のですから・・・と書こうとして気づいたのですけど、
文書実体中の文書型宣言や内部部分集合はどっちの具象構文で書くのでしょうか?
ちゃんと調べてみました。 SCOPE
が適用されるのは前書き
だそうですから、文書型宣言も連結型宣言もまるっきり含まれます。
それだけではなく、前書き
は、文書要素よりも前にある一切の物を含みます。
話が脱線しすぎているので、続きは SCOPE] に移動しましょう。
[4]
>>3 の例、 SGML では stagc
と etagc
はどちらも tagc
に統一されているので無理かも、と思いましたが、
NET ということにすれば一応は可能ですねぇ。
(名無しさん)