HTML 4.01 http://www.w3.org/TR/html401/sgml/dtd.html
XHTML 1.0 http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict
此DTD指定嵌套元素的规则 – “哪些类型的元素可能出现在哪些类型的元素中”。我在这里为XHTML 1.0做了一个图(对不起,我不再有这个资源)
我想更新该图表与一个新的版本,也包括新的HTML5元素。但是,似乎没有HTML5 DTD。看起来嵌套规则是由HTML5中定义的各种内容模型定义的。
所以没有DTD,正确吗?
后续问题:有没有什么原因,HTML5中没有DTD? DTD是为所有不同类型的元素定义嵌套规则的一个很好的方法。为什么他们不包括这样的东西?
更新:我发现这个:http://www.w3.org/TR/html5/dom.html#kinds-of-content我想,这是最接近有一个DTD。
更新:Visual Studio Team为XHTML5创建了一个XML模式。我猜这回答我的问题:http://blogs.msdn.com/b/webdevtools/archive/2009/11/18/html-5-intellisense-and-validation-schema-for-visual-studio-2008-and-visual-web-developer.aspx
解决方法
DTD被HTML5的设计者认为在表达能力方面太有限,而HTML5验证器(基本上是http://validator.nu的HTML5模式及其在http://validator.w3.org的副本)使用模式和特别检查,而不是基于DTD的验证。
此外,HTML5的设计使得编写DTD是不可能的。例如,没有SGML方法来捕获HTML5规则,以“data-”开头并符合某些一般规则的任何属性名称都是有效的。在SGML中,属性需要单独列出,因此DTD需要是无限的。
有可能设计对应于HTML5的DTD,有些遗漏,或许还有一些额外的规则,但它们不会真的是HTML5 DTD。我的experiment的想法是不是很鼓舞人心:太多的局限性,太棘手,DTD需要如此宽容,许多语法错误都不会被捕获。