【问题标题】:Where is the HTML5 Document Type Definition?HTML5 文档类型定义在哪里?
【发布时间】:2011-05-02 12:29:45
【问题描述】:

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

【问题讨论】:

标签: html dtd sgml


【解决方案1】:

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

见:

【讨论】:

  • @Šime Vidas DTD 源自 HTML 的 SGML 根源。 HTML5 不再基于 SGML,因此没有 DTD。
  • @Adam 但是 XHTML5 呢?它是 XML 的一个应用程序。所以,它应该有一个 DTD 或 XML Shema,对吧?
  • @Šime Vidas 好点。我不知道 XHTML5。你是对的,它应该可以创建一个。我快速搜索了一下是否有人做了一个,我找到了johndyer.name/post/… 和 HTML5 实体w3.org/2003/entities/2007/w3centities-f.ent
  • @Adam 非常好。 XML Shema 的链接在这里:blogs.msdn.com/b/webdevtools/archive/2009/11/18/…
  • @pythonforspss.org 浏览器从 doctype 中知道该文档是 HTML5。现代浏览器知道如何解释 HTML5。
【解决方案2】:

我认为他们取消了旧的 DTD,现在我们只需使用以下格式开始 HTML 页面:<!DOCTYPE HTML>

也许 W3C 最终会推出一个。

【讨论】:

    【解决方案3】:

    没有 HTML5 DTD。 HTML5 RC 在讨论 XHTML 序列化时明确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 需要非常宽松,以至于许多语法错误都不会被发现。

    【讨论】:

    • DTD 是一个 SGML 和 XML 的东西。 XML DTD 在表达能力上比 SGML DTD 更受限制。 XML 也是该领域 SGML 的简化版。
    • @JukkaK.Korpela - 不确定是否仍然关心这一点,但您的人造 HTML5 DTD 中的 条目似乎绝对不正确。唯一允许的子项是 ,这似乎不包括在内,而无效的子项通过 %phrase; 列出
    • 这一切太不幸了;有些事情做起来毫无意义,例如body 标签内的 head 标签,或 span 内的 div。因此,应该有一种方法来验证您的 HTML 语法,就像 javascript 在您犯逻辑错误时会抛出逻辑错误一样。
    【解决方案4】:

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

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

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

    享受吧!

    【讨论】:

    • Jukka K. Korpela 的 DTD 已经在接受的答案@Hibou57 中被自己提到过。
    • 另一个用于 HTML5 的手动 DTD 在 answer 中提供给这个 related question
    • Another answer 对同一个问题也提供了一个可能的解决方案,尽管尚不完全清楚 DTD 是否真的是开源的。
    【解决方案5】:

    来自 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(来自标记语言而不是 web 开发 PoV),我将其发布在这里以供审查 用于解析 HTML 5.1 的初始 SGML DTD 形式,以及冗长的 分析文本。

    […]

    我知道 WHATWG 和 W3C 早已远离 SGML (以及大多数与 Web 相关的规范工作中的 XML),将其视为 传统的技术和有点自以为是的态度 规范文本和其他地方。但是作为对 HTML5 的分析 语法表明,他们基本上放弃了使用任何形式化的方法 总而言之(并且它显示了至少两个缺陷中讨论的 分析)。

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

    【讨论】:

    • 我发现有关该倡议的信息很有趣,而且这个答案肯定带来的不仅仅是一个链接,@cpburnz(和其他评论者)。这个问答中的Another answer 有非常相似的内容——只是一个链接和另一个非官方 HTML 5 DTD 的简短描述。它得到了 6 票赞成,没有反对票。我包含了 xml-dev 列表中的相关信息,但我现在没有找到更好的方法来回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2016-10-27
    • 2011-04-26
    • 2012-03-21
    相关资源
    最近更新 更多