我想用一个新版本来更新该图,其中还包括新的HTML5元素。但是,似乎没有HTML5 DTD。看来嵌套规则是由HTML5中定义的各种内容模型定义的。
所以没有DTD,对吗?
后续问题: HTML5中没有DTD的原因吗?DTD是为所有不同类型的元素定义嵌套规则的好方法。他们为什么不包括这样的东西?
没有HTML5 DTD。HTML5 RC 在讨论XHTML序列化时明确指出了这一点,这显然也适用于HTML序列化。
HTML5的设计者认为DTD的表达能力太受限制,因此使用HTML5验证器(基本上是http://validator.nu的HTML5模式及其在http://validator.w3.org/nu/的副本)。模式和临时检查,而不是基于DTD的验证。
而且,HTML5的设计使其不可能编写DTD。例如,没有SGML方式可以捕获HTML5规则,即任何以“ data-”开头并符合某些通用规则的属性名称都是有效的。在SGML中,属性需要单独列出,因此DTD必须是无限的。
可以设计一些与HTML5相对应的DTD,但有一些遗漏之处,也可以施加一些额外的规则,但是它们并不是真正的HTML5 DTD。我对该想法的实验并不十分令人鼓舞:太多的限制,太多的棘手问题和DTD必须太宽容,以至于无法捕获许多语法错误。