为什么在XML中<!DOCTYPE>是必需的?

3
我正在阅读W3Schools关于XHTML的本页面,其中提到<!DOCTYPE>在XHTML文档中是强制性的。我的问题仅仅是理论上的:这个规则从哪里来?我的意思是,我已经阅读了许多有关XML的教程,但没有一篇说必须始终有一个DOCTYPE声明,只有在需要验证时才需要。因此,XHTML是一个XML文档,我尝试阅读XHTML DTD(strict),但我没有找到一行说DOCTYPE是强制性的。

XHTML是XML应用程序并不意味着适用于XHTML的每个规则都必须适用于所有XML文档。XML文档也不都需要xmlns属性。 - Mr Lister
W3schools是错误的。在XHTML 5中,doctype是可选的 - Alohci
2个回答

4

<!DOCTYPE>在XML中不是强制性的

正如@Lashane所回答的那样,在XHTML中是强制性的。在XML中,doctypedecl可选的

[1]   document    ::= prolog element Misc*
[22]  prolog      ::= XMLDecl? Misc* (doctypedecl Misc*)?
[28]  doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'

XHTML可以增加额外的要求,只要这些要求不与XML相矛盾,它仍然是XML。这个DOCTYPE要求完全符合XML的要求,没有任何矛盾。


1

这个规则来自于xhtml标准

在文档的根元素之前必须有一个DOCTYPE声明。 DOCTYPE声明中包含的公共标识符必须引用在DTDs中使用相应的正式公共标识符找到的三个DTD之一。系统标识符可以更改以反映本地系统约定。


1
该文档已经过时了。首先,现在有超过三个XHTML DTDs... - Mr Lister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接