【问题标题】:HTML5 syntax - HTML vs XHTMLHTML5 语法 - HTML 与 XHTML
【发布时间】:2010-11-07 19:03:03
【问题描述】:

即使 HTML5 是 HTML 的前进道路,我们作为开发人员也有两种选择:XHTML 语法和 HTML 语法。我使用 XHTML 作为我的主要文档类型已经有 5 年左右的时间了,所以我对它非常满意。

但我的问题是允许使用非 xml 语法,是否有任何理由坚持使用有效的 XML 语法?除了偏好(兼容性等)之外,您是否获得了任何与另一个相匹配的东西?就我个人而言,回到不关闭标签时我会觉得有点脏,
现在对我来说是第二天性,但我会获得一些回到 HTML 语法的东西吗?

更新: 我想我真正的问题是有理由从 XHTML 切换到 HTML 语法吗?多年来我一直在使用 XHTML,但不确定是否有理由切换回去。浏览器兼容性(IE 有时对 application/xhtml+xml mime-type 很挑剔)等?

【问题讨论】:

  • 没有什么能阻止您使用常规 HTML 关闭所有标签...
  • @Evan - 是的,有;这是无效的!特别是像
    这样的东西
  • HTML5 为您提供了使用自闭合标签的选项。但它不是有效的 HTML4。
  • @DavidDorward 不,这不是真的。在 HTML4 中,技术上是正确的,因为 HTML4 仍然是一种基于 SGML 的语言。但是,正如你所说,没有人真正遵循这一点。 HTML5 not 基于 SGML,而且它没有这么愚蠢的规则。
    与 HTML5 的 HTML 语法中的
    完全相同。

标签: xhtml html


【解决方案1】:

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-only 语法,这意味着它是格式良好的 XML,但使用了与 HTML 不兼容的 XML 特性。或者,您可以编写符合并兼容 HTML 和 XHTML 处理的 Polyglot 文档(原则上,这在概念上类似于编写符合附录 C 指南的 XHTML 1.0)。

【讨论】:

  • 确实如此。这是所有浏览器一生都在做的事情。
  • Lachlan,实现起来并不容易,你和我一样知道html 5解析器的数量与XML解析器相比仍然很少。
  • @Lachlan,您很清楚 HTML 5 仍然是草案,可能会发生变化。据我了解,当今公众可用的浏览器都没有完全实现 HTML5 解析器规范,更不用说其他用户代理了。另一方面,XML 解析器无处不在。也许有一天,html5 解析器会像使用 xml 解析器一样方便,但现在还不行。也许有一天,IE 会实现 application/xhtml+xml 并且网络作者可以,如果他们愿意,留下 text/html。与此同时,如果有人像我一样希望解析自己的网页,那么使用多语言文档是可行的方法。
  • karlcow,我说相对很容易实现,并且考虑到 html5lib 是由一群几乎没有经验的人实现的,他们只需遵循规范就可以预先实现解析器,我认为我的主张是有效的。 Alohci,是的,我知道 HTML5 由于其 WD 状态而不稳定。但我正在解决一个虚假的说法,即解析 HTML 比解析 XML 困难得多。浏览器尚未完成向完全符合 HTML5 解析器的迁移并不重要,因为它们现有的解析器无论如何在实践中都能充分处理现实世界的 HTML。
  • @Lachlan Hunt:与更正式的语法相比,解析不太严格的语法通常更困难。实事求是地说,这两者是如此接近,以至于它几乎是相同的困难。我不明白为什么他们不喜欢 XHTML 语法。 HTML5 感觉像是在倒退,只是按照我的理解来称呼它。新技术,爱他们……旧语法??那需要保持死态。
【解决方案2】:

我想我真正的问题是有没有 从 XHTML 切换到 HTML 的原因 句法?我一直在使用 XHTML 年,不确定是否有 换回来的理由。浏览器 兼容性(IE有时很挑剔 与应用程序/xhtml+xml mime-type) 等?

