HTML5语法 - HTML vs XHTML

34

尽管HTML5是HTML的未来之路,作为开发人员,我们有两个选项:XHTML语法和HTML语法。我已经使用XHTML作为我的主要文档类型约5年了,所以我非常熟悉它。

但我的问题是,考虑到非XML语法将被允许,有没有理由坚持有效的XML语法?除了偏好(兼容性等),是否选择其中一个会带来任何好处?就个人而言,如果不关闭标记,
现在对我来说是很自然的事情,但是如果我回到HTML语法,是否会有所收获?

更新: 我想知道是否有理由从XHTML切换到HTML语法?我已经使用XHTML多年了,不确定是否有理由切换回来。浏览器兼容性(IE有时会对application/xhtml+xml mime-type有点挑剔),等等?


1
没有什么阻止你使用常规的HTML关闭所有标签... - Evan Teran
5
@Evan - 是的,有一个问题;它是无效的!特别是像<br>这样的东西。 - Marc Gravell
2
HTML5 给你使用自闭合标签的选项。但在 HTML4 中这是无效的。 - Alex Barrett
4
不,那不是真的。在HTML4中,从技术上讲确实是这样的,因为HTML4仍然是基于SGML的语言。但是,如你所说,没有人真正遵循这个规则。HTML5不是基于SGML的,它没有这样一个愚蠢的规定。<br />在HTML5的HTML语法中与<br>完全相同。 - Xanthir
1
@Parrots:请查看http://mathiasbynens.be/notes/xhtml5。 - Mathias Bynens
显示剩余3条评论
10个回答

24
XHTML 语法的优点在于它是 XML,易于解析、理解和操作。而 HTML 语法对客户端来说更难处理。
胡说八道!HTML5 规范定义了如何以相对容易实现的方式解析 HTML,并正在开发易于集成到工具链中的现成解析器。甚至可以将 HTML5 解析器整合到 XML 工具链中,代替 XML 解析器。
但需要明白的是,在实践中,您很可能仍然使用 HTML,即使您认为自己正在使用基于 DOCTYPE 的 XHTML。如果您的内容作为 text/html 而不是 application/xhtml+xml 或其他 XML MIME 类型提供,则您的内容将被处理为 HTML。
使用 HTML5,您可以选择仅使用 HTML 语法,这意味着它仅兼容作为 text/html 提供和处理,而不是格式良好的 XML。或者使用仅限于 XHTML 语法,这意味着它是格式良好的 XML,但使用的 XML 功能与 HTML 不兼容。或者,您可以编写 Polyglot 文档,这是符合 HTML 和 XHTML 处理的兼容文档(原则上,这在概念上类似于编写符合附录 C 指南的 XHTML 1.0)。

确实。这就是所有浏览器一直以来都在做的事情。 - Mehrdad Afshari
3
Lachlan,实现起来并不容易,你和我都知道与 XML 解析器相比,HTML 5 解析器的数量仍然很少。 - karlcow
2
@Lachlan,你很清楚HTML5仍然是一份草案,可能会有所更改。据我了解,今天向公众提供的浏览器中没有一个完全实现了HTML5解析器规范,更不用说其他用户代理了。另一方面,XML解析器是无处不在的。也许有一天,HTML5解析器将像XML解析器一样方便使用,但现在还没有。也许有一天,IE将实现application/xhtml+xml,Web作者可以选择放弃text/html。与此同时,如果有人希望像我一样解析自己的网页,使用多语言文档是正确的方法。 - Alohci
karlcow,我说的是相对容易实现,考虑到html5lib是由一群没有实现解析器经验的人通过遵循规范来实现的,我认为我的说法是正确的。Alohci,是的,我知道HTML5由于其WD状态而不稳定。但我正在回应错误的说法,即解析HTML比解析XML要困难得多。事实上,浏览器尚未完成迁移到完全符合HTML5解析器,这并不是很重要,因为它们现有的解析器在实践中已足够处理现实世界的HTML。 - Lachlan Hunt
3
@Lachlan Hunt:解析不太严格的语法通常比更正式的语法更难。实用上讲,两者之间非常接近,几乎是同样的难度。我不明白的是,为什么他们不喜欢 XHTML 语法。HTML5 感觉像是一步后退,我只是如实陈述。新技术,喜欢它们...旧语法??那应该留在过去了。 - J. M. Becker

