HTML / SGML / XML / DTD声明中的注释

时间:2015-10-20 07:02:42

标签: html xml comments dtd sgml

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错误搞糊涂。

1 个答案:

答案 0 :(得分:1)

进一步研究,似乎这是由于SGML和XML规范之间的差异。

基本上,SGML将注释定义为beginning and ending - 在声明构造内的任何位置,而XML需要分别对begin and end with分隔符进行注释,作为独立构造。

因为版本4.01的HTML基于SGML,所以允许声明中的注释并被官方DTD使用。

但是,大多数DTD验证器似乎只检查是否符合更简单的XML规范,因此会被声明内注释,barfing错误搞糊涂。