XHTML的必要性是什么?

34

在一次采访中,我被问到一个我从未考虑过的问题,即“我们已经拥有了满足编写网页要求的HTML,那么XHTML有什么必要呢?”

我搜索了很多并阅读了很多文章,但我无法正确理解为什么会引入XHTML。请给我解释一下。

16个回答

33
因为它是有效的 XML。这有很大的帮助,因为您可以使用许多最初设计用于 XML 的工具,如 XML 解析器、XSLT、XPath、XQuery 等等。
普通 HTML 是 SGML 方言,而没有了解模式是无法解析的。
<ul>
    <li>one
    <li>two
    <li>three
</ul>

HTML是正确的,但不是正确的XML。如果你想解析它,你需要知道ul元素必须关闭,但li不需要。


1
@jcollum - 使用成千上万的已构建并测试过的 XML 工具和库不是一个有效的理由吗?嗯... - Andrew Grant
1
将XML添加到HTML中,可以为HTML提供数据验证和转换功能。它还允许更可靠的解析、查询和渲染。 - Dave Swersky
好的...没问题,这个问题有很多答案和很多观点,但是各位现在告诉我,如果我想回答面试官,那么什么是简短、简单且有说服力的答案呢? - djmzfKnm
使用XHTML可以更轻松地使用XML工具链来首先构建XHTML。我的网站使用XML模板引擎生成XHTML,内部/中间表示完全可以使用标准XML工具进行处理。在最终的输出生成阶段,如果Web浏览器不能正确支持XHTML,则将其转换为HTML4,但在后端仍然是全部XML。在我看来,使用标准XML工具来获得最终输出是最大的好处。 - Michael Ekstrand
(非X)HTML 的实现甚至不是一个很好的SGML方言——只需看看浏览器如何处理<tag/>,并将其与SGML规定进行比较,或者查看SGML允许的注释内容,然后将其与浏览器实际处理HTML注释的方式进行比较。它们基本上是无法协调的。 - hobbs
显示剩余6条评论

26

XHTML还允许您嵌入其他XML方言,如MathML、Ruby、SVG等。(如果需要,也可以将XHTML嵌入其他XML方言中。)

如果您只是“制作网页”,则不一定需要XHTML。但如果您需要以编程方式生成页面,则可能会发现用于生成XML的工具比生成HTML的工具更好。


XML的角色解释得非常好,谢谢!我为你投了赞成票 :) - djmzfKnm

24

我写这篇文章的目的是询问为什么那三篇提到浏览器一致性格式良好的 HTML 的帖子被投票否决了?

众所周知,HTML 是一个行业标准。浏览器被实现成按照 HTML 标准描述的方式呈现标记内容。不幸的是,在 HTML 中有些地方没有被定义得很好:如果用户忘记了关闭标签会发生什么?如果引用的图像找不到该怎么办?一些浏览器使用 'alt' 标签来作为占位符文本项,而有些浏览器则将 'alt' 标签显示为工具提示。浏览器中著名的“怪癖”模式就是由此产生的。因此,同一个网页可能会在不同的浏览器上展示不同的效果。

另外,随着 HTML 的使用增长,还存在另外一个问题:它是不可扩展的,即无法添加用户自定义标签。

XHTML 解决了上述问题:

  • 采用 XML 提供可扩展的标签。
  • 为 Web 浏览器提供“严格”标准。

XHTML 对结构有明确的规定,这些规定可以被程序自动实施。检查各种在线的“XHTML 验证器”,它们可以告诉您您的 XHTML 是否格式良好(并突出显示问题区域)。由于这些严格的规则,您的页面几乎可以保证在实施 XHTML 的所有浏览器上看起来都是相同的。

[注意] 如果您想验证上述内容,请参考文本“Head First XHTML 和 CSS”。


1
由于这些严格的规则,您的页面在实现XHTML的所有浏览器上看起来基本上是一样的。"more or less"的意思是"基本上"或"大致上"。 - djmzfKnm
2
@Prashant:如果浏览器声称支持XHTML,它会在开始渲染之前先验证xhtml。如果您向此类浏览器传递无效的xhtml页面,则会看到“格式无效”之类的消息。大多数网站不会这样做,因此浏览器变得宽容,所以您不会看到这个消息。 - Sesh
2
我的答案是“提供可扩展的标签,并确保页面在所有浏览器中显示相同”。就像我说的那样,请阅读那本简单书的第一章(《Head First XHTML和CSS》)。 - Sesh
1
@Andrew:我在谈论避免怪癖模式,因为每个浏览器都可以决定要做什么。 - Sesh
1
在HTML中,可以通过在顶部包含<!DOCTYPE html>来轻松避免怪异模式。这将在所有浏览器中触发完整的标准模式。 - Joeri Sebrechts
显示剩余6条评论

