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