マーク宣言開き

mdo (SGML)

[1] SGML区切子機能の一つである mdo (markup declaration open - マーク宣言開き) は、マーク宣言の開始を識別します。

規格参照具象構文をはじめとするほとんどの具象構文では、 <!mdo に割り当てています。

mdo認知されるのは、適当な認知様相にあって、 mdo に割り当てられた文字列の直後に名前または mdc または dso または com が続く場合のみです。 それ以外の場合には認知されず、単なる文字データとして扱われます。

実体中の文字列規格参照具象構文の場合解釈
mdo 名前<!typeマーク宣言の開始
mdo dso<![ >マーク区間宣言の開始
mdo com<!--注釈宣言の開始
mdo mdc<!>空の注釈宣言

mdo の後に名前が続く場合は、その名前はマーク宣言の種類を表す見出し語でなければなりません。 普通は ELEMENTATTLIST などですが、 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 では stagcetagc はどちらも tagc に統一されているので無理かも、と思いましたが、 NET ということにすれば一応は可能ですねぇ。 (名無しさん)