【发布时间】: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 格式不正确?
答案:
进一步研究,这似乎是由于 SGML 和 XML 规范之间的差异造成的。
本质上,SGML 将 cmets 定义为 beginning and ending 和 -- 在声明构造 <! > 内的任何位置,而 XML 要求 cmets 到 begin and end with <!-- 和 --> 分隔符分别作为独立的构造。
因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的 cmets 被允许并被官方 DTD 使用。
但是,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此会被声明内的 cmets、barfing 错误弄糊涂。
【问题讨论】:
-
这应该是有效的,但仅限于 SGML 语法(不是 XML)。您使用的是哪个解析器? (提醒一下:HTML 是一个 SGML DTD)
-
看来你是对的。我使用的是Validome validator,它仅用于验证 XML DTD。 (当我写这个问题时,我不知道 XML 和 SGML 的 DTD 规范是不同的)。谢谢!
标签: html xml comments dtd sgml