级别: 初级 Micah Dubinko (micah@brainattic.info), 首席顾问, Brain Attic, L.L.C.
2005 年 3 月 01 日 作为 Web 的基本组成部分,人们曾经多次尝试在简单 HTML 所允许的基本格式的基础上实现超文本链接的标准化。可以将这些尝试看作是平衡机器处理能力和编辑的方便性的努力。这一领域的最新规范 XHTML 2.0,可能已经找到了问题的答案。
基本上所有网站都共有的东西就是超链接。无论上网新手还是高水品的网上冲浪者都依靠链接在 Web 上导航。在 XML 开发的初期,标准的制定者一直将链接看作是整个脉络的重要组成部分 —— 事实上,链接规范曾被称为“Extensible Markup Language (XML): Part 2. Linking”(请参阅参考资料)。
Web 程序开发员们都非常熟悉清单 1 中的简单链接标记,其中 href 属性创建的链接可用于导航,而 src 属性用于创建通常自动加载的链接。
清单 1. HTML 链接
<a href="http://example.com" rel="example"
title="link to a remote page">
<img src="http://example.info/img.png"
alt="link to a remote image" />
</a>
|
XHTML version 2.0 保留了这些基本的方法,但是也增加了一些新的变化。以下描述以 2004 年 7 月 22 日发布的 XHTML 2.0 Working Draft 为基础。
链接:从任何元素出发
 |
为何不用 XLink?
W3C 有一个推荐标准 XML Linking Language(XLink —— 请参阅参考资料),其设计目的是用于超文本链接。但是,人们认为很多 XHTML 版本和 XLink 不兼容。不过,XHTML 仍然采用了该规范中定义的有用术语和语义。
XLink 有助于确定什么时候激活链接,包括通常用于网页图片的 onLoad 和用于手工激活超链接的 onRequest。XLink 还有助于确定链接的行为,包括替换当前页面的超链接 replace、弹出窗口的 new 和用于图片之类对象的 embed。XLink 还包含其他的规定,以确保这些概念不仅能用于基本的可视化浏览器,还可用于其他上下文,包括语音和其他可访问性应用程序。
那么,它在什么地方与 XLink 不兼容呢?这方面已经有很多的论述(请参阅参考资料),简而言之,XLink 要求所有的链接都命名为 xlink:href,其前缀被映射为通常意义上的名称空间。在本文中可以看到,XHTML 2.0 要求对不同类型的链接使用不同的名称,而且这些名称常常在同一个元素中。
|
|
清单 1 中使用 a(代表“anchor(锚)”)元素定义了一个外向链接。但是多数人都认为锚是链接目标,而不是源。只是由于历史的原因,a 元素才变成了指定链接的实际方法。换句话说,没有理由不使用其他元素作为链接端点。XHTML 2.0 放宽了这一限制,扩展了 href 和其他几个属性的使用范围。
表的单元格、图片、列表项等等都可以是链接。只要增加 href 属性并给定目标 URL 即可。事实上,XHTML 2.0 定义的几个属性集合中就包括超文本属性集合,适用于 XHTML 2.0 中的每个元素。
超文本属性集合
除了 href 之外,XHTML 2.0 还提供了一组附加属性来进一步完善链接的描述。这些属性在 XHTML 2.0 进入 Last Call 阶段时很可能会稍作修改,任何可以使用 href 的地方都可以使用这些属性:
-
hreflang 表明链接的远程端所需要的语言,它可以是一个用空格分隔的列表。
-
hreftype 表明链接目标的媒体类型,也就是说,指出它是 SVG、XHTML,还是其他类型。它也可以是空格分隔的列表。
-
cite 指明某些文本的源文档引用,通常是某种类型的引用。以前该属性只能用于 blockquote 这类属性。现在应用的范围放宽了,程序开发员可以考虑用更加丰富的方式链接超文本。最有意思的是,XHTML 规范指出,用户代理“应该”以某种方式支持这种链接。具体的细节留给软件,但是我希望在右击菜单或者更有创意的浏览器中看到这种链接。
-
access(和以前版本中的 accesskey 不同)为文档中的不同部分指定简单的名称,比如“contents”。然后可访问性工具可以对这些部分进行适当的处理。
-
nextfocus 和 prevfocus 属性包含其他元素的 IDREF。作为一个整体,这些表单连接在一起可以导航整个文档,而不只是导航锚和表单控件。默认的导航顺序和元素在文档中出现的顺序一致,这些属性可以更精确地调整导航顺序。此外,如果 XHTML 文档引用包含片段,比如 http://search.example.com#query,而且该文档中包含带有 query 的 id 属性的可聚焦元素,则该元素将接收初始焦点,并将它作为进一步导航的起点。
-
target 和 xml:base 在 XHTML 2.0 中基本上没有变。Web 程序开发员可能已经习惯了用 target="_new" 规定链接打开新的窗口。XHTML 2.0 不再硬编码任何特殊值,而是提供了一个相关规范 XFrames(请参阅参考资料),用这种规范来定义链接的资源如何适应整个环境。xml:base 属性设置负责解释包含相对 URL 的上下文。
超文本属性集合的一种应用是导航列表,这是 XHTML 2.0 中新增的一种特性,如清单 2 所示:
清单 2. 导航列表
<nl xml:base="http://xformsinstitute.com/essentials/browse/">
<label>Table of Contents</label>
<li href="ch01.php">Introduction to Web Forms</li>
<li href="ch02.php">XForms Building Blocks</li>
<li href="ch03.php">XPath in XForms</li>
...
</nl>
|
 |
