xmlコメントに2つのハイフンを含めることができないのはなぜですか


15

XmlParserが2つのハイフン(--)がxmlコメントで許可されていないことを報告したときに、構成ファイルのxmlコメントにマークダウンコメントを適用していました。

XML仕様を確認すると、xmlコメントはSGMLパーサーとの互換性の理由から2つのハイフンを含むように設計されていないようです。

SGMLパーサーがコメントで二重ハイフンを許可しないのはなぜですか?


2
私は、「それは標準が言うことだから」あなたはより良い答えを得るだろうとは思わない
JK。

まあ、それが唯一の答えです、それから私は選択の余地がありません:-(、それよりも良い答えがあるかもしれませんが
。– OnesimusUnbound

回答:


29

このページでは、HTML / SGMLの歴史のかなりの部分と、これら2つの連続したハイフン(二重ダッシュ)のやや複雑な規則について概説しています。

SGMLに関連する部分:

簡単に言うと、コメントの開始と終了の二重ダッシュはコメントの開始と終了ではありません。二重ダッシュは、コメントに含めることができる内容の変更を示します。最初の-コメントを開始し、コメントを終了せずにコメントに>文字を含めることが許可されていることをブラウザに伝えます。2番目-コメントは終了しません。ブラウザに>文字を検出した場合、コメントを終了する必要があることを伝えます。別の-が追加された場合、>文字の許可に戻ります。


7
参照しているセクション--コメント内でSGML仕様の意図を読んだとき、私の頭は後で紹介する複雑さを振り返ります。
OnesimusUnbound

1
--コメント内で絶対に使用しないようにというアドバイスは、私には良いようです。しかし、それをエスケープする標準的な方法はありますか?出力フィルターを作成(および共有)してfoo -- bar、問題が発生しないようにします。SGMLに相当するものはありfoo -\- barますか?(ただし、バックスラッシュではないはずです!)または-この回答を参照)または他の何か?私達はちょうど交換した場合---- -、エスケープは可逆的ではありません。
ファジーな14年

11

なぜなら、ダブルハイフン SGMLのコメント区切り文字だからです。<!SGML命令を開始し、--コメントを示します。したがって、基本的には、同じ理由でC ++コメントにを含めることはできません*/


1
-->コメントの区切り文字だと思います。
-OnesimusUnbound

10
いいえそうではありません。<!SGML命令を開始し、>終了します。SGML命令内で--は、コメントの開始と終了の両方が行われます。
ヨルグWミットタグ

7
答えにコメントを追加します。これは、<!someRelevantSgmlTag-コメント-someAttribute = "blabla"-別のコメント->を記述でき、セマンティックな意味が<!someRelevantSgmlTag someAttribute = " blabla ">
ジミー・ホッファ

1
ああ、理にかなっています。--> 実際には2つのトークンで、--コメントを区切る>ため、およびSGML命令を終了するためです。今、私は<![CDATA[... どこから]]>生まれたのかを考えています。
OnesimusUnbound

コメントをマージしました。
ジョリスティマーマンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.