<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<TITLE>空要素のタグについて</TITLE>
</HEAD>
<BODY BGCOLOR="#FCFCFC">
<!--BODY BACKGROUND="/~miuraj/images/sgml1.gif"-->
<H2>空要素のタグについて</H2>
<HR>
ちょっと、追加した。
<HR>
HTMLですと、よく、
<P>
<CENTER>
<STRONG>
&lt;IMG SRC="http://www.meiji.ac.jp/images/???.gif"&gt;
<P>
とか
<P>
&lt;BR&gt;
</STRONG>
</CENTER>
<P>
といった記述があります。このとき、別に、上記記述がある場所に、画像のデータがあるわけじゃなく、別の場所(ファイル)に画像データがある。
<BR>
&lt;IMG&gt;自体の内容は、存在しない、「空」なわけですね。&lt;BR&gt;にいたっては、書くまでもないでしょう。
<P>
でも、実際には「空」かどうかは、あまり気にしない(んなことないか)。
そこに画像なり何なりを埋め込むのは、アプリケーションの責任ですよね。
<BR>
# DTDで定義されている、相当のタグを入れればいいわけで。もちろん、DTDの方は、それなりの工夫がいりますけど。
<P>
一方、XMLではどうするか。「空」要素(EmptyElemTag)をXML-RRは、
<P>
<CENTER>
<STRONG>
EmptyElemTag ::= '&lt;'Name (S Attribute)* S? '/&gt;'(以下略)
</STRONG>
</CENTER>
<P>
と定義してます。これは、空要素タグ(EmptyElemTag)は、
	<UL>
	<LI><STRONG>&lt;</STRONG> で始まる
	<LI>次に要素名(<STRONG>Name</STRONG>)を記述
	<LI>次に「空白(white space(<STRONG>S</STRONG>)、属性(<STRONG>Attribute</STRONG>)」を記述(このペアは0個以上(<STRONG>*</STRONG>))
	<LI>次に空白(white space(<STRONG>S</STRONG>)を記述(0または1個(<STRONG>?</STRONG>))
	<LI>最後に<STRONG>/&gt;</STRONG>を記述し、タグを閉じる
	</UL>
という書き方をするということ。
<P>
ということは、さっきの<STRONG>IMG</STRONG>のようなものは、
<P>
<CENTER>
<STRONG>
&lt;IMG SRC="http://www.meiji.ac.jp/images/???.gif"/&gt;
<P>
とか
<P>
&lt;BR/&gt;
</STRONG>
</STRONG>
</CENTER>
<P>
となるわけですね。もちろん、XML-WDの上記定義の直前には、
<P>
	<DL>
	<DD>If an element is empty, it may be represented either by a start-tag immediately followed by an end-tag, or by an empty-element tag.
	</DL>
<P>
と書いてありますから、
<P>
<CENTER>
<STRONG>
&lt;BR&gt;&lt;/BR&gt;
</STRONG>
</CENTER>
<P>
としてもいい。
<P>
ここで、注目すべきは、最後の<STRONG>/&gt;</STRONG>。
<BR>
<A HREF="./tagomit.html">タグの省略</A>に書きましたが、XMLでは「タグは省略できない」わけです。なのに、
<P>
<CENTER>
<STRONG>
&lt;IMG SRC="http://www.meiji.ac.jp/images/???.gif"/&gt;
</STRONG>
</CENTER>
<P>
には終了タグはない。矛盾してますよね。
<P>
実はOK。
<BR>
SGMLでは、SGML宣言の区切り子に関する定義で「簡略終了タグ」というものが定義できて、
<P>
<CENTER>
<STRONG>
NET　　/&gt;
</STRONG>
</CENTER>
<P>
と宣言しておくと、文書内で、それが出てきた時点で(必要なら開始タグを閉じて、)終了タグがあると(おそらく)判断されるから(かな?)。
<BR>
というわけで、仮にXMLのSGML宣言が実在するとするならば、上記のように宣言されるはずです。
<BR>
# あと、<STRONG>SHORTTAG　YES</STRONG>も
<P>
ちなみに、SGMLでは通常(という書き方は嫌いですが)、<STRONG>NET</STRONG>は<STRONG>/</STRONG>で、これを変更することは(おそらく、ほとんど)無いと思います。
<HR>
1998.10.19
<BR>
思い付きでちょっと追加。
<P>
XMLってDTDが無くてもいい。無くてもいいというか、まぁ、そんな感じですよね。
<BR>
SGMLの場合、文書をチェックするときは、DTDが絶対なくてはいけない。
DTDを文書をチェックする前に確認するから。
<BR>
XMLにはそのDTDがないわけだから、ある要素が空(empty)なのかどうかは、文書を
みないとわからない。
<BR>
勝手な想像だけど、空要素の終了タグが<STRONT>/&gt;</STRONG>なら、
すぐ空だってわかるってわけかな。
<HR>
1999.11.27
<BR>
再び追加。
<P>
SGMLのAnnex K,L(TC2,3)が正式に規格に取り込まれると、SGML宣言がチョット異なる
ので、以上の説明が若干変わってきます。
<BR>
Annex K で、NESTC とかいう新しい区切り子を導入した上で、
Annex L では NET を &gt; として、 NESTC を / と定義するようです。
あと、他にいくつか、新たな定義が加わって、、、
<BR>
といった感じです。
<HR>
<A HREF="index.html">XML入門</A>へ戻る
<HR>
<ADDRESS>
miuraj@isc.meiji.ac.jp
</ADDRESS>
</BODY>
</HTML>
