在W3C HTML 4.01 DTDs及更早版本中,内联注释经常在声明中使用。
例如,HTML 2.0 Strict DTD有:
<!ENTITY % HTML.Version
"-//IETF//DTD HTML 2.0 Strict//EN"
-- Typical usage:
<!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML Strict//EN">
<html>
...
</html>
--
>
其中HTML
实体声明包含两个双连字符--
之间的注释。
然而,DTD验证器似乎没有拒绝这些内部注释并抛出错误。
验证器是错误的,还是W3C DTD格式不正确?
进一步研究,似乎这是由于 SGML 和 XML 规范之间的差异。
基本上,SGML将注释定义为beginning and ending,--
在声明构造<! >
内的任何位置,而XML需要对begin and end with <!--
和{{{{}}进行评论1}}分隔符,分别作为独立的构造。
因为版本4.01的HTML基于SGML,所以允许声明中的注释并被官方DTD使用。
但是,大多数DTD验证器似乎只检查是否符合更简单的XML规范,因此会被声明内注释,barfing错误搞糊涂。
答案 0 :(得分:1)
进一步研究,似乎这是由于SGML和XML规范之间的差异。
基本上,SGML将注释定义为beginning and ending - 在声明构造内的任何位置,而XML需要分别对begin and end with分隔符进行注释,作为独立构造。
因为版本4.01的HTML基于SGML,所以允许声明中的注释并被官方DTD使用。
但是,大多数DTD验证器似乎只检查是否符合更简单的XML规范,因此会被声明内注释,barfing错误搞糊涂。