为什么xml注释不能包含两个连字符


16

当XmlParser报告--xml注释中不允许使用两个连字符()时,我在配置文件的xml注释中应用了markdown 注释。

检查XML规范,出于与SGML解析器兼容的原因,似乎xml注释未设计为包含两个连字符。

为什么SGML解析器在注释中不允许双连字符?


2
我不认为您会得到比“因为该标准所说的”更好的答案
jk。

好吧,那是唯一的答案,然后我别无选择:-(,尽管可能会有更好的答案
。– OnesimusUnbound

Answers:


30

该页面概述了HTML / SGML的历史记录,以及这两个连续的连字符(双破折号)相当复杂的规则。

有关SGML的相关部分:

简而言之,注释开头和结尾的双破折号不会开始和结束注释。双破折号表示允许包含的注释中的更改。第一个-启动注释,并告诉浏览器允许注释包含>个字符而不会结束注释。第二个-不结束评论。它告诉浏览器,如果遇到>字符,则必须结束注释。如果添加了另一个-,则返回允许使用>字符。


7
您所指的部分。当我阅读--注释中的SGML规范打算使用的内容时,我会打转一下稍后将介绍的复杂性。
OnesimusUnbound,

1
--在评论中不要使用的建议对我来说似乎很好。但是,有没有一种标准的转义方法?假设我想创建(并共享)输出过滤器以确保foo -- bar永远不会导致问题。是否有SGML的等价物foo -\- bar?(不过,我确定它不是反斜线!)或-(请参阅此答案),还是其他?如果我们只是更换---- -,排出的是不可逆的。
2014年

12

因为双连字符 SGML中的注释定界符。在<!开始的SGML指令时,--表示注释。因此,基本上出于同样的原因,C ++注释不能包含*/


1
我认为这-->是评论分隔符。
OnesimusUnbound,

10
不它不是。<!开始SGML指令,>结束它。在SGML指令内--,开始和结束注释。
约尔格W¯¯米塔格

7
嗯,将您的评论添加到答案中,这很有启发性,因为这意味着您可以编写<!someRelevantSgmlTag-评论-someAttribute =“ blabla”-另一个评论->并且语义将是<!someRelevantSgmlTag someAttribute =“ blabla“>
Jimmy Hoffa,

1
嗯,很有道理。--> 实际上是两个标记,--用于定界注释和>结束SGML指令。现在,我对<![CDATA[...的]]>起源有了一个想法。
OnesimusUnbound,

我已经合并了评论。
Joris Timmermans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.