2012-05-31 12 views
38
<!-- here is some comment -- 
          ^
          | 
        what can be here apart from '>'? 

XMLはコメントの中に ' - 'のように見えません。私はどこかで ' - 'は<! ... >の中のいくつかのモードを切り替えると読んでいますが、<!-- -- -- -->(偶数は-- s)も無効です。それが何らかの歴史的な特徴であれば、それの「プロ」な部分は何ですか? (「contra」の部分はコメントに--を持つことができません)。XMLコメントと " - "

コメント処理を複雑にする理由は、 ' - >'のコメントを終わらせずに ' - 'を許可するのはなぜですか?標準文書から

答えて

31

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

[定義:コメントは他の マークアップ外の文書のどこに表示されることがあります。さらに、文法によって許可された場所で、文書タイプ 宣言内に現れることがあります。これらは文書の文字データの一部ではありません。 XMLプロセッサは、アプリケーションがコメントのテキストを取り出すことができるようにすることができるが、それを にすることはできない。 compatibilityについては、 コメント内に文字列 " - "(二重ハイフン)を使用しないでください。] コメント内でパラメータエンティティ参照を認識してはいけません。

+0

"pro"はSGMLとの互換性です。 –

+1

私はそれをエンジニアリングトレードオフと呼んでいます。 – asawyer

16

--は、SGMLとの互換性を保つことはできません。 On SGML and HTMLから:

は、ホワイトスペース(」!< 『)のマークアップ宣言オープン 区切り文字の間で許可されていないとコメントオープン区切り文字(』 - 『)が、』コメント終了区切り子(間で許可 です - ")とマークアップ 宣言の終了区切り文字(" > ")です。一般的なエラーは、コメント内にハイフン( "---")の 文字列を含めることです。著者は、 のコメントの中に2つ以上の隣接するハイフンを置かないでください。

だから、SGML <!中と>開閉、「マークアップ宣言」と--開き、コメントを閉じます。

19

SGMLであり、人々が互換性を壊すことを望んでいなかったので、それはXMLの愚かなルールの1つです。なぜSGMLに入っているのかは、誰もが推測しているのだろう。おそらく、元のパーサーに3行のコードを保存したからだろう。

26

多分それは誰かのために役立つことがあります。したがって、この

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

のような自然に通常の方法では動作しませんでした

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

、私: - 私はで始まるXMLでのコマンドラインパラメータをコメントアウトしたいという、問題がありました-がUTF-8に相当する場合は&#x002D;となり、コメント内では許容されることが判明しました。

だから私の場合は、文字列

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

が正しく解析され、コメントの一部にすることができます。

もちろん見た目はちょっと醜いですが、誰かがXMLのコメントとして文字列を保持したい場合は、それでも何もしないほうが良いと思います。

+14

また、エスケープシーケンス '-'を使用することもできます。これは、Unicodeバージョンよりも少し短いASCIIエスケープバージョンです。 – ricovox

+1

または '-'(アスキー/ユニコード16進数) – Vojta

関連する問題