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

Posted

技术标签:

【中文标题】HTML/SGML/XML/DTD 声明中的注释【英文标题】:Comments inside HTML/SGML/XML/DTD declarations 【发布时间】:2016-01-18 17:22:09 【问题描述】:

在W3C html 4.01 DTDs 及更早的版本中,内联 cmets 经常在声明中使用。

例如,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 验证器似乎完全拒绝这些内部 cmets 并引发错误。

是验证器错误,还是 W3C DTD 格式不正确?


答案:

进一步研究,这似乎是由于 SGMLXML 规范之间的差异造成的。

本质上,SGML 将 cmets 定义为 beginning and ending 和 -- 在声明构造 &lt;! &gt; 内的任何位置,而 XML 要求 cmets 到 begin and end with &lt;!----&gt; 分隔符分别作为独立的构造。

因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的 cmets 被允许并被官方 DTD 使用。

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

【问题讨论】:

这应该是有效的,但仅限于 SGML 语法(不是 XML)。您使用的是哪个解析器? (提醒一下:HTML 是一个 SGML DTD) 看来你是对的。我使用的是Validome validator,它仅用于验证 XML DTD。 (当我写这个问题时,我不知道 XML 和 SGML 的 DTD 规范是不同的)。谢谢! 【参考方案1】:

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

本质上,SGML 将 cmets 定义为 beginning and ending,在声明结构中的任何地方都带有 -- ,而 XML 要求 cmets 分别以 begin and end with 分隔符作为独立的结构。

因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的 cmets 被允许并被官方 DTD 使用。

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

【讨论】:

以上是关于HTML/SGML/XML/DTD 声明中的注释的主要内容,如果未能解决你的问题,请参考以下文章

Java 29190917

在 try-with-resources 中声明的变量的注释?

Lua学习

找不到元素“上下文:注释配置”的声明

JSP

Python中注释与声明