如上一个答案中所述,text/html 被解析为 HTML,application/xhtml+xml 被解析为 XML。因此,您应该使用与您使用的 MIME 类型相匹配的语法。

如果您现在提供 text/html 但使用 XHTML 语法,那么您应该修复您的内容以使用 HTML5 语法。您可能已经很接近了,因为 HTML5 允许 void 元素(始终为空的元素,例如 imgbr)使用 XMLesque /> 空元素语法。

如果您现在使用application/xhtml+xml,如果您关心支持 IE,IE 支持将是切换到text/html 和 HTML 语法的一个理由。

尝试编写正确的 HTML5 和 XHTML5 的多语言文档(为不同的 MIME 类型提供相同的有效负载字节的不同浏览器)比乍看起来更难,而且不值得麻烦。

【讨论】:

    【解决方案3】:

    HTML5 草案对使用哪种语法非常明确:

    • 以 text/html 格式发送页面时使用 HTML 语法
    • 以 application/xhtml+xml 形式发送页面时使用 XHTML 语法

    参考:http://dev.w3.org/html5/spec/Overview.html#authors-using-xhtml

    【讨论】:

    • 是的,但它并没有真正回答当您可以选择使用任一内容类型时应该首选哪个的问题。
    • 确实如此,当是 text/html 时使用 HTML,当是 application/xhtml+xml 时使用 XHTML。虽然您可以将 XHTML 与 text/html 一起使用,但不建议这样做,而反过来,HTML 与 application/xhtml+xml 是不可能的。
    • 对不起,但它并没有真正回答我的问题。我知道 mine-type 是告诉浏览器使用什么语法——我在问自己使用哪个语法。我可以将 mime-type 设置为任何我想要的,所以我知道 如何 在两者之间切换。
    • @Parrots,但是你知道IE不支持application/xhtml+xml吧?所以我怀疑你可以使用任何你想要的 mime 类型,除了少数情况。
    • @IonuțG.Stan:从caniuse,IE9 及更高版本支持application/xhtml+xml
    【解决方案4】:

    使用 XHTML 时,您可以将其与其他 XML 内容混合使用,例如MathML、SVG 或您自己的专有格式,只需在某个时候更改命名空间。此外,您可以将 XHTML 嵌入到其他 XML 文档中。

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

    【讨论】:

    • “当使用 XHTML 时,您可以将它与其他 XML 内容混合,例如 MathML、SVG 或您自己的专有格式,只需在某个时候更改名称空间。”
    • IE 一开始就不支持 HTML5,是吗?
    • 我总是可以不将 IE 称为网络浏览器。 HTML5 是为兼容而设计的,因此至少网页的某些部分可以正常工作。
    • @jalf,确实如此。好吧,取决于您所说的支持是什么意思。 HTML5 旨在向后兼容。它遵循优雅降级的原则。
    【解决方案5】:

    您不应使用 XHTML 在 Web(或任何网络,包括 Internet Explorer 客户端)上提供内容;请参阅Sending XHTML as text/html Considered Harmful 了解完整的理由。

    【讨论】:

    • 这不是真的,在某些情况下,当您特别想要/需要使用 XHTML 的一些好处时,XHTML 应该在 Web 上作为 application/xhtml+xml 提供(请参阅文章下方举些例子)。不过,通常情况下,您最好将 HTML 作为 text/html 提供。
    【解决方案6】:

    XHTML 的大部分优点都具有failed to materialise。虽然我不建议将它用于新项目,但作为 text/html 的 XHTML 似乎非常易于管理和广泛使用,只要您遵循 compatibility guidelines。将任何重要的项目改回 HTML 序列化可能不值得。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        XHTML 语法的优点是它是 XML。它可以很容易地被解析、理解和操作。 HTML 语法对客户端来说更难使用。

        但归根结底,这只是语法问题。 HTML5 允许这两种形式。

        【讨论】:

        • 这不是真的。 XML 并不比 HTML 4.01 Strict 更容易解析,前提是两者都有效。 XML 中的自闭合标签背后的原因是它是一个定义标记语言的框架,因此不必事先知道哪些是自闭合标签。另一方面,浏览器已经知道这些标签是什么,所以他们很清楚在
          之后他们不应该期待。就是这样。
        • XPath 或 XSLT 是用于解析和操作 XML 的两种现成技术。它们不适用于 HTML。 HTML 不仅允许未关闭的标签,它还允许您以与打开标签不同的顺序关闭标签。所以不,这不是“全部”。 :)
        • HTML 4.01 Strict,不允许您以不同的顺序关闭标签。只是有些人这样做并不意味着它是允许的。 HTML 唯一的难点在于它不会在标记中强制执行严格的规则。 XHTML 是否正确。因此,标准中定义的 HTML 是可以的。我们在现实世界中拥有的东西并不好。
        • 此外,因为人们认为他们写的是XHTML,实际上是无效的HTML,他们认为XHTML很容易。但是有成千上万个带有 XHTML 过渡文档类型的无效 XHTML/HTML 页面。那是因为 IE 不支持 XHTML,所以他们必须将标记作为 text/html 发送。因此,没有 XHTML/XML 优势。
        • @jalf:我个人将 XPath 和 XSLT 与 HTML 一起使用。这些技术独立于 XML。它们在 DOM 上工作,HTML 和 XML 都产生等效的 DOM。 HTML 5 不允许标签以错误的顺序关闭(这是解析错误。HTML 5 永远不会破坏树结构)。
        【解决方案9】:

        更新:我想我真正的问题是有理由从 XHTML 切换到 HTML 语法吗?多年来我一直在使用 XHTML,但不确定是否有理由切换回来。浏览器兼容性(IE 有时对 application/xhtml+xml mime-type 很挑剔)等等?

        你必须真正考虑两件事。您正在编写的语言和您发送的语言。 Web 由 3 个组件定义:

        • URI
        • 一种资源 - 标记语言(文档)
        • 一种协议 - HTTP(用于管理信息空间的工具)

        您可以在桌面上使用 XML 语法编写文档,例如使用 XHTML。在这种特定环境下,如果您将扩展名“.xhtml”赋予文件名并使用本地浏览器打开它,它将被解析为 XML。如果您为文件名提供扩展名“.html”,它将被解析为 HTML。基本上,在您的创作工具中,它是 XML,但是一旦您使用工具处理它,这就不再重要了。

        在 Web 上,由 URI 标识的资源将使用特定的 mimetype 发送,现在大多数时候,人们都在使用 text/html。 mimetype 定义了客户端(浏览器、搜索引擎机器人等)必须如何处理您的文档。如果您使用 XML 语法但使用 text/html 发送,则文档将由 html 解析器处理。

        要通过网络以 XML 格式发送文档,您必须将服务器配置为以 application/xhtml+xml 格式发送。 (注意:IE8及之前版本不理解什么是application/xhtml+xml,会提出保存菜单。)

        HTML 5 Abstract 模型的设计方式几乎可以用 html 语法或 text/html 中的 xml 语法编写。几乎是因为即使您使用 XML 语法编写(关闭空元素、引用属性等),由于 XML 解析器和 HTML 解析器处理这些的方式,您也会遇到调用脚本和命名空间的复杂页面的麻烦。

        【讨论】:

          【解决方案10】:

          2019 年更新

          关于XHTML的W3自言自语:

          “存在一个更新的规范,建议新采用以代替此规范。新的实现应遵循latest version of the HTML specification。”

          所以,你应该使用 HTML 5.*

          【讨论】:

            猜你喜欢
            • 2011-11-07
            • 1970-01-01
            • 2010-11-28
            • 1970-01-01
            • 1970-01-01
            • 2011-10-01
            • 2010-09-20
            • 1970-01-01
            • 2011-08-07
            相关资源
            最近更新 更多