与 XHTML 1.0 相比,这种安排更符合逻辑,其他很多标记词汇表的用户对此也很熟悉。对程序员来说,一个很大的好处是可以在文档中包含内容章节,而不需要重新编码标题层次。
对这些标题可以使用 CSS。人们可能期望 XHTML 2.0 的浏览器默认实现能够预先定义一部分,具体来说可能像下面这样(摘自 XHTML 2.0 规范):
h {font-family: sans-serif; font-weight: bold; font-size: 200%}
section h {font-size: 150%} /* A second-level heading */
section section h {font-size: 120%} /* A third-level heading */
XHTML 1.0 中另一个不合逻辑的地方是,要使用列表,则必须将列表放在段落中。事实上,必须使用任何块级元素(blockquote、预格式化的章节、table 等)。如果这些内容仅仅是同一段落流中的一部分,这样做常常不合逻辑。XHTML 2.0 去掉了这些限制。惟一的限制是不能将一个段落放到另一个段落中。
图像
HTML 中的 <img> 标签实际上非常不灵活。正如 Pemberton 所说,除了 alt 文本(妨碍采用新的图像格式)它不含任何应变机制,alt 文本不能使用标记,longdesc 属性由于笨拙而从来没有被使用过。(longdesc 用于提供一个 URI,该 URI 指向关于图片的、与 alt 属性中的说明相比更详细的描述。)
XHTML 2.0 为这个问题提供了一种很好的解决方案:允许任何 元素具有 src 属性。浏览器可以用这个 URI 中的内容代替元素中的内容。最简单的情况就是处理图像。但没有人说不能是 SVG、XHTML 或浏览器能够呈现的任何内容类型。
<img> 标签本身仍将保留,但该标签中现在包含一些内容。src 属性的新操作意味着 alt 文本现在变成了元素内容,比如下面的例子:
<p><img src="http:///water.png">H<sub>2</sub>O</img></p>
对于日语等语言来说,这是一个好消息,因为 Ruby 注释(请参阅参考资料)要求行内标记,而以前这在属性值中这是不可能的。
XHTML 2.0 在 <object> 元素中提供了更一般的图像包含形式,该元素可用于包含任何对象类型,从图片、电影到 Flash 或 Java 技术这样的可执行代码。这样就可以通过巧妙的技术,根据浏览器能力进行更好的委派,<object> 元素可以多层嵌套。比如,最外层是一段 Flash 电影,其中包含一个 AVI 视频文件,再进一层是一个静态图片,最后在嵌套对象的核心是一段文本内容。更多信息请参阅 XHTML Object Module(参考资料中的链接)。
可扩展的语义
很长一段时间以来,一些 HTML 元素具有具有语义联系,比如 <address> 和 <title>。问题是这类元素很少而且不能扩展。其间,有人尝试用 class 属性为 HTML 元素提供语义。与 class 的设计初衷相比,这样就大大延伸了其功能,而且由于应用 CSS 样式的属性的广泛使用,所以很难明确应用这种用法。(有人怀疑关于 class 用途的断言,但后者是很难驳倒的。)
XHTML 2.0 没有采用这些特别的方法,而是引入了一种方法在文档中指定类似 RDF 的元数据。RDF 陈述是一个三元组(主题、属性、对象)。比如,在英语中可能有三元组:“my car”、“is painted” 和 “red”。
about 属性类似于指定 RDF 三元组 subject 的 rdf:about——可以省略,则文档本身就是主题。property 属性是引用性质的 URI(如果给定适当声明的前缀可使用缩写形式,更多细节请参阅 XHTML 2.0 Metainformation Attributes Module,见参考资料)。
最后,三元组的第三个值由 about 和 property 属性作用的元素内容给出,如果 content 属性值为空则没有内容。这是一个例子,如果使用过 HTML <meta> 标签就会非常熟悉,它指定了页面头 (page header) 的创建者:
<html xmlns="http://www./2002/06/xhtml2/" xml:lang="en">
<head>
<title>Edd Dumbill‘s Home Page</title>
<meta property="dc:creator">Edd Dumbill</meta>
</head>
...
</html>
现在来看看 Pemberton 给出的这个例子,它说明了如何在真正的文档体中使用元数据:
<h property="title">Welcome to my home page</h>
这表示该标题也是 XHTML 2.0 文档的题目,并将其指定为行内标题。终于不用在每个文档中将题目写两次了!
感谢一种简单的称为 GRDDL(从语言的方言中采撷资源描述,Gleaning Resource Descriptions from Dialects of Languages,参见参考资料)的转换技术,现在有了从 XHTML 2.0 文档中提取 RDF 元数据的统一标准了。
XHTML 2.0 在其他方面也有很多变化,多数与平行开发的其他规范(如 XForms)有关。这里无法一一介绍 XHTML 2.0 的特性。但无论如何,与 XHTML 1.0 相比,XHTML 2.0 是一次很大的飞跃。
XHTML 2.0 中的其他几点变化
受够了编写 <pre><code> ... </code></pre> 这类代码?现在可以使用新的 <blockcode> 元素了。
为了满足可访问性的要求,XHTML 2.0 提供了 role 属性,可以在任何 body 元素中指定。比如,页面中单纯的导航元素可使用 role="navigation" 属性,这样文本-语音引擎就可以智能地处理它。
浏览器目前支持通过 Tab 关键字进行焦点切换,但是有很大的随意性。新的 nextfocus 和 prevfocus 属性允许控制焦点在屏幕元素间转移的顺序,该属性对于建立可导航的用户界面至关重要。
准备迎接 XHTML 2.0
无论高级特性中的变化多大,XHTML 2.0 无疑仍然是 HTML。虽然增加了新元素,XHTML 2.0 的大部分元素仍然和过去一样工作。从兼容的角度出发,XHTML 2.0 仍然保留了 <h1> 到 <h6> 元素,此外还有 <img>。
不过,XHTML 2.0 的战略并不是坚持严格的语法向后兼容,因此现有浏览器的 HTML 呈现引擎不可能完全应付 XHTML 2.0 文档的表达能力。不管怎样,多数 Web 浏览器都能很好地呈现任意的 XML + CSS,大量 XHTML 2.0 也能以这种方式呈现 —— 虽然无法获得语义上的改进。
XHTML 2.0 中的一些区别非常重要,改用 XForms 是其中最值得注意的,还有彻底抛弃了 HTML 的非 XML 性质。因此现在还不能一下子把网站改成 XHTML 2.0,但是可以为未来做好准备:
坚持使用 CSS,去掉所有表示性标记。
考虑如何在页面中部署微格式。微格式可以在 HTML 中使用现有标准表示元数据。
如果还没有这样做,用 XHTML 1.0 做一下实验。现在使用 XHTML 1.0 页面作为常规 HTML 是可能的,只要根据 XHTML 1.0 HTML Compatibility Guidelines 编写即可,但这会带来很大的复杂性。不能将这种方式用于 XHTML 2.0。
使用 X-Smiles 浏览器做实验,它支持 XHTML 2.0,并提供了 SVG、XForms 和 SMIL 2.0 Basic 能力。
如果基于类 XHTML 的功能创建新的客户机系统,一定要考虑使用 XHTML 2.0 作为起点。
最后还要注意的是,XHTML 2.0 规范还没有完成。撰写本文的时候,该规范仍然处于 W3C 的工作草案阶段,就是说在成为推荐标准之前,还有一些路要走。重要的是,它还必须经过候选推荐标准阶段,这个阶段用于收集实现的经验。
按照 W3C HTML 工作组计划,2007 年以前 XHTML 2.0 不大可能成为 W3C 推荐标准。也就是说 2006 年是获得部署经验的关键一年。
W3C XHTML 2.0 与 WHATWG HTML 5 的比较
这两个计划完全不同:草根组织 WHATWG 希望渐进式地改进 HTML 4 和 XHTML 1.0,而联盟支持的 XHTML 2.0 对 HTML 语言进行了彻底重构。
虽然不同,这两种方法仍然有可比性。WHATWG 规范的一些初步成果已经在浏览器中实现,WHATWG 的一些工作就是对 HTML 事实扩展的描述。其中一些重要的部分,如 XMLHttpRequest 将进入 W3C 的 Rich Client Activity 规范。WHATWG 在 Web 标准世界中还是有效的催化剂。
把目光放远一些,XHTML 2.0 方法为 Web 提供了全新的词汇表,那时候 XML 的模块化处理、CSS 和 ECMAScript 将很快成为常见的事物。嵌入设备如电话和数字电视没有必要支持杂乱无章的遗留 Web HTML,可以毫无负担地利用纯 XML 词汇表 XHTML 2.0 的优势。此外,可访问性和国际化的新特性使 XHTML 2.0 成为第一个被认为具有通用性的 XML 文档词汇表,从而成为很多基于标记的工作的坚实而经济的基础。
与过去一样,HTML 的未来也是不确定的,有人可能称之为混乱,但是我相信 XHTML 2.0 最终将得到广泛的接受和采纳。如果这是 Web 上惟一的 XML 词汇表,可能会有一些问题,但是因为浏览器准备应付 SVG、XForms 和其他技术,所以 XHTML 2.0 看起来仅仅是另一个基于 XML 的词汇表而已。