23820


XMLは、

[code]

    <タグ>
    </タグ>
    
[/code]

ですが、単に

[code]

    <タグ>
    </>
    
[/code]

でもよさそうなのですが  
**質問１．** なぜ終了タグに名前が必要なのでしょうか？  
規格がそうなっている言われたらそれまでですが

思うに、名前が必要な理由として

[code]

    <タグ1>
        <タグ2>
    </タグ1>
        </タグ2>
    
[/code]

ということができるため？くらいしか思いつきません。  
**質問2．** 実際にこのようなことができるのでしょうか？


CC BY-SA 3.0
2016-04-07T06:19:50.333
23815
2017-04-06T02:23:48.187
7844
question
xml
XMLの終了タグに名前が必要なのはなぜ？


> 質問１． なぜ終了タグに名前が必要なのでしょうか？

たぶんですけどインラインでタグの入れ子にした時に分かりづらくなるからかなと思いました。

[code]

    <tag1>A<tag2>B<tag3>C<tag4>D</>E</>F</>G</>
    
[/code]

じゃあ改行してインデントつければ良いじゃないかと思いますが、XMLでは改行文字もデータとして扱うのでダメですよね。

> 質問2． 実際にこのようなことができるのでしょうか？

ツリー構造を保てないのでXMLでは書けないと思います。


CC BY-SA 3.0
2016-04-07T06:39:30.557
23818
2016-04-07T06:39:30.557
5008
23815
answer


XMLはもともとSGMLという別の言語の仕様を単純にしたサブセットとして設計されていました。そしてSGMLでは
**直前に開かれたタグを閉じる場合に限り**`</>`と終了タグを省略することができます。

質問1のような記述は許されていないため機能上は終了タグの名前を明記する必要性は無いのですが、もしすべての終了タグの省略を許す構文を採用するとSGML仕様に反してしまうので、省略を許さないように統一したのではないでしょうか。


CC BY-SA 3.0
2016-04-07T06:57:34.930
23820
2016-04-07T07:28:48.310
2016-04-07T07:28:48.310
5750
5750
23815
answer


質問2ですが、SGMLではエンプティエンドタグ というのがあって許されていますが、XMLでは許されてはいません。

なぜそうなっているか、ですが、おそらくは解釈を容易にするためだと思います。

参考：[SGML の短縮タグ機構](http://bakera.jp/yomoyama/shorttag)


CC BY-SA 3.0
2017-04-06T02:23:48.187
33805
2017-04-06T02:23:48.187
21392
23815
answer