20
除 Johannes 的回答之外,HTML 过于宽松地解释和容忍,而 XHTML 的严格规范化消除了这种情况。
宽容性导致差异,进而导致浏览器不兼容,最终走向黑暗面。

容差非常有用。严格遵守XTHML DTD或模式将使X从XML中消失。就我而言,我希望尽可能长时间地避免应用程序/ xthml + xml的束缚。 - AnthonyWJones
3
不在这里。良好定义的XML子实现应该保持标准化。浏览器应该如何处理你的<myTag>? - annakata
3
黑暗面并不更强大。它只是更快、更容易、更具诱惑力。- 尤达 - Treb
@annakata: 是的,但是<tr rowID="12" />非常有用,浏览器不需要对其进行任何操作,但我的JavaScript库发现它很有用。 - AnthonyWJones
我认为这艘船已经启航了。是的,支持糟糕的HTML会导致浏览器膨胀,但所有浏览器都已经支持它,并且在可预见的未来仍将如此。 - jrockway

14

来自维基百科

XHTML文档需要严格符合标准,因此可以使用标准的XML工具进行自动化处理。这与HTML不同,后者需要一个相对复杂、宽松且通常是定制化的解析器。在许多方面上,XHTML可以被认为是HTML和XML的交集,因为它是HTML在XML中的重新表述。

使HTML符合XML标准允许更加一致地解析页面。例如,在HTML中,您可以允许标签顺序混乱,如:<b><u>test</b></u>,但现在不行了,它们必须按照打开的顺序关闭。这样的技术使DOM解析(现在在AJAX中广泛使用)容易。


换言之,这种技术的主要好处是针对浏览器本身,而不是网络开发人员。虽然网络开发人员可能会从中受益,但通常是在次要的意义上。 - AnthonyWJones
说了这么多,+1 是因为这才是 XHTML 的真正动机。 - AnthonyWJones

8

我相信你一定遇到过来自W3的这篇文章。从那篇文章中我们可以学到很多东西。简单来说,XHTML除了拥有HTML标签集合外,还遵守了XML规则。

最重要的区别:

* XHTML elements must be properly nested
* XHTML elements must always be closed
* XHTML elements must be in lowercase
* XHTML documents must have one root element

终于有一个问题我可以回答,但是我来晚了。 - Ian G
回答了“什么”,但没有解释“为什么”,-1 - jcollum
@jcollum- 我提供的链接中的第1.3节告诉您为什么需要使用XHTML。 - Perpetualcoder

8
我看到这里有很多被点赞的答案,但它们都对浏览器的工作原理做出了错误的假设。所以让我来发表一下我的看法。
首先,为什么需要XHTML?
根据权威解释
在一个两天的研讨会上讨论了是否需要一个基于XML的新版本HTML。研讨会的意见非常明确:使用基于XML的HTML,其他XML语言可以将XHTML的部分包含进去,而XHTML文档也可以包含其他标记语言的部分。我们还可以利用重新设计的机会来清理一些比较混乱的HTML部分,并增加一些新的必要功能,例如更好的表单。
简而言之,XHTML的创建有两个原因:
1.允许在同一文档中混合其他内容(如mathml和svg),并具有清晰的格式规则。
2.扩展和清理HTML。
使事情更容易验证不是设计目标,也不是必需的,因为HTML4验证器存在且全面。
XHTML对于浏览器来说更容易解析吗?
是和不是。XML比HTML标记混乱更容易解析,但是,除非您在XHTML页面中使用xhtml+xml或application/xml mime类型,否则浏览器会使用HTML解析引擎进行解析。然而,如果您使用xml mime类型,IE会卡住内容。这个行为在IE博客上有解释如果您使用text/html的mime类型,浏览器对XHTML和HTML的处理方式没有区别! 是的,他们有区别!你说谎了! 确实有区别,但只是由于文档类型声明。浏览器在HTML文档顶部使用文档类型声明来确定它们应该使用标准模式还是怪异模式(=错误模式)。所有有效的XHTML文档都包括一个触发标准模式的文档类型声明。但是,在HTML中,您可以通过在页面顶部包含"<!doctype html>"来获得相同的结果。 那么,您是在说XHTML没有用处吗? 一点也不是。XHTML有许多优点:
  • 它可以使用XML工具(如XSLT)进行转换
  • 它可以在服务器端代码中更容易地解析
  • 它可以集成自定义标记,同时仍然通过验证测试

