XHTML、HTML和XML之间的实际区别

8
以下是我的理解(如有错误请指出):
  • HTML5 是 HTML 的最新版本(或者至少即将发布),包含 XHTML 暂时没有的功能
  • 使用 MIME 类型 text/html 提供的 XHTML 与 HTML 渲染效果相同
  • 将 text/html 转换为 application/xhtml+xml 非常困难,因为它不是 HTML
  • XML 与 HTML 不兼容

所以我的问题是,除了标签的使用之外,XHTML 与 HTML 有什么关系?在实际应用中,使用 XHTML 有什么实际意义,还是没有?

4个回答

4

是的,HTML5将拥有一些XHTML目前还没有的功能(甚至是元素/标签)。它还会重新引入一些在XHTML中已被删除的HTML4标签(我想iframe就是其中之一)。

如果您想了解HTML4 / XHTML和HTML5之间的区别,请阅读维基百科关于HTML 5的条目:http://en.wikipedia.org/wiki/HTML_5#Differences_from_HTML_4.01.2FXHTML_1.x

然而,对于渲染的目的,XHTML并不等同于HTML。http://hixie.ch/advocacy/xhtml

XHTML更多地使用XML语法规则而非HTML。它基本上使用HTML的(大部分)元素(“标签”),同时遵循XML更严格的语法和语义。

它并不等同于HTML4以进行渲染。如果您使用XHTML的mime类型 - 因为它是XML - 如果操作不当,您可能会遇到令人讨厌的解析错误:

A nasty XHTML parse error

尽管存在这个问题,使用XHTML可以比HTML4在浏览器之间产生更一致的行为;由于HTML4不够严格,浏览器会尝试解释含糊不清的标记,并且浏览器的开发人员有一定的自由选择如何处理这些模棱两可的情况。这导致了不一致性,但是使用XHTML - 作为XML - 浏览器应该拒绝渲染页面,如果它是含糊不清的。

然而,XHTML可能会导致旧版浏览器出现问题,特别是对于空元素(自闭合标记),例如<br />;旧版浏览器不知道如何处理/,可能会认为它是标记名称的一部分,然后你就失去了换行符。

最后,我不知道你所说的“从text/html转换为application/xhtml+xml很困难,因为它不是HTML”的意思,但我鼓励你查看Elliotte Rusty Harold的书"Refactoring HTML"...它似乎是这个问题的300多页答案 ;)

浏览器不再有自由发挥的余地来解析HTML,因为HTML5定义了正确的解析算法。 - Ms2ger
浏览器从来没有自由地制定关于如何解析HTML的规则;只有如何处理错误。 - Quentin
@ms2ger - 很好的建议,我在那张图片之后的段落中应该使用"HTML4"这个术语而不仅是"HTML"。我正在进行编辑 :) - Richard JP Le Guen

1
HTML5是最新版本(或者至少即将发布)。
草案。不稳定。可能会有变化。不会很快发布。
XHTML作为MIME类型text/html与HTML在渲染方面相等。
多多少少。编写HTML兼容的XHTML比编写HTML或XHTML更费力,而且不能使用XHTML的任何有趣的部分。
从text/html转换为application/xhtml+xml很困难,因为它不是HTML。
实际上,从HTML转换为XHTML非常简单。Tidy可以为许多文档(包括所有有效的HTML文档)完成此操作。
XML与HTML不兼容。
更准确地说,HTML不是XML。
所以我的问题是,除了使用标签之外,XHTML与HTML有什么关系?使用XHTML的实际目的是什么,还是没有?
使用XHTML而不是XML的优点大致相当于使用汽车而不是一堆金属和塑料。 XML是构建标记语言的工具包。
使用XHTML而不是HTML的优点在于您可以将不同的标记语言混合到一个文档中,因此(例如)您可以拥有一个XHTML + SVG + MathML文档。这需要客户端支持所有涉及的语言(或者对于不受支持的语言进行优雅降级)。
不幸的是,由于Internet Explorer...这对大多数项目来说是不切实际的。
[doesn't support XHTML]

文件扩展名与浏览器如何处理文件有什么关系?在我的经验中,Web服务器如何处理文件更为重要。虽然我没有测试过,但如果您告诉Web服务器将“.xhtml”视为“.html”,那么就不会有问题,对吧? - craigmoliver
@craigmoliver — 是的,这将是一个问题,因为您将失去 XHTML 的所有好处(即混合命名空间文档)。 - Quentin

0
不,HTML5不会有XHTML没有的功能,因为它在同一文档中定义了XHTML5。

0
从程序员的角度来看:HTML在设计时具有较弱(或根本没有)结构约束,至少Web浏览器不需要这些约束就能产生某种形式的输出。每个浏览器都有自己的逻辑来尝试拼凑缺失的结构。
XHTML强制执行更严格的结构约束...它是XML的子集--比HTML更严格。更严格的语义允许:
  1. 跨浏览器使用更一致的算法--这意味着浏览器实现之间更加一致。
  2. 每次渲染的时钟周期更少--这意味着低功耗设备可以更好地处理渲染网页。
  3. 更严格的结构语义是“语义Web”的要求,这意味着可以利用结构来实现对网页中有用信息的一致提取。
XHTML5扩展了HTML以使Web更具交互性,据我所知,它可能比HTML对XHTML更重要,因为应该从一开始就强制执行更严格的语义。 XHTML5对协议进行了很多显著的改变。

关于Web上的XML与HTML - 好吧,浏览器需要一些基本的固定文档结构来理解文档,也许这不像过去那么重要了:我的意思是,XSLT和CSS可以将文档转换为适合Web浏览器的可呈现输出。然而,一个文档应该具有一些内在的文档式固定结构,对于没有现代Web技术的浏览器来说是有意义的。HTML4允许文档被结构化,以便像lynx这样的基本浏览器可以显示文档 - 毕竟lynx无法渲染CSS和样式元素,如图像。

XHTML5则完全处于另一个层次,可能直接排除了基本浏览器 - 但其固定标签词汇为Web浏览器、Web开发人员和设计师提供了含义。Web浏览器可能需要某些标签才能启用新的花哨功能 - 但词汇本身比将Web页面视为特别制作的XML文档更加优雅。


XHTML并没有“更严格的结构语义”。它具有相同的语义,更简单的结构和更严格的错误处理规则。(1)不是这样的。它只是在浏览器开始更加关注规范而不是在未阅读SGML规范的情况下编写标记混乱解析器时出现的。(2)这是由于更简单的结构和错误处理要求所致。这些天来已经无足轻重,“低功耗设备”比XHTML首次推出时更加强大了。 - Quentin
(3) XHTML 没有添加任何 HTML 4.01 中不存在的语义(除了可以将命名空间与 RDF 等混合使用的可能性)。(X)HTML5 在语义方面正在朝着错误的方向发展(参见 http://www.w3.org/TR/html5/the-xhtml-syntax.html#the-marquee-element-0)。 - Quentin
@david 我同意(2)...然而,如果标签混乱的做法继续随着设计技术的发展而延续,那么“低功耗设备”现在会处于更糟糕的位置。如果你愿意,可以编辑我的答案并添加你的评论--看起来你的术语比我好:D - Hassan Syed

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