跳转到内容

XHTML/媒体类型

25% developed
来自维基教科书,开放的书籍,开放的世界

媒体类型

[编辑 | 编辑源代码]

XHTML 作为 XHTML

[编辑 | 编辑源代码]

推荐的媒体类型 用于 XHTML 是application/xhtml+xml;理想情况下,这将把 XHTML 作为 XHTML 提供服务。截至 2006 年 12 月 31 日,只有基于 Gecko 和 Presto 的布局引擎(分别为 Firefox 和 Opera)支持这种媒体类型。要让你的 XHTML 被读取为 XHTML,请将你的标记保存为.xht 文件扩展名。

将 XHTML 作为 XHTML 提供服务的最佳实践

[编辑 | 编辑源代码]

除了符合 XML 的所有规则外,我们强烈建议你在将 XHTML 作为 XHTML 提供服务时遵守以下实践

  • 推荐使用 XML 样式表 PI(处理指令)来关联外部样式表
而不是这样
<link rel="stylesheet" type="text/css" href="/mystyle.css">
XHTML 作为 XHTML 应该包含以下内容
<?xml-stylesheet type="text/css" href="/mystyle.css"?>
<?xml-stylesheet type="text/xsl" href="/mystyle.xsl"?>

XHTML 作为 XML

[编辑 | 编辑源代码]

XHTML 的另一种媒体类型是通用 XML 媒体类型application/xml。这种媒体类型受到大多数布局引擎的支持,包括 Gecko、Presto、Web Core、KHTML 甚至 Trident,尽管只有两个——Gecko 和 Presto——将其作为 XHTML 提供服务;其余的将其作为 XML 提供服务,这可能导致一些怪癖。也就是说,这是跨兼容性的首选媒体类型。将 XHTML 作为 XML 提供服务具有 XML 解析的优点,这意味着与text/html(将 XHTML 作为 HTML 提供服务)不同,XML 语法和 XHTML 语法之间不会出现冲突,因为它们都是相同的。要让你的 XHTML 被读取为 XML,请将你的标记保存为.xml 文件扩展名。

将 XHTML 作为 XML 提供服务的最佳实践

[编辑 | 编辑源代码]

除了符合 XML 的所有规则外,我们强烈建议你在将 XHTML 作为 XML 提供服务时遵守以下实践

  • 我们鼓励所有作者通过更高级别的协议设置字符集参数(这可以通过 PHP 等脚本语言完成)。如果你无法使用该方法(即使你能够使用该方法),你应该通过 XML 声明定义你的字符编码
而不是这样
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
XHTML 作为 XML 应该包含以下内容
<?xml version="1.0" encoding="utf-8"?>

XHTML 作为 HTML

[编辑 | 编辑源代码]

第三种选择是通过text/html 将 XHTML 作为 HTML 提供服务。这实际上会破坏使用 XHTML 进行编程的大多数目的,因为 HTML 既不受 XML 解析的约束,也不可扩展。此外,将有效 XHTML 作为 HTML 编写的唯一方法是遵守两种语言的规则——即使这些规则相互冲突(例如,关于空元素的规则)。最后,HTML 规则适用于 DOM 脚本和样式表。

在将 XHTML 作为 HTML 提供服务之前,我们鼓励你检查这样做的目的。一些值得问的问题可能包括:我是否想利用 XML 的可扩展性?我是否想让我的标记被解析为 XML?我是否会利用 XSL 样式表?如果所有这些问题的答案都是否定的,那么 HTML 4.01 可能是更好的选择。但是,如果你决心将 XHTML 作为 HTML 提供服务,XHTML 1.0 Transitional 在技术上允许这样做。要让你的 XHTML 被读取为 HTML,请将你的标记保存为.htm 文件扩展名,并确保你的 DTD 是 XHTML 1.0 Transitional。

内容协商

[编辑 | 编辑源代码]

出于 XHTML 的目的,内容协商是指通过嵌入式脚本语言(Javascript、PHP)向某些布局引擎提供一种媒体类型,而向其他布局引擎提供另一种媒体类型的做法。使用内容协商和简单地使用text/html 媒体类型提供 XHTML 之间的区别在于,内容协商通常(虽然不总是)将 HTML 作为 HTML 提供服务,而不是将 XHTML 作为 HTML 提供服务。换句话说,根据 UA(用户代理)的不同,查看源代码会显示 HTML DTD 或 XHTML DTD、XML 声明或 Content-type 元标记、XML 样式表 PI 或链接的样式表。这意味着通过明智的脚本编写,可以编写有效的 XHTML,而无需考虑 HTML 的规则,并利用 XML 的可扩展性和高效处理来支持布局引擎,同时使用大部分相同的标记编写有效的 HTML(不包括上述可扩展性和处理)来支持其他布局引擎。

媒体类型和布局引擎

[编辑 | 编辑源代码]

媒体类型和布局引擎的比较

[编辑 | 编辑源代码]

使用不同的媒体类型提供格式良好的 XHTML 文档时的响应。

Trident Tasman Gecko WebCore KHTML Presto iCab
application/xhtml+xml 提示下载 提示下载 XHTML XML HTML XHTML (X)HTML
application/xml XML 崩溃 XHTML XML XML XHTML 文本
text/html HTML HTML HTML HTML HTML HTML HTML

Presto 媒体类型说明

[编辑 | 编辑源代码]
  1. application/xml——为了在基于 Presto 的布局引擎(如 Opera、Opera Mini 或 Opera Mobile)中获得 XML 处理的优势,必须使用 XSL 样式表将 XHTML 转换为 XML。[1].

WebCore 媒体类型说明

[编辑 | 编辑源代码]
  1. application/xhtml+xml、application/xml、text/xml——HTML 实体和由自定义 DTD 定义的自定义实体不被识别。

KHTML 媒体类型说明

[编辑 | 编辑源代码]
  1. application/xhtml+xml——KHTML 支持这种媒体类型,但将文档作为 HTML 处理。
  2. application/xml、text/xml——HTML 实体和由自定义 DTD 定义的自定义实体不被识别。

iCab 媒体类型说明

[编辑 | 编辑源代码]
  1. application/xhtml+xml——CSS 中的类型选择器不区分大小写。

XML 解析

[编辑 | 编辑源代码]

将以下文档保存为两个副本,一个为 badlyFormed.html,另一个为 badlyFormed.xhtml。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>Not well-formed</title>
 </head>
 <body>
  <p>An XHTML-compliant browser should refuse to render any part of this page.</p>
  <p>This paragraph is <b><i>not</b> well-formed</i>.
 </body>
</html>

根据 XHTML 规范所基于的 XML 规范,符合标准的浏览器应该拒绝渲染文档的任何部分。相反,它应该返回一条错误消息。打开 badlyFormed.xhtml。你应该收到一条类似于以下消息的错误消息

XML Parsing Error: mismatched tag. Expected: </i>.
Location: file:///D:/Practice/XHTML/BadlyFormed.xhtml
Line Number 8, Column 35:

  <p>This paragraph is <b><i>not</b> well-formed</i>.
----------------------------------^

如果您没有收到错误消息,则可能是 MIME 类型设置不正确或您的浏览器不兼容。Microsoft Internet Explorer 版本 7.0 及更低版本不兼容。Mozilla Firefox 兼容(至少从版本 1.0 开始,可能在更早的版本中也兼容)。

使用 Firefox,您可以检查页面的 MIME 类型。从工具菜单中选择页面信息选项。在常规选项卡上向下三行是“类型:”。badlyFormed.xhtml 的类型应该是application/xhtml+xml。如果不是,则您没有将扩展名.xhtml映射到application/xhtml+xml

现在尝试用 Firefox 打开 badlyFormed.html。该页面可能会显示,与 XHTML 规范相反。检查 MIME 类型。它应该是text/html。这意味着 Firefox 将文档解析为 HTML,而不是 XHTML。网页浏览器通常会显示 HTML,无论页面上是否有任何错误,因此该页面会呈现。

华夏公益教科书