关闭空标签:XHTML5还是HTML5?为什么选择一个而不是另一个?

3

在广泛阅读了HTML5和XHTML5,并阅读了这篇文章之后:Are (non-void) self-closing tags valid in HTML5?,我有一个非常简单的问题:

“有没有理由将HTML5序列化为XML?”

我明白:

  • HTML、XHTML、XML和HTML5之间的区别
  • 正确嵌套元素、使用小写字母、引用属性和关闭标签等是好的做法...
  • HTML5没有DTD,而XHTML有DTD和XML解析器
  • 如果我将页面指定为XHTML5(HTML5 doctype + XHTML模式),某些浏览器可能不会处理页面中的一些小错误等

因此问题是:

“在哪种情况下,在编写HTML5页面时遵循非常严格的XML规则会更好?

尤其是在像以下这样的事情上:

1)无内容元素

<img src="asdsad.jpg" /> compared with <img src="asdsad.jpg">
<area> compared with <area />
<meta> comparted with <meta/>

2) 已选中,下载等操作类似

<input type="checkbox" name="vehicle" value="Car" checked> VS
<input type="checkbox" name="vehicle" value="Car" checked="checked" />

我应该遵循HTML5标准,尽可能实现常识(小写,良好的嵌套),还是有一个好的理由让一家标准公司网站以XHTML5编码?


空元素可以在开标签中像这样“关闭”:<br />。HTML5不要求空元素被关闭。但是,如果您想要更严格的验证,或者如果您需要使您的文档可被XML解析器读取,那么您必须正确关闭所有HTML元素。来源:w3schools.com/html/html_elements.asp - Cichy
3个回答

2
我认为这主要与错误有关。如果您始终编写完美的HTML,则无论选择哪种mime类型+语法对都没有关系。
但是,当页面可能包含错误时,每种语法都有其优点。正常的HTML语法(作为text/html提供)意味着使用解析器来尝试最大限度地利用您的错误。您的内容将以某种方式呈现,并且在许多情况下,以您预期的方式呈现。但是,当它不能够呈现时,解决问题会因解析器进行的惊人修复而变得更加困难。
相反,如果使用XHTML语法(作为application/xhtml+xml提供),则情况恰恰相反。如果出现语法错误,则解析器将停止运行。在浏览器中,您将看到错误消息或仅看到检测到语法错误的位置之前的内容。但是,其他类型的错误可能更容易调试,因为XML解析器不会通过您的元素进行修改以修复错误。
例如,假设您有以下内容:
<style> td { font-weight:bold } </style>
<table>
  <tr>
  <td>
  <span>First</span>
  </td>
  <span>Second</span>
  </tr>
</table>

这是一个HTML内容模型错误,因为第二个span不在td元素中。但这不是XHTML语法错误(即它是XML格式正确的),所以XML解析器不会停止在它上面。
如果您使用HTML语法和mime类型,在浏览器中看到的将是:
Second First
因为HTML解析器会完全将第二个span移出表格。在更复杂的表格中,很难确定该顺序是如何产生的。
如果您使用XHTML语法和mime类型,在浏览器中看到的将是:
First Second
如果您想知道为什么"Second"没有加粗,您可以更容易地找到适当的标记,因为所有内容都按照标记中放置的顺序显示。

感谢澄清,经过深思熟虑,我决定采用xhtml5语法,但不指定application/xhtml+xml。基本上尝试将所有代码验证为xhtml5,然后作为text/html提供服务。在W3C网站上,他们说关闭斜杠将被“接受”。 - LeafyTechnologies
他们只会在空元素上这样做,但那是最糟糕的选择。虽然这是一篇旧文章,但其中很多内容仍然适用:你应该阅读《将XHTML作为text/html发送被认为是有害的》(https://hixie.ch/advocacy/xhtml)。 - Alohci
@Alohci 这是一篇更加古老的文章。 - connexo
@connexo - 我的意思是Hixie的文章是一篇旧文。我相信是从2002年的。如果没有表达清楚,对不起。 - Alohci
例如,使用XHTML语法与HTML文件类型的一个实际问题是您无法使用完整的XML语法。例如,<![CDATA[ .. ]]>将被视为HTML中格式不正确的注释,并且其内容将不会被使用。同样,XML声明如<?xml .. ?><?xml-stylesheet .. ?>也是如此。 - Mr Lister

2
除了Alohci的出色回答之外,让我简要地回答你的要点...
  • 正确嵌套元素、使用小写字母、引用属性、关闭标签等是很好的实践方法。
引用属性总是一个好主意,没有错误也是如此,但其他的并不重要。当然,现在流行使用小写字母编写标签和属性,但仅凭这一点并不能成为良好的实践。并不是说大写字母更好,只是这么说而已。顺便说一句,在HTML中,浏览器将标签名称存储为大写字母。
  • HTML5没有DTD,而XHTML有DTD和XML解析器。
嗯,XHTML5没有DTD。它确实使用XML解析器,这意味着您不能使用实体引用,例如&nbsp;。如果您想在XHTML中使用引用,请使用数字引用,如&#160;,或者返回到具有DTD的旧版本。
  • 如果我将页面指定为XHTML5(HTML5 doctype + XHTML schema),某些浏览器可能会因为小错误而无法处理该页面。
现在没有浏览器能容忍XHTML中的错误了。曾经有一些浏览器可以将XHTML视为HTML处理,但这些浏览器已不再存在。

谢谢,我刚才意识到需要将所有的 è 和 é 更改为编号实体或直接输入到文件中! - LeafyTechnologies

-3
通常在使用网络技术时,您希望使用 JSON 而不是 XML。JSON 具有相同的序列化能力,使用的字符更少,因此更轻巧。

1
好的,我刚刚阅读了这个链接 https://www.w3schools.com/js/js_json_xml.asp (以前从未使用过Json),所以您建议我遵循HTML5而不是XHTML5,因为在标准网站中我永远不会使用XML解析器,对吗? - LeafyTechnologies
我在说,如果你想交换的数据的接收者或发送者是一个 Web 服务,那么就使用 Json。而且 Json 只有一种写法。 - James LoForti

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