html的未来: xhtml 2.0

点击添加到收藏夹
  • 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="/files/uploadimg/20060403/1606520.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.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 给出的这个例子,它说明了如何在真正的文档体中使用元数据: