xhtml - HTML 4,HTML 5,XHTML,MIME类型-权威资源

标签 xhtml html mime-types

HTML与XHTML和XHTML作为text / html与XHTML作为XHTML的主题非常复杂。不幸的是,由于信息大部分分散在网络上,或者被深深地埋在W3C技术术语中,因此很难获得完整的图像。此外,还有一些误传。我建议将其用作该主题的权威SO资源,描述以下方面的最重要方面:

  • HTML 4
  • HTML 5
  • XHTML 1.0作为text / html,application / xml + xhtml
  • XHTML 1.1作为application / xml + xhtml

  • 两者的实际含义是什么?
    什么是常见的陷阱?
    正确的MIME类型对于每种类型有何重要性?
    不同的浏览器如何处理它们?

    我希望每种技术都能得到一个答案。我将其设置为社区Wiki,因此请不要编辑多余的答案,而要编辑答案以完成图片。随意从存根开始。也可以随时编辑此问题。

    最佳答案

    内容。

  • 术语
  • 语言和序列化
  • 规格
  • 浏览器解析器和内容(MIME)类型
  • 浏览器支持
  • 验证程序和文档类型定义
  • Quirks,Limited Quirks和Standards模式。

  • 术语

    自从HTML首次引入以来,多年来,官方规范中的术语已经发生了变化,这是描述这一问题的困难之一。以下内容基于HTML5术语。同样,"file"用作通用术语,表示文件,文档,输入流,八位位组流等,以避免进行精细区分。

    语言和序列化

    HTML和XHTML是根据语言和序列化定义的。

    语言定义了元素和属性的词汇表以及它们的内容模型,即哪些元素允许在哪些其他元素内,哪些属性允许在哪个元素上以及每个元素和属性的目的和含义。

    序列化定义了如何使用标记来描述文本文档中的这些元素和属性。这包括哪些标签是必需的,哪些可以推断,以及这些推断的规则。它描述了诸如如何标记空白元素(例如“>”和“/>”)以及何时需要引用属性值之类的事情。

    技术指标

    HTML 4.01规范是当前的规范,它同时定义了HTML语言和HTML序列化。

    XML 1.0规范定义了序列化,但是保留了由其他规范(称为“XML应用程序”)定义的语言。

    XHTML 1.0和1.1规范都在使用中。本质上,它们使用与HTML 4.01相同的语言,但使用不同的序列化,该序列化与XML 1.0规范兼容。即XHTML是XML应用程序。

    HTML5(从2010-04-18开始,草案)规范描述了HTML和XHTML的新语言。该语言主要是HTML 4.01语言的超集,但仅旨在与现有Web工具(例如,浏览器,搜索引擎和创作工具)向后兼容,而与以前的规范(向后兼容)会产生差异。因此,某些元素的含义有时会从早期的规范中更改。同样,每个序列化都与当前工具向后兼容。

    浏览器解析器和内容(MIME)类型

    当文本文件发送到浏览器时,它将被解析为其内部内存结构(对象模型)。为此,它使用一个解析器,该解析器遵循HTML序列化规则或XML序列化规则。根据“内容类型” HTTP header 上的非本地文件,使用哪个解析器取决于它推断出的内容类型是什么。在内部,一旦文件被解析,浏览器就以几乎相同的方式对待对象模型,而不管它最初是使用HTML还是XHTML序列化提供的。

    为了使浏览器使用其XHTML解析器,内容类型HTTP header 必须是XML内容类型之一。最常见的是application/xmlapplication/xhtml+xml。任何非XML内容类型都将意味着该文件(无论它是否符合所有XHTML语言和序列化规则)都不会被浏览器视为XHTML处理。

    使用text/html的HTTP内容类型(或在大多数后备场景中,缺少内容类型或任何其他非XML类型)将导致浏览器使用其HTML序列化解析器。

    这两个解析器之间的主要区别在于HTML序列化解析器执行错误恢复。如果解析器的输入文件不符合HTML序列化规则,则解析器将以与以前的浏览器反向工程的方式恢复,并继续构建其对象模型,直到到达文件末尾。 HTML5包含恢复的第一个规范性定义,但是从2010-04-26开始,没有主流浏览器提供在发行版中启用的算法的实现。

    相反,当XML序列化解析器遇到任何无法解释为XML的内容时(即发现文件格式不正确的XML),它将停止。 XML 1.0规范要求解析器这样做。

    浏览器支持

    大多数现代浏览器都支持HTML解析器和XML解析器。但是,在Microsoft Internet Explorer 8.0及更早版本中,XML解析器无法直接创建用于呈现为HTML页面的对象模型。但是,可以使用XSLT文件处理XML结构以创建流,然后使用HTML解析器对其进行解析以创建可以呈现的对象模型。

    从Internet Explorer 9 Platform Preview开始,可以使用与其他现代浏览器相同的方式直接解析使用XML内容类型提供的XHTML。

    当其XML解析器检测到其输入文件的XML格式不正确时,某些浏览器将显示错误消息,而另一些浏览器则将页面显示为已构造到检测到错误为止,还有一些浏览器为用户提供了获取文件的机会使用他们的HTML解析器重新解析。

    验证器和文档类型定义

    HTML和XHTML文件可以以文档类型定义(DTD)声明开头,该声明指示文档中使用的语言和序列化。验证程序(例如http://validator.w3.org/上的验证程序)使用此信息来将文件中使用的语言和序列化与DTD中定义的规则进行匹配。然后,它会根据文件中的标记违反DTD规则的位置来报告错误。

    并非所有HTML序列化和语言规则都可以在DTD中描述,因此验证器仅测试规范描述的所有规则的子集。

    HTML 4.01和XHTML 1.0定义了严格,过渡和框架集DTD,它们在兼容文件中允许的语言元素和属性上有所不同。

    基于HTML5的验证器(例如validator.nu)的行为更类似于浏览器,根据HTTP内容类型处理页面,并使用基于非DTD的规则集,以使它们捕获DTD无法描述的错误。

    怪癖,受限怪癖和标准模式。

    浏览器不验证发送给他们的文件。他们也不使用任何DTD声明来确定文件的语言或序列化。但是,他们的确会用它来猜测页面创建的年代,并因此猜测作者当时对浏览器的预期解析和渲染行为。因此,它们定义了三种解析和渲染模式,称为Quirks模式,Limited Quirks(或几乎标准)模式和Standards模式。

    使用XML内容类型提供的任何文件始终以标准模式处理。对于使用HTML解析器解析的文件,如果未提供DTD或DTD被确定为非常旧,则浏览器将使用其怪癖模式。概括地说,如果HTML 4.01和XHTML文件包含过渡DTD,则处理为text / html的HTML 4.01和XHTML文件将以有限的怪癖模式进行处理;如果使用严格的DTD,则将以标准模式进行处理。

    在无法识别DTD的情况下,该模式由一组复杂的规则确定。一种特殊情况是省略了公共(public)标识符和系统标识符,并且声明仅是。这是最短的doctype声明,当前的浏览器会将其视为标准模式。因此,它是指定用于HTML5兼容文件的声明。

    关于xhtml - HTML 4,HTML 5,XHTML,MIME类型-权威资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662508/

    相关文章:

    html - 为什么一些主要网站使用无效的 HTML?

    javascript - 如何清理从所见即所得编辑器收到的数据?

    jquery - 制作出现在表格行上的响应式弹出窗口单击

    java - 使用 Java 或 ColdFusion 确定 *.doc 文件是否为 RTF 的最佳方法

    c# - 我如何知道字符串是否代表有效的 MIME 类型?

    html - 如何为单个 xhtml 文件添加动态 CSS 样式表

    html - CSS 菜单(无法让标签达到全高)

    html - 为什么 `</html>`之后的内容会出现在浏览器中?

    jQuery 函数与硬编码。功能不工作

    http - MIME、Internet 媒体类型和 HTTP 之间有什么区别?