19
我想我的真正问题是是否有理由从XHTML转换到HTML语法? 我使用XHTML已经多年了,不确定是否有切换回去的理由。浏览器兼容性(IE有时候会对application/xhtml+xml mime-type有些挑剔),等等?
如先前的答案所提到的,text/html 将被解析为 HTML,而 application/xhtml+xml 则将被解析为 XML。因此,您应该使用与您使用的 MIME 类型相匹配的语法。
如果您现在正在提供 text/html 但使用 XHTML 语法,则应修复您的内容以使用 HTML5 语法。您可能已经很接近了,因为HTML5允许XML式的 / > 空元素语法用于空元素(始终为空的元素,如img和br)。
如果您现在使用application/xhtml+xml,如果您关心支持IE,则IE支持将是切换到text/html和HTML语法的原因。
尝试编写正确的HTML5和XHTML5的多语言文档(针对不同的MIME类型在相同的负载字节上为不同的浏览器提供支持)比看起来要困难得多,也不值得费这个劲。

8

2
抱歉,但这并没有真正回答我的问题。我明白 mine-type 是告诉浏览器使用哪种语法的,我是在问我自己应该使用哪种。我可以将 mime-type 设置为任何我想要的,所以我知道如何在两者之间切换。 - Parrots
1
@Parrots,但是你知道IE不支持application/xhtml+xml,对吧?所以我怀疑除了少数情况外,你不能使用任何mime类型。 - Ionuț G. Stan
@IonuțG.Stan:从caniuse来看,IE9及以上版本确实支持application/xhtml+xml - DavidRR
@DavidRR,我是在2009年回答这个问题的。就我个人而言,我仍在使用text/html和HTML语法。HTML具有容错性,而XHTML则没有。 - Ionuț G. Stan
@IonuțG.Stan:这些过去的六年中确实发生了很多变化。当然,HTML是容错的。但是Jeff Atwood认为,了解您的HTML无效的原因是有价值的。(是的,我知道Jeff的文章也可以追溯到2009年,但我认为内容仍然相关。) - DavidRR
显示剩余2条评论

2

当使用XHTML时,您可以通过更改命名空间来将其与其他XML内容(如MathML、SVG或您自己的专有格式)混合使用。此外,您还可以将XHTML嵌入到其他XML文档中。

(实际上,MathML和SVG也可以在非XML HTML5中使用,但它们是特例)


当使用XHTML时,您可以将其与其他XML内容混合在一起,例如MathML,SVG或您自己的专有格式,只需在某些点更改命名空间即可,但除了IE。 - Ionuț G. Stan
1
IE本来就不支持HTML5,对吧? - jalf
我一直有自由选择不称呼IE为网络浏览器。HTML5是为了兼容性而设计的,因此至少网页的某些部分将会正常工作。 - liori
@jalf,没错。好吧,这取决于你所说的支持是什么意思。HTML5被设计成向后兼容。它遵循优雅降级的原则。 - Ionuț G. Stan

1

XHTML的大部分好处并未实现。虽然我不建议在新项目中使用它,但作为text/html呈现的XHTML似乎是相当可管理和普及的,只要你遵循兼容性指南。将任何重要项目改回HTML序列化可能并不值得。


1

这并不是真的,有时候在网页上应当作为application/xhtml+xml提供XHTML,特别是当你需要使用一些XHTML的好处(请见文章下面的例子)。然而通常情况下,最好还是将HTML作为text/html提供。 - Alistair Knock

1

我喜欢XHTML,因为它迫使我编写良好的页面。XHTML有许多优点,因为浏览器解析速度更快,并且您需要制作格式良好的XML而不仅仅是HTML。此外,您需要使用MIME类型application/xhtml+xml提供页面,否则您将无法获得X的任何优势。 XHTML唯一的问题是它无法在IE8及更早版本中显示。


