HTML5不是基于SGML,那么它是基于什么呢?

18

4
不要将w3schools作为信息来源,仅用于娱乐。请参考http://w3fools.com。您可以在任何真正的HTML5材料中找到答案,例如W3C HTML5 CR。 - Jukka K. Korpela
可能是重复的问题:HTML5不基于SGML,因此不需要引用DTD - Jukka K. Korpela
2个回答

20
HTML5标准规定了两种序列化: "html" 和 "xml"。 "xml" 是一个有效的 XML 序列化(它又是 SGML 的一个子集)。 "html" 不再基于任何特定的序列化标准,它有自己完整的序列化。这就是区别所在:HTML4 有一个 "sgml" 序列化和一个 "xml" 序列化(称为 XHTML 1.0)。
当然,HTML5 在很大程度上基于 HTML4(基于 SGML)和 XHTML(基于 HTML4 和 XML)。
还请参阅 HTML5 规范的历史部分

2
因为HTML5明确允许未声明的专有标签,所以没有DTD,HTML5不基于SGML,而是它自己的标准。目前尚未定义正确的解析方法,但据我所知,这正在进行中。 - cljk

2

HTML 5标准基于什么?

它基于浏览器的实际行为。

在2002年至2005年期间,Ian Hickson检查了每个浏览器,并找到了它们在处理某些HTML时创建DOM树的所有解析边缘情况。

例如

例如,这个(无效的)HTML应该有什么样的DOM树:

<!DOCTYPE html><em><p>XY</p></em>

浏览器似乎对这个树结构达成了一致:

  • DOCTYPE: html
  • HTML
    • HEAD
    • BODY
      • EM
        • P
          • #text: XY

即使它是无效的html,浏览器也会将其解析为您想要的内容。您的浏览器最后应该做的事情是拒绝显示完全可以理解的HTML。

那么这个无效的html怎么办:

<!DOCTYPE html><em><p>X</em>Y</p>

IE: Y同时是pbody的子元素。这违反了DOM规范(注释只能有一个父级),但这是HTML作者想要的。

Opera:创建了一个有效的DOM树,但未强调X,违反了CSS规范。

MozillaSafari:将其转换为有效的DOM树,但未强调Y(这是作者想要的)。

  • DOCTYPE:html
  • HTML
    • HEAD
      • BODY
        • EM
        • P
          • EM
            • #text: X
          • #text: Y

这意味着不同的浏览器对如何处理HTML有不同的看法(因此需要HTML标准)。

解析器无法说:

好吧,HTML应该是SGML的子集。如果您的HTML格式不正确,则结果是未定义的。

还不够好

网络需要一个标准来反映浏览器应如何解析HTML。 W3C没有做到这一点。他们讨厌HTML,并希望每个人都将他们美丽的SGML版本的HTML移动到一个xml化的HTML版本:xhtml。

HTML 5标准旨在在实际应用中使用。需要定义如何处理格式不正确的HTML,并定义浏览器应如何处理它。它基于对所有现有实现的调查,并选择共识或应该达成共识的内容。

这就带我们来到HTML5

从HTML5规范中,它们清楚地说明:

虽然本规范中描述的HTML语法与SGML和XML密切相关,但它是一种具有自己解析规则的单独语言。

一些早期版本的HTML(特别是从HTML2到HTML4)基于SGML并使用了SGML解析规则。但是,几乎没有任何Web浏览器曾经为HTML文档实施真正的SGML解析;历史上唯一严格处理HTML作为SGML应用程序的用户代理是验证器。由此产生的混乱-验证器声称文档具有一种表示形式,而广泛部署的Web浏览器互操作地实现了不同的表示形式-浪费了数十年的生产力。因此,HTML的这个版本返回到了非SGML基础上。

换句话说(他们也这样说):

  • 符合HTML5解析规则的任何解析器都是HTML5解析器
HTML5没有语法。没有正则表达式、词法分析器、BNF或EBNF可以用来解析HTML。
为了正确地将HTML解析为HTML5标准,您必须实现HTML5标准中描述的(非常详细的)算法。
如果您的解析器不能处理无效的HTML,则这是您的解析器的错误。

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