级别: 初级
Brett McLaughlin, Enhydra 策略顾问, Lutris Technologies
2001 年 7 月 01 日
XLink 是一种与 XML 相关的规范,它使您在 XML 文档中获得生动的链接效果。在这篇短小的技巧文章中,学习如何通过 XLink 在 XML 文档中包含其它 XML 文档的部件。代码示例演示了这项技术。
自两年
多前,发布了 XML以来,开发了数量令人难以置信的、都与 "X" 相关的事物。正如该事实所证明,您可以发现当今许多与 XML
相关的规范:XPointer、XLink、XSD(XML
Schema)、RDF、RSS、XHTML,甚至还可以说出一些。在本文中,我简要探索了 XLink,定义了引用其它文档的 XML
链接机制的一种特别有用的规范。
对于 HTML 作者来说,开始 XLink 听起来非常象
<a href="http://www.nickelcreek.com">Check out Nickel Creek!</a>
中所熟悉的
a
元素。但 XLink 提供的远远不止是单向链接。使用 XLink,可以创建双向链接。还可以定义如何处理链接,并且更重要的是,可以允许从
任何 XML 元素(而不是仅仅从
a
元素)链接。由于所有这些原因,很值得我们去了解 XLink。
操作中 XLink
让我从为您显示一个小的 XML 文档开始,这个文档表示了我的几把吉他。
清单 1使用了一些 XLink 构造。
首先,您注意到我引用了 XLink 名称空间,以便该文档访问 XLink 属性和功能。其次,我只涵盖了 "simple" 类型的 XLink,该类型是由
xlink:type
属性指定的。那是由于支持 XLink 的浏览器很少,目前,只发现 Mozilla 和 Netscape 6 支持。(我还无法在 IE 6.0 中测试过,但版本 5.5 是无 XLink 支持。)所以您只需要了解 XLink 的基本特征
现在,您有一些基本的 XML 可以使用。为了利用 XLink,您所要做的就是使用包含链接的元素上的一些属性。请看文档的
guitar
元素,它对每个吉他都指定了一个弦乐器制作匠(吉他制造者)。我已经讨论过设置成值 "simple" 的
xlink:type
属性的用法。然后该元素使用 XLink 指定链接到的 URL。为了指定这个 URL,该元素使用
xlink:href
属性。在这一点上,您可能认为,“这没有什么大不了的”,它就象 HTML 一样。这一点上,您是对的。缺省情况下(当然,这里假定浏览器支持
XLink),当单击该链接时,这会设置一个替换当前窗口的链接。、如果希望在一个新窗口中打开链接的目标,那么可以通过添加 xlink:show
属性,给它一个 "new" 值来实现;缺省是 "replace",这是普通的 HTML 行为。
XLink 的潜力
到现在为止,我只讲述了基本链接。如果想访问作为资源的远程位置,譬如图像链接,事情会变得很有趣。请查看清单 1 中的
description
元素。它将
xlink:show
属性值设置成 "embed"。这意味着会在该页面中直接处理该资源(在本示例中,显示所描述吉他的图像文件)。这实质上是告诉支持 XLink
的浏览器,在 XML 中直接插入指定的文档。如果考虑的不仅仅是一个图像而是另一个 XML 文档时,可能性确实还远远不止这些。
更深一步,您可以指定资源
什么时候出现。计时是由
xlink:actuate
属性来处理,它定义什么时候资源是 "read" 以及显示。值为 "onLoad" 时,如清单 1
中所示,当初始文档装入时,就载入该资源,这时还应当显示该资源。您还可以指定 "onRequest"
值,这意味着只有当单击该链接时,才会显示该资源。对于低宽带设置,这很方便,使得用户可以选择他想花功夫等待的资源。
我知道本文仅是 XLink 一瞥,但它应当给您一个好的开始。关于 XLink 的详细信息,请查看
参考资料中的规范。您还应该密切注视新的支持 XLink 的浏览器的功能列表,一旦支持 XLink,就使用它吧。
参考资料
关于作者
|
|
|
Brett McLaughlin (
brett@newinstance.com) 是 Lutris Technologies 的 Enhydra 策略顾问,他致力于研究分布式系统体系结构。他是
Java and XML(O'Reilly)
的作者。他还参与了诸如 Java Servlet、Enterprise JavaBeans 技术、XML
和商家对商家应用程序等技术的研究。他与 Jason Hunter 一起创建了 JDOM 项目,该项目为在 Java 应用程序中使用 XML
提供了一个简单的 API。他还是 Apache Cocoon 项目、EJBoss EJB 服务器的活跃开发人员,以及 Apache
Turbine 项目的共同创始人。
|