0

XHTML语法的优势在于它是XML。它可以轻松解析、理解和操作。HTML语法对客户端来说更难处理。

但最终,这只是语法问题。HTML5允许使用两种形式。


1
这不是真的。只要两者都是有效的,XML并不比HTML 4.01 Strict更容易解析。XML中自关闭标签背后的原因是它是一个定义标记语言的框架,所以人们不需要事先知道哪些是自关闭标签。另一方面,浏览器已经知道这些标签是什么,所以他们非常清楚在<br>之后不应该期望</br>。就是这样。 - Ionuț G. Stan
3
XPath 或 XSLT 是两种现成的技术,用于解析和操作 XML。它们不适用于 HTML。HTML 允许使用不仅是未关闭标签,还允许您按不同顺序关闭标签。所以不,那不是“全部”。 :) - jalf
1
HTML 4.01 Strict不允许您以不同的顺序关闭标签。仅仅因为有些人这样做并不意味着它是被允许的。HTML唯一困难的地方在于它没有强制执行严格的标记规则。XHTML要么正确,要么不正确。因此,根据标准定义的HTML是可以接受的。而我们在现实世界中所遇到的情况则是不可接受的。 - Ionuț G. Stan
2
此外,由于人们认为他们所写的是XHTML,实际上却是无效的HTML,因此他们认为XHTML很容易。但是有成千上万个无效的XHTML/HTML页面使用了XHTML transitional doctype。这是因为IE不支持XHTML,所以他们必须将标记发送为text/html。因此,没有XHTML/XML的优势。 - Ionuț G. Stan
2
@jalf:我个人使用XPath和XSLT处理HTML。这些技术与XML无关。它们在DOM上工作,并且HTML和XML都产生相同的DOM。HTML 5不允许标签顺序错误(这是解析错误。HTML 5永远不会破坏树结构)。 - Kornel
@ Ionuț G. Stan:相信我,即使它们在浏览器上不存在,这些优势仍然存在。您可以在服务器端执行非常酷的转换,并使用 XML 工具处理任何您想要的内容。 - J. M. Becker

0
更新:我想我的真正问题是是否有理由从XHTML切换到HTML语法?我已经使用XHTML多年了,不确定是否有理由切换回来。浏览器兼容性(IE有时对application/xhtml+xml mime-type有点挑剔),等等?
你必须认真考虑两件事情。你正在编写的语言和你正在发送的语言。Web由3个组成部分定义:
URI
资源 - 标记语言(文档)
协议 - HTTP(管理信息空间的工具)
您可以在桌面上使用XML语法编写文档,例如使用XHTML。在这个特定的环境中,如果您将扩展名“.xhtml”赋予文件名并在本地浏览器中打开它,它将被解析为XML。如果您将扩展名“.html”赋予文件名,则会将其解析为HTML。基本上,在您的作者工具中,它是XML,但一旦您使用工具处理它,这就不再重要了。

在 Web 上,您的资源通过 URI 进行标识并使用特定的 MIME 类型发送,目前大多数时候人们都使用 text/html。这个 MIME 类型 定义了客户端(浏览器、搜索引擎机器人等)处理文档的方式。如果您正在使用 XML 语法但使用 text/html 发送它,则该文档将由 HTML 解析器处理。

要将文档作为 XML 在网络上传输,必须将服务器配置为以 application/xhtml+xml 的形式进行发送。(请注意:IE8 及其以前版本不理解 application/xhtml+xml,它们将提供保存菜单。)

HTML5 抽象模型设计成可以采用几乎相同的 HTML 语法或 XML 语法编写 text/html。几乎是因为即使您使用 XML 语法(关闭空元素、属性周围的引号等),对于调用脚本和名称空间的复杂页面,XML 解析器和 HTML 解析器的处理方式也会导致问题。


0

2019年更新

W3关于XHTML的说法:

“有一个更新的规范建议在采用此规范的地方使用。新的实现应该遵循HTML规范的最新版本。”

因此,您应该使用HTML 5.*。


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