那么,我应该使用它吗?

像往常一样,“取决于情况”。

  • 服务器端,可能有用。如果您想要使用XML的服务器端优势,则应使用XHTML变体,无论是XHTML1(HTML4序列化为XML)还是XHTML5(HTML5序列化为XML)。
  • 客户端,没有用处。 我强烈建议避免向用户提供XML MIME类型。 XML解析与优雅的错误处理不搭配,如果页面中有任何标记问题,则仅产生“XML解析错误”而不是文档。除非您从不编写错误,否则您需要优雅的错误处理。

HTML5呢?它与XHTML竞争吗?

不,它并不是这样的。HTML5有两种序列化方式,一种是HTML,另一种是XML。好处是现在两种方式都有严格的解析规则。无论你使用哪种方法,在所有浏览器中都会得到可预测的行为。然而,以HTML格式解析的HTML5具有优雅的错误处理的好处。那就是为什么我更喜欢这种方法。像往常一样,结果因人而异。

5
XHTML是鼓励开发“符合规范”的HTML的一种尝试。
HTML已经演化了十多年。它的实现及解析渲染它的浏览器的实现并不完全一致。这就是为什么跨浏览器兼容性成为一个主要问题的原因。
HTML基于SGML(标准通用标记语言)。XML也源于SGML,因此它们是某种方式的近亲。XHTML将两者结合起来,理论上提供了XML对HTML的好处。这包括可靠验证、查询和转换的明确定义的模式。

4

XHTML的创立是出于什么原因?

  • HTML不太具有可扩展性。XHTML通过引入命名空间解决了这个问题,以便可以内联包含诸如MathML或SVG等语言。
  • 与HTML 5之前使用的SGML(标准通用标记语言)相比,XMl的解析要简单得多。
  • 由于数量庞大且存在错误的网站,浏览器试图纠正不正确的标记。新的浏览器也必须尝试以同样的方式进行纠正。XHTML试图通过指定只有结构正确的代码才能显示来提高标准。

XHTML取得了多大的成功?

  • XHTML被广泛传播,但由于与Internet Explorer(直至8版本)不兼容,几乎总是以text/html MIME类型提供服务。如果作为XML提供服务,则其中许多页面实际上会发生错误。所以以上三个优点都没有真正实现。
  • 许多人选择使用XHTML,因为他们认为它将提供更好的未来兼容性。XHTML2.0已经停止开发,虽然HTML5将有一个XHTML串行化,但似乎受到很少关注。在可预见的未来,XHTML不提供未来的兼容性优势。MozillaSafari建议只使用HTML。
  • 带有严格DTD(文档类型定义)的HTML已经具有更加清晰的格式。HTML5将进一步提高标准,通过删除过渡性DTD,删除不必要的元素并定义解析带有一定向后兼容性的文档的标准方式。浏览器仍将对HTML串行化进行纠正错误,而不是强制修复标记,但至少它们会以相同的方式进行操作。那些关心正确代码的人无论如何都会使用验证器。

XHTML的必要性是什么?

XHTML拥有值得称赞的目标,也许它将来能够实现。我不能推荐XHTML,因为它可能提供的未来优势,当HTML现在已经更容易使用时。你只有在之前的代码或工具强制你使用XHTML时才需要使用它。


2

我认为这有助于浏览器正确地显示HTML而不做任何关于标签关闭位置的假设。每当浏览器做出假设时,你就会知道会发生什么。


这不是真的。即使您不关闭标签,HTML也已经定义得很好了。有些标签必须关闭,有些则不需要。来自http://www.w3.org/TR/html4/struct/lists.html的示例是正确的HTML!浏览器知道li标签不能嵌套。 - Johannes Weiss
关于这件事情最好的一点是,大多数人不理解哪些标签需要关闭,哪些不需要。因此,浏览器开始猜测你的意思。XML规则要求所有内容都必须关闭,这更简单明了。但浏览器也可以强制执行HTML规则! - Johannes Weiss

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