HTML5文档类型定义在哪里?


67

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


链接http://vidasp.net...将我重定向到此处
RubenGeert

@ pythonforspss.org是的。我不再拥有该域。我已删除该链接。感谢您通知我。
森那维达斯


这不是答案,但是如果您仍然对该问题感兴趣,那么您可能对此感兴趣:github.com/unsoup/validator
Graham

Answers:


63

没有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必须是如此宽松,以至于许多语法错误都不会被发现。


2
DTD是SGML和XML。XML DTD的表达能力甚至比SGML DTD还要受限制。在这方面,XML也是SGML的简化。
Jukka K. Korpela

@ JukkaK.Korpela-不知道是否仍然对此感兴趣,但是您的人造HTML5 DTD中的<colgroup>条目似乎绝对不正确。唯一允许的孩子是<col>,似乎没有包括在内,而无效的孩子则通过%phrase列出;
pgoetz 2015年

1
这一切真是不幸。有些事情是没有意义的,例如body标签中的head标签或span中的div。因此,应该有一种方法来验证您的HTML语法,就像javascript犯逻辑错误时会引发逻辑错误一样。
blagus

24

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

看到:


5
@ŠimeVidas DTD来自HTML的SGML根。HTML5不再基于SGML,因此没有DTD。
亚当

1
@Adam但是XHTML5呢?它是XML的应用程序。因此,它应该具有DTD或XML Shema,对吗?
森那维达斯

1
@ŠimeVidas好点。我不了解XHTML5。没错,应该可以创建一个。我进行了快速搜索,看是否有人创造了一个,并且找到了johndyer.name/post/…和HTML5实体w3.org/2003/entities/2007/w3centities-f.ent
Adam

1
@Adam太好了。在XML玛链接是在这里:blogs.msdn.com/b/webdevtools/archive/2009/11/18/...
森那维达斯

2
@ pythonforspss.org浏览器从doctype知道该文档是HTML5。现代浏览器知道如何解释HTML5。
亚当

7

我已经创建了HTML5 DTD以用于我的PHP XML项目。它虽然不漂亮,但是可以与格式良好的XHTML5(即表示为XML的HTML5)一起使用。

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

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

请享用!


Jukka K. Korpela的DTD已被他自己接受的答案@ Hibou57提及。
Palec

2

sgmljs.net的某些Marcus创建并分析HTML 5.1SGML 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语法的分析所表明的那样,他们实质上已经完全放弃了使用任何正式方法的使用(并且在分析中讨论了至少两个缺陷)。

尚无官方消息,但此计划可能会受到欢迎,或者至少将其用户视为非官方资源。


我发现有关该计划的信息很有趣,这个答案肯定带来的不仅仅是链接@cpburnz(和其他审阅者)。该问答中的另一个答案具有非常相似的内容–只是另一个非官方HTML 5 DTD的链接和简短描述。它有6票赞成票,0票没有票数。我从xml-dev列表中包含了相关信息,但现在没有更好的方法来回答这个问题。
Palec

0

我认为他们已经淘汰了旧的DTD,现在我们仅以以下内容开始HTML页面: <!DOCTYPE HTML>

也许W3C最终会面世。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.