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