71

“旧” 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。我想这回答了我的问题:链接

4

5 回答 5

67

没有 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 需要非常宽松,以至于许多语法错误都不会被发现。

于 2013-03-06T11:14:05.073 回答
24

正确的。没有DTD。但是,HTML5 文档应该以<!DOCTYPE html> 所以有一个 DOCTYPE,但没有 DTD。

看:

于 2010-10-29T16:34:18.217 回答
8

我创建了一个 HTML5 DTD 用于我的 PHP XML 项目。它并不漂亮,但它适用于格式良好的 XHTML5(即 HTML5 表示为 XML)。

您可以在此处从我的 bitbucket 帐户中获取它:

https://bitbucket.org/kashbridge/dtd/overview

享受!

于 2015-02-16T14:40:31.593 回答
2

来自 sgmljs.net 的某些 Marcus 创建并分析HTML 5.1 的 SGML DTD,并在 XML-DEV 邮件列表中启动了一个线程以供审查和讨论。到目前为止,讨论围绕实体定义展开。

我刚刚在 http://sgmljs.net/docs/html5.html完成了对 W3C 的 HTML 5.1 建议的分析(来自标记语言而不是 Web 开发 PoV),我将其发布在这里以供审阅用于解析 HTML 5.1 的初始 SGML DTD 以及冗长的分析文本。

[…]

我知道 WHATWG 和 W3C 早已远离 SGML(以及大多数与 Web 相关的规范工作中的 XML),将其视为一种遗留技术,并在规范文本和其他地方采取了一种有点自以为是的态度。但是正如对 HTML5 语法的分析所表明的那样,他们基本上完全放弃了使用任何形式化方法(并且在分析中讨论了至少两个缺陷)。

目前还没有任何官方消息,但也许这一举措会受到关注,或者至少将其用户视为非官方资源。

于 2016-11-18T21:56:21.923 回答
0

我认为他们废除了旧的 DTD,现在我们只需使用以下内容开始 HTML 页面:<!DOCTYPE HTML>

也许 W3C 最终会推出一个。

于 2010-10-29T19:43:28.737 回答