-- 作者:yinyufa
-- 发布时间:5/2/2004 4:03:00 PM
-- [10100][转帖]技巧:使用 XML 和 XPointer ------- faly
http://bbs.xml.org.cn/dispbbs.asp?boardID=14&ID=6573&replyID=10845&skin=1 技巧:使用 XML 和 XPointer 链接到文档的特定部分 Brett McLaughlin (brett@newinstance.com) Enhydra 策略顾问,Lutris Technologies 2001 年 7 月 本技巧文章介绍 XPointer,并讨论如何将它与 XLink 一起使用,以引用另一篇文档的特定部分。 在本技巧文章中,我希望以拙作使用 XML 和 XLink 技巧一文中演示的为基础。XLink 虽然有用,但只允许引用另一篇文档。但在很多时候,您都要引用另一篇文档的特定 部分。要做到这点很简单。这有些类似于在 HTML 中使用命名锚点,可以通过在 XLink 上使用 XPointer 来完成。这两个被设计成协同工作的规范十分自然地互为基础。本技巧文章将演示如何在 XML 中使用 XPointer 来引用文档的某一部分。 要引用文档的一部分,首先要看一下将要链接到的目标文档。如果可以,请确保该文档使用 id 属性。这将使链接和定位更容易。“清单 1”显示了吉他工匠 Dana Bourgeois 制造的吉他清单,并包括每种类型的标识。 注:为清晰起见,将 Bourgeois 吉他的 URL 由实际 URL http://www.bourgeoisguitars.com 改成较短的 URL http://bg.com。这使代码清单更易于阅读。如果要实际看到这篇文档,请将对 http://bg.com 的引用改回 http://www.bourgeoisguitars.com。 清单 1. Bourgeois 吉他清单 <?xml version="1.0"?> <guitarTypes xmlns="http://bg.com"> <type model="OM" ID="OM"> <picture url="http://bg.com/images/vvOM.jpg" /> <description>Small bodied orchestra model.</description> </type> <type model="D" ID="D"> <picture url="http://bg.com/images/ricky%20skaggs%20model.jpg" /> <description> Bluegrass powerhouse in a standard dreadnought shape. </description> </type> <type model="slopeD" ID="slopeD"> <picture url="http://bg.com/images/slope%20d,%20custom%20version.jpg" /> <description> Slope shouldered dreadnought, perfect for vocal accompaniment. </description> </type> </guitarTypes> 对于本技巧文章,假设此文档位于 http://bg.com/guitars.xml。XPointer 不引用整篇文档 -那没有多大用处,它允许您链接到文档的特定部分。还记得 XLink 文章中的 xlink:href 属性吗?为那个属性提供的值是 XLink 的目标。但是要引用该页面的一部分,可以向这些 URL 中添加一个井号 (#) 和一个 XPointer 表达式。例如,表达式 xpointer(id("slopeD")) 引用文档中带有 ID "slopeD" 的元素。因此,可以使用 http://bg.com/guitars.xml#xpointer(id("slopeD")) 引用“清单 1”中所示的 XML,然后是那个文档中所描述的 Slope D 型号的吉他。很简单,是吗?下面为您显示我在 XLink 技巧文章中引入的描述吉他的 XML 文档修订版,它现在使用一些 XPointer 引用。 清单 2. 在 XML 文档中使用 XPointer <?xml version="1.0"?> <guitars xmlns="http://www.newInstance.com/about/guitars" xmlns:xlink="http://www.w3.org/1999/xlink"> <guitar luthier="Bourgeois" xlink:type="simple" xlink:href= "http://bg.com/guitars.xml#xpointer(id('OM'))"> <description xlink:type="simple" xlink:href= "http://newInstance.com/guitar/bgOM/pics/bougOM_front_full.jpg" xlink:actuate="onLoad" xlink:show="embed"> This is a real beauty in a small body. Although this is an OM, I use it for flatpicking bluegrass as well as for producing some beautiful fingerstyle sounds. </description> </guitar> <guitar luthier="Bourgeois" xlink:type="simple" xlink:href= "http://bg.com/guitars.xml#xpointer(id('D'))"> <descripton xlink:type="simple" xlink:href= "http://newInstance.com/guitar/bgD150/pics/bougd150_con_rim2.jpg" xlink:actuate="onLoad" xlink:show="embed"> Here's the holy grail in process. Dana Bourgeois is building this Brazilian rosewood and adirondack bluegrass monster right now. You'll know it's finished when you hear a run and your windows shatter! </description> </guitar> </guitars> 现在,我的文档可以引用 Dana Bourgeois 保留的有关他的吉他的 XML 内容。即便他更改了此信息,我也无需担心;我的文档始终是最新的,因为它只链接到他更新过的信息。请注意,在上述代码中,必须使用 & 而不是“和”符号(“&”)来转义 XPointer 表达式中的引号。这会使连接的 URL 相当长,而长 URL 可以导致讨厌的输入错误。对于我们来说幸运的是,在链接到带有 ID 标记的元素时,XPointer 允许使用方便的简写形式。除了使用 xpointer(id("D")) 形式,您还可以使用 ID 的值来定位。在这种情况下,那将是 "D"。这样,我就可以将“清单 2”中的文档简化成“清单 3”中所示的文档,该文档中的连接语法更清晰。 清单 3. 使用 ID 链接的 XPointer 简写形式 <?xml version="1.0"?> <guitars xmlns="http://www.newInstance.com/about/guitars" xmlns:xlink="http://www.w3.org/1999/xlink"> <guitar luthier="Bourgeois" xlink:type="simple" xlink:href="http://bg.com/guitars.xml#OM"> <descripton xlink:type="simple" xlink:href=" http://newInstance.com/guitar/bgOM/pics/bougOM_front_full.jpg" xlink:actuate="onLoad" xlink:show="embed"> This is a real beauty in a small body. Although this is an OM, I use it for flatpicking bluegrass as well as for producing some beautiful fingerstyle sounds. </description> </guitar> <guitar luthier="Bourgeois" xlink:type="simple" xlink:href="http://bg.com/guitars.xml#D"> <descripton xlink:type="simple" xlink:href=" http://newInstance.com/guitar/bgD150/pics/bougd150_con_rim2.jpg" xlink:actuate="onLoad" xlink:show="embed"> Here's the holy grail in process. Dana Bourgeois is building this Brazilian rosewood and adirondack bluegrass monster right now. You'll know it's finished when you hear a run and your windows shatter! </description> </guitar> </guitars> 除了这种用简化的链接进行比较简单的列示之外,您还可以指向其它元素的 相关元素。举例来说,在清单 4 中,我将 description 元素改成指向 bourgeois.xml 文件中指定的图像。 在“清单 4”中,可以看到第一步是在被引用文档中找到特定元素。那个元素用作附加到它之上的相关表达式的引用点。在本例中,指定了那个元素的子孙(由 descendant 关键字指定),在我们的示例中名为 "picture" 的那个元素。然后,该链接的最终目标是那个元素名为 "url" 的属性的值。我知道,这样说太费口舌,但如果循序渐进地做,就会相当简单。 您应该注意到,我在清单 4 中没有使用上一节所谈论的 ID 链接的简写形式。那是因为使用那种 ID 链接形式只允许直接链接;不使用 ID 链接的较长形式,就无法进行任何进一步的链接(例如“清单 4”中的子代遍历引用)。 有关 XPointer 提供的多种不同选项的更多信息,请查看联机的 XPointer 规范(请参阅参考资料)。有关那个看起来很奇怪的链接语法的完整表述,可以查看 XPath;也可以联机查看 XPath 规范(请参阅参考资料)。 我知道,这只是一篇介绍,但现在,您可以告诉您的朋友和家人:关于 XPointer、XLink 和 XPath,您比他们多了解多少!试用它、阅读规范,并关注即将出现的对这些与 XML 有关的规范的浏览器支持。 [此贴子已经被admin于2004-5-2 17:25:53编辑过]
|