web-dev-qa-db-ja.com

XMLコメントと「-」

<!-- here is some comment --
                            ^
                            |
                    what can be here apart from '>'?

XMLはコメント内の '-'を好まないようです。 「-」が<! ... >の内部でいくつかのモードを切り替えることをどこかで読みましたが、<!-- -- -- -->(偶数の--s)も無効のようです。歴史的な機能である場合、「プロ」の部分は何ですか? (「コントラ」部分は、コメントに--を含めることができません)。

コメントの末尾に「->」だけを作成せずに、「-」を許可することでコメント処理を複雑にしている理由は何ですか?

56
Vi.

標準文書から:

http://www.w3.org/TR/REC-xml/#sec-comments

[定義:コメントは、他のマークアップ以外のドキュメントのどこにでも表示できます。さらに、それらは、文法で許可されている場所のドキュメントタイプ宣言内に表示される場合があります。これらはドキュメントの文字データの一部ではありません。 XMLプロセッサは、アプリケーションがコメントのテキストを取得できるようにする場合がありますが、そうする必要はありません。 互換性 の場合、文字列 "-"(ダブルハイフン)をコメント内に含めることはできません。]パラメーターエンティティ参照はコメント内で認識されません。

43
asawyer

たぶんそれは誰かに役立つかもしれません。問題がありました。XMLで始まるコマンドラインパラメーターをコメントアウトしたいのです。

<arg line="-v --line-break 0" />  

このように自然に普通の方法

<!-- <arg line="-v --line-break 0" /> -->

動作しませんでしたが、-はUTF-8に相当するものに置き換えられます&#x002D;動作し、コメント内で許容されます。

だから私の場合、文字列

<arg line="-v &#x002d;&#x002d;line-break 0" />

は正しく解析され、コメントの一部になる可能性があります。

もちろん、少しいように見えますが、誰かがXMLのコメントとして文字列を保持したい場合は、何もしないよりはましだと思います。

37
Daniel

それはSGMLにあり、人々が互換性を壊したくないので、XMLにあるそれらの愚かなルールの1つです。 SGMLに含まれている理由は誰でも推測できます。おそらく、元のパーサーで3行のコードを保存したためです。

28
Michael Kay

--は、SGMLとの互換性のために許可されていません。から SGMLおよびHTML上

空白は、マークアップ宣言のオープン区切り文字(「<!」)とコメントのオープン区切り文字(「-」)の間に許可されませんが、コメントのクローズ区切り文字(「-」)とマークアップ宣言のクローズ区切り文字( 「>」)。一般的なエラーは、コメント内にハイフン( "---")の文字列を含めることです。著者は、コメント内に2つ以上の隣接するハイフンを入れないでください。

SGMLで<!および>「マークアップ宣言」のオープンとクローズ、および--はコメントを開いたり閉じたりします。

21
RichardTowers