分析 W3C 改进 HTML 的方法 级别: 初级 Edd Dumbill, 主席, XTech Conference 2006 年 3 月 30 日 本系列的上一期文章中,我说明了为何要改进 HTML,包括修正过去的错误和适应 Web 页面与应用程序提出的越来越高的要求。我介绍了 Web Hypertext Application Technology Working Group (WHATWG) 在创建 Web Applications 1.0 和 Web Forms 2.0 规范方面的工作,这是一个由浏览器厂商组成的松散的联合体。 本文将介绍万维网联盟(W3C)建立下一代 XHTML 规范版本的工作,以及他们对以 Ajax 应用程序为代表的“丰富客户机”行为需求的反应。 W3C 有四个工作组正在建立一些特别有趣的规范: * HTML(现在的 XHTML) * XForms * Web API * Web Application Format 可以在参考资料中找到这些规范的链接。本文主要讨论 HTML 工作组的研究,但是也有必要作为背景知识讨论一下其他规范,因为这些研究将造就 Web 的未来。 XForms XForms 是 W3C 提出的当前 HTML 表单的后继者。它们被设计成具有更丰富的功能,并将其结果作为 XML 文档传递给处理应用程序。XForms 是模块化的,因此可在任何上下文中使用,而不仅仅是捆绑到 XML 中使用。XForms 与 HTML 表单的主要区别有: * XForms 将用户界面表示从数据模型定义中分离出来。 * XForms 可以创建和消费 XML 文档。 * XForms 是设备中立的。比如,可以在语音浏览器和桌面浏览器中使用同一个表单。 * XForms 允许在提交之前验证和约束输入。 * XForms 不使用脚本就能实现多阶段表单。 因为是一种模块化语言,XHTML 2.0 引入 XForms 模块来实现表单功能。 Web API W3C Web API 工作组负责为客户端 Web 应用程序开发制定标准 API。其中第一种也是最常用的一种 API 就是作为 Ajax(也是 WHATWG 描述的一种技术) 核心的 XMLHttpRequest 功能。程序员可以通过 ECMAScript 和其他浏览器环境支持的任何语言来使用这些 API。 可能制定的其他 API 包括: * 处理浏览器 Window 对象的 API * DOM Level 3 Events and XPath 规范 * 时间事件 API * 用于非 HTTP 联网的 API,如 XMPP 或 SIP * 客户端持久存储 API * 拖放 API * 监控下载的 API * 更新文件的 API 虽然这些 API 不一定会随着 XHTML 2.0 一起实现,但在未来四年中,浏览器很可能将两方面结合起来为 Web 应用程序提供丰富的平台。 Web Application Format XHTML 2.0 是 Web 应用程序用户界面问题的一部分,但不是全部。Mozilla XUL 和 Microsoft XAML 这些技术已经为用户界面提供了丰富的 XML 词汇表。 Web Application Format 工作组负责按照 XUL 或 XAML 的方式开发指定用户界面的声明性格式,以及 XBL2 的开发,这是一种在自定义标记和已有技术之间提供绑定的声明性语言。实际上,XBL2 为程序员提供了编写新的 Web 应用程序部件的一种方法。
为何要创建 XHTML 2.0? XHTML 1.0 的目的是将 HTML 转化成 XML 词汇表。它为 HTML 引入了 XML 语法约束:区分大小写、必须用引号括起来的属性值和成对的标签。这项任务完成了,XHTML 2.0 致力于解决 HTML 作为一种 Web 页面标记语言的问题。 W3C 的 Steven Pemberton 在阿姆斯特丹 XTech 2005 大会上所作的演讲中(请参阅参考资料)阐述了 XHTML 2.0 的设计目标: * 尽可能的使用 XML:如果一种语言特性已经在 XML 中存在,就不要重复或者重新发明。 * 结构高于表示:感谢 CSS 样式表,HTML 不再需要专门的表示性标签。 * 使 HTML 更容易编写:删除 HTML 中一些无用的特征。 * 更高的可访问性、设备中立性:尽量避免假设读取文档的方式。 * 改进的国际化。 * 更好的表单:盼望已久的改进! * 减少脚本的需要:HTML 本身包含典型的脚本用法。 * 更好的语义:使 HTML 和语义 Web 应用程序更容易集成。 对于任何曾经用过 HTML 的人来说,这些目标显然都是值得期待的。现在我将稍微详细地考察 XHTML 2.0 实现这些目标的一些方法。 章节和段落 多年前我刚刚接触 HTML 的时候,还记得多次对这种语言的文本结构元素感到不知所措。为何有六层标题,什么时候使用合适?而且,为什么标题不包含它们所代表的章节?XHTML 2.0 为此提供了新的答案,增加了 <section> 和 <h> (heading) 元素。 代码: <section> <h>Level 1 heading</h> ... <section> <h>Level 2 heading</h> ... </section> </section> 与 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://example.com/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: <html xmlns="http://www.w3.org/2002/06/xhtml2/" xml:lang="en"> <head> <title>Edd Dumbill's Home Page</title> <meta property="dc:creator">Edd Dumbill</meta> </head> ... </html> 现在来看看 Pemberton 给出的这个例子,它说明了如何在真正的文档体中使用元数据: HTML: <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 5 和 W3C XHTML 2.0 的主要特点。这两个计划完全不同:草根组织 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 的词汇表而已。
参考资料 学习 * 您可以参阅本文在 developerWorks 全球站点上的 英文原文。 * 请阅读关于 HTML 未来的系列文章中的第一期(developerWorks,2005 年 12 月)。 * 请参阅 XHTML 2.0 规范。 * 关于 XHTML 开发的最新进展,请访问 W3C HTML 工作组。 * 请访问 W3C XForms 页面,那里包括关于 XForms 工作组的信息。 * W3C Web API 工作组负责为客户端 Web 应用程序开发指定标准 API。 * W3C Web Application Formats 工作组负责为用户界面的制定开发声明性格式。 * 请参阅 Steven Pemberton 的 XTech 2005 演讲稿:“XHTML2: Accessible, Usable, Device Independent and Semantic”。 * 进一步了解 Ruby 注解,它在日文和中文中用于提供发音指导。 * XHTML 2.0 的 Metainformation Attributes Module 支持在 HTML 中加入 RDF 元数据规范。 * 可以使用 XHTML 2.0 的 Object Module 包含任何对象。 * 如果需要从 XHTML 2.0 文档中提取 RDF 三元组,请了解 Gleaning Resource Descriptions from Dialects of Languages (GRDDL) 转换技术。 * W3C 关于 XHTML Media Types 的说明描述了网站支持 XHTML 的最佳实践。具体来说,根据 HTML Compatibility Guidelines,XHTML 2.0 不应该像 XHTML 1.0 那样用作 text/html。 * 微格式是让网页中的人类可读元素带有计算机也能解释的语义的一种方法。它们是连接今天的 HTML 特殊语义和明天的 RDF 兼容 XHTML 2.0 元数据的桥梁。 获得产品和技术 * 看一看 X-Smiles 浏览器,它对 W3C 很多新客户机技术提供早期支持(有时候只有部分支持)的一种实验性平台,其中包括 XHTML 2.0、SVG、XForms 和 SMIL。