HTML5文档类型定义在哪里?

时间:2010-10-29 16:31:29

标签: html html5 dtd sgml

“旧”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

5 个答案:

答案 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,analyzedSGML 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最终会推出一款。