空要素のタグについて


ちょっと、追加した。
HTMLですと、よく、

<IMG SRC="http://www.meiji.ac.jp/images/???.gif">

とか

<BR>

といった記述があります。このとき、別に、上記記述がある場所に、画像のデータがあるわけじゃなく、別の場所(ファイル)に画像データがある。
<IMG>自体の内容は、存在しない、「空」なわけですね。<BR>にいたっては、書くまでもないでしょう。

でも、実際には「空」かどうかは、あまり気にしない(んなことないか)。 そこに画像なり何なりを埋め込むのは、アプリケーションの責任ですよね。
# DTDで定義されている、相当のタグを入れればいいわけで。もちろん、DTDの方は、それなりの工夫がいりますけど。

一方、XMLではどうするか。「空」要素(EmptyElemTag)をXML-RRは、

EmptyElemTag ::= '<'Name (S Attribute)* S? '/>'(以下略)

と定義してます。これは、空要素タグ(EmptyElemTag)は、

という書き方をするということ。

ということは、さっきのIMGのようなものは、

<IMG SRC="http://www.meiji.ac.jp/images/???.gif"/>

とか

<BR/>

となるわけですね。もちろん、XML-WDの上記定義の直前には、

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.

と書いてありますから、

<BR></BR>

としてもいい。

ここで、注目すべきは、最後の/>
タグの省略に書きましたが、XMLでは「タグは省略できない」わけです。なのに、

<IMG SRC="http://www.meiji.ac.jp/images/???.gif"/>

には終了タグはない。矛盾してますよね。

実はOK。
SGMLでは、SGML宣言の区切り子に関する定義で「簡略終了タグ」というものが定義できて、

NET  />

と宣言しておくと、文書内で、それが出てきた時点で(必要なら開始タグを閉じて、)終了タグがあると(おそらく)判断されるから(かな?)。
というわけで、仮にXMLのSGML宣言が実在するとするならば、上記のように宣言されるはずです。
# あと、SHORTTAG YES

ちなみに、SGMLでは通常(という書き方は嫌いですが)、NET/で、これを変更することは(おそらく、ほとんど)無いと思います。


1998.10.19
思い付きでちょっと追加。

XMLってDTDが無くてもいい。無くてもいいというか、まぁ、そんな感じですよね。
SGMLの場合、文書をチェックするときは、DTDが絶対なくてはいけない。 DTDを文書をチェックする前に確認するから。
XMLにはそのDTDがないわけだから、ある要素が空(empty)なのかどうかは、文書を みないとわからない。
勝手な想像だけど、空要素の終了タグが/>なら、 すぐ空だってわかるってわけかな。


1999.11.27
再び追加。

SGMLのAnnex K,L(TC2,3)が正式に規格に取り込まれると、SGML宣言がチョット異なる ので、以上の説明が若干変わってきます。
Annex K で、NESTC とかいう新しい区切り子を導入した上で、 Annex L では NET を > として、 NESTC を / と定義するようです。 あと、他にいくつか、新たな定義が加わって、、、
といった感じです。


XML入門へ戻る
miuraj@isc.meiji.ac.jp