XMLがコメントのネストを許可しないという特別な理由(解析が難しくなる以外)はありますか?
<!--
<!-- this is the foo element -->
<foo>bar</foo>
-->
?
XMLがコメントのネストを許可しないという特別な理由(解析が難しくなる以外)はありますか?
<!--
<!-- this is the foo element -->
<foo>bar</foo>
-->
?
構文を変更せずに、ネストされたコメントを許可することは完全に可能でした。XMLの設計者は、SGMLの互換性に大きな関心を持っていたため、そうしないことを選択しました。有効なSGMLドキュメントではないXMLドキュメントを許可していたはずです。
<! >
はマークアップ宣言--
の構文であり、コメントの開始と終了の構文であるためです。
コメントを開始する構文はコメントを閉じる構文と同じであるため、コメントをネストすることはできません。
おそらく、タグをネストできないのと同じ理由です。
<tag1 <tag2> foo </ tag2 >> <!-これは機能しません。->
コメントは実際には1種類のタグであり、他のタグと同じルールがコメントに適用されます。
更新: Quentinは、コメントは実際にはタグではないことを適切に指摘しています。それはまったく別のことです。ただし、実際のところ、コメントはタグと同じdelimiter-content-delimeterパターンに従います。コメントのルール(15)を、空のタグのルール(44)および開始タグのルール(40、41)と比較し、要素のルール(39)と比較します。要素はネストできますが(43)、要素は(39に戻る)start_tag-content-end_tagの組み合わせであり、コンテンツ部分を要素にすることができます。コメントも、要素のようではなく、個々のタグのように機能します。
さて、コメントはネストできないことを説明していますが、なぜそのように設計されたのかはわかりません。XMLの歴史については、その設計者の心に何があったのかを十分に理解していませんが、XMLはさらに一般的なSGMLの「アプリケーション」です。また、HTMLの導入後も十分に開発されており、HTMLのいくつかの欠陥に対処することを目的としていました。SGMLとHTMLはコメントに対して同じ構文を共有しており、XMLが同じ構文を継承していることを確認するだけで明らかです。したがって、XMLコメントは、主に前任者から継承されたため、そのように機能することを想像する必要があります。この決定は、XML開発が始まる前に行われたものです。
開始コメントタグは、最初の終了コメントタグに到達するまで、表示されるすべてのもの(より多くの開始コメントタグを含む)をコメントアウトします。その後、コメントは終了し、残りの終了コメントタグは認識されなくなります。HTMLと同じです。