HLink:一种替代方案?
为了克服 XLink 的明显不足,HTML 工作组起草了一份称为 HLink 的提议(请参阅参考资料),它汲取了 XLink 的优点,可以映射到任意元素的任何属性。HLink 有一些有趣的改进,比如用于鼠标右击或者等价操作的 onRequestSecondary 的 actuate 值、XLink 自身没有明确处理表单提交和错误处理这类事情的方法。
但是最终 HLink 并不是一种合适的解决方案。您可以直接使用 XLink 的术语和语义,没有必要在两者之间定义单独的层次。
|
|
导航列表帮助程序开发员指导用户访问自己的站点,这是很多开发人员试图通过表单完成的任务。但是,明确的超链接标记更加自然,更具有可访问性,适合传递导航信息。
内嵌属性集合
到目前为止,讨论的所有链接都是 href 风格的链接,即用户通过单击触发某些事情。但是还会遇到直接加载的链接,特别是图片。XHTML 2.0 为此定义了内嵌属性集合。
该集合中的典型属性是 src,它包含远程资源的 URL,通常在主文档加载的时候传输,不需要用户采用特殊操作。另一个属性 type 提供了在另一端能够看到什么的元数据。
有一个关键设计特性很容易被忽略:如果不能加载,所链接的内容就会代替该元素;换句话说,有一种内置的应变机制,即使有多层嵌套,也能应付。清单 3 显示了工作原理。
清单 3. 内嵌的应变机制
<p href="http://scp.example.info" src="cow.jpg" usemap="#map1">
<nl>
<li href="scp.html"/>
<li href="/"/>
</nl>
</p>
|
在清单 3 中,纯文本浏览器或者关闭图像的图形化浏览器可以看到一个导航列表,但是其他人可以看到 p 元素定义的交互式图像映射,在 map1 中说明了这些细节。这种应变行为可用于改善 object 元素的效果,如清单 4 所示。
清单 4. 对象应变
<!-- First, try Flash -->
<object src="earthtime.swf" type="application/x-shockwave-flash">
<!-- Else, try the image -->
<object src="earthtime.jpg" type="image/jpeg"/">
<!-- Else, alternate text -->
A map of the earth showing night and day
</object>
</object>
|
遇到清单 4 中的代码后,浏览器首先尝试加载 Flash applet。如果由于某种原因失败,浏览器就会尝试加载 JPG 图像。如果这也失败了,那么浏览器会显示最内层的替代文本。Web 用户欢迎这种灵活的处理方式。
结束语
可以肯定地说,围绕超文本链接进行的标准开发还没有实现人们最初的设想。但最终似乎还是有了一些进展。对那些主要靠浏览器的查看源代码特性进行学习的程序设计员来说,XHTML 2.0 在很大程度上保持了友好性,同时又增加了一些功能和灵活性。
XHTML 2.0 将进入 Last Call 阶段,其间工作组将征求一些建设性的意见。如果以其他 W3C 研究为榜样,这可能是一个漫长的、充满争议的过程。但即使现在,XHTML 2.0 仍然产生了积极的影响,刺激了 Web 开发社区内关于链接的讨论。所有有权发言的人现在都认识到了这个问题,都在认真讨论它,这是一件好事。
只有时间会告诉您最终将得到什么结果。很多人希望 XHTML 2.0 能够创造一个更好的 Web。
参考资料
关于作者
对本文的评价
|