“旧”HTML / XHTML标准为其定义了DTD(文档类型定义):
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团队为XHTML5制作了XML Schema。我想这回答了我的问题: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
答案 0 :(得分:60)
没有HTML5 DTD。在讨论XHTML序列化时,HTML5 RC明确地says this,这显然也适用于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。我的experiment有这个想法并不是很令人鼓舞:太多的限制,太棘手了,DTD需要如此宽容,以至于许多语法错误都没有被捕获。
答案 1 :(得分:23)
正确。没有DTD。但是,HTML5文档应以<!DOCTYPE html>
开头
所以有一个DOCTYPE,但没有DTD。
请参阅:
答案 2 :(得分:7)
我创建了一个HTML5 DTD,用于我的PHP XML项目。它不是很漂亮,但它适用于结构良好的XHTML5(即HTML5表示为XML)。
您可以在我的bitbucket帐户中获取它:
https://bitbucket.org/kashbridge/dtd/overview
享受!
答案 3 :(得分:1)
创建了sgmljs.net的某些Marcus,analyzed和SGML DTD for HTML 5.1并开始thread in the XML-DEV mailing list进行审核和讨论。到目前为止,讨论围绕着实体定义。
我刚刚完成了对W3C HTML 5.1推荐的分析 http://sgmljs.net/docs/html5.html(来自标记语言,而不是 网站开发PoV),我在这里发布它以供审查 用于解析HTML 5.1的初始SGML DTD的形式,以及冗长的 分析文本。
[...]
我知道WHATWG和W3C已经远离SGML了 (和大多数与Web相关的规范工作中的XML),将其视为一个 遗产技术,并在一些有点放肆的态度 规范文本和其他地方。但正如对HTML5的分析一样 语法表明,他们基本上放弃了使用任何形式的方法 总之(它至少表明了两个中讨论的缺陷) 分析)。
还没有任何官方消息,但也许这个举措会引起关注,或者至少将其用户视为非官方资源。
答案 4 :(得分:0)
我认为他们取消了旧版DTD,现在我们只需启动HTML页面:<!DOCTYPE HTML>
也许W3C最终会推出一款。