技巧:使用 XML 和 XPointer::鏈接到文檔的特定部分
級(jí)別: 初級(jí)
Brett McLaughlin, Enhydra 策略顧問(wèn), Lutris Technologies
2001 年 7 月 01 日
本技巧文章介紹 XPointer,并討論如何將它與 XLink 一起使用,以引用另一篇文檔的特定部分。
在本技巧文章中,我希望以拙作 使用 XML 和 XLink 技巧一文中演示的為基礎(chǔ)。XLink 雖然有用,但只允許引用另一篇文檔。但在很多時(shí)候,您都要引用另一篇文檔的特定 部分。要做到這點(diǎn)很簡(jiǎn)單。這有些類似于在 HTML 中使用命名錨點(diǎn),可以通過(guò)在 XLink 上使用 XPointer 來(lái)完成。這兩個(gè)被設(shè)計(jì)成協(xié)同工作的規(guī)范十分自然地互為基礎(chǔ)。本技巧文章將演示如何在 XML 中使用 XPointer 來(lái)引用文檔的某一部分。
要引用文檔的一部分,首先要看一下將要鏈接到的
目標(biāo)文檔。如果可以,請(qǐng)確保該文檔使用
id
屬性。這將使鏈接和定位更容易。“清單
1”顯示了吉他工匠 Dana Bourgeois
制造的吉他清單,并包括每種類型的標(biāo)識(shí)。
注:為清晰起見(jiàn),將 Bourgeois 吉他的 URL 由實(shí)際 URL http://www.bourgeoisguitars.com 改成較短的 URL http://bg.com。這使代碼清單更易于閱讀。如果要實(shí)際看到這篇文檔,請(qǐng)將對(duì) http://bg.com 的引用改回 http://www.bourgeoisguitars.com。
清單 1. Bourgeois 吉他清單
|
對(duì)于本技巧文章,假設(shè)此文檔位于
http://bg.com/guitars.xml
。XPointer 不引用整篇文檔 -
那沒(méi)有多大用處,它允許您鏈接到文檔的特定部分。還記得 XLink 文章中的
xlink:href
屬性嗎?為那個(gè)屬性提供的值是 XLink
的目標(biāo)。但是要引用該頁(yè)面的一部分,可以向這些 URL 中添加一個(gè)井號(hào) (#)
和一個(gè) XPointer 表達(dá)式。例如,表達(dá)式
xpointer(id("slopeD"))
引用文檔中帶有 ID "slopeD"
的元素。因此,可以使用
http://bg.com/guitars.xml#xpointer(id("slopeD"))
引用“清單 1”中所示的 XML,然后是那個(gè)文檔中所描述的 Slope D
型號(hào)的吉他。很簡(jiǎn)單,是嗎?下面為您顯示我在 XLink
技巧文章中引入的描述吉他的 XML 文檔修訂版,它現(xiàn)在使用一些 XPointer
引用。
清單 2. 在 XML 文檔中使用 XPointer
|
現(xiàn)在,我的文檔可以引用 Dana Bourgeois 保留的有關(guān)他的吉他的 XML
內(nèi)容。即便他更改了此信息,我也無(wú)需擔(dān)心;我的文檔始終是最新的,因?yàn)樗绘溄拥剿逻^(guò)的信息。請(qǐng)注意,在上述代碼中,必須使用
&
而不是“和”符號(hào)(“&”)來(lái)轉(zhuǎn)義 XPointer
表達(dá)式中的引號(hào)。這會(huì)使連接的 URL 相當(dāng)長(zhǎng),而長(zhǎng) URL
可以導(dǎo)致討厭的輸入錯(cuò)誤。對(duì)于我們來(lái)說(shuō)幸運(yùn)的是,在鏈接到帶有 ID
標(biāo)記的元素時(shí),XPointer 允許使用方便的簡(jiǎn)寫(xiě)形式。除了使用
xpointer(id("D"))
形式,您還可以使用 ID
的值來(lái)定位。在這種情況下,那將是 "D"。這樣,我就可以將“清單
2”中的文檔簡(jiǎn)化成“清單
3”中所示的文檔,該文檔中的連接語(yǔ)法更清晰。
清單 3. 使用 ID 鏈接的 XPointer 簡(jiǎn)寫(xiě)形式
|
除了這種用簡(jiǎn)化的鏈接進(jìn)行比較簡(jiǎn)單的列示之外,您還可以指向其它元素的
相關(guān)元素。舉例來(lái)說(shuō),在
清單 4
中,我將
description
元素改成指向 bourgeois.xml
文件中指定的圖像。
在“清單 4”中,可以看到第一步是在被引用文檔中找到特定元素。那個(gè)元素用作附加到它之上的相關(guān)表達(dá)式的引用點(diǎn)。在本例中,指定了那個(gè)元素的子孫(由
descendant
關(guān)鍵字指定),在我們的示例中名為 "picture" 的那個(gè)元素。然后,該鏈接的最終目標(biāo)是那個(gè)元素名為 "url" 的屬性的值。我知道,這樣說(shuō)太費(fèi)口舌,但如果循序漸進(jìn)地做,就會(huì)相當(dāng)簡(jiǎn)單。
您應(yīng)該注意到,我在 清單 4 中 沒(méi)有使用上一節(jié)所談?wù)摰?ID 鏈接的簡(jiǎn)寫(xiě)形式。那是因?yàn)槭褂媚欠N ID 鏈接形式只允許直接鏈接;不使用 ID 鏈接的較長(zhǎng)形式,就無(wú)法進(jìn)行任何進(jìn)一步的鏈接(例如“清單 4”中的子代遍歷引用)。
有關(guān) XPointer 提供的多種不同選項(xiàng)的更多信息,請(qǐng)查看聯(lián)機(jī)的 XPointer 規(guī)范(請(qǐng)參閱 參考資料)。有關(guān)那個(gè)看起來(lái)很奇怪的鏈接語(yǔ)法的完整表述,可以查看 XPath;也可以聯(lián)機(jī)查看 XPath 規(guī)范(請(qǐng)參閱 參考資料)。
我知道,這只是一篇介紹,但現(xiàn)在,您可以告訴您的朋友和家人:關(guān)于 XPointer、XLink 和 XPath,您比他們多了解多少!試用它、閱讀規(guī)范,并關(guān)注即將出現(xiàn)的對(duì)這些與 XML 有關(guān)的規(guī)范的瀏覽器支持。
![]() ![]() |
![]()
|
- 您可以參閱本文在 developerWorks 全球站點(diǎn)上的
英文原文.
- 通過(guò)單擊本文頂部或底部的
討論來(lái)參加本文的
論壇。
- 閱讀我的
使用 XML 和 XLink
技巧文章。
- 查看
XPointer
規(guī)范。
- 還可以聯(lián)機(jī)查看
XPath
規(guī)范。
- 在
developerWorks
XML 專區(qū)中查找更多 XML 資源。
![]() ![]() |
![]()
|
![]() |
||
|
![]() |
Brett McLaughlin( brett@newinstance.com)是 Lutris Technologies 的 Enhydra 策略顧問(wèn),專長(zhǎng)于分布式系統(tǒng)體系結(jié)構(gòu)方面。他是 Java and XML(O'Reilly)的作者。他參與了如 Java Servlet、Enterprise JavaBean 技術(shù)、XML 和商家對(duì)商家應(yīng)用程序等技術(shù)的研究。他與 Jason Hunter 一起發(fā)起了 JDOM 項(xiàng)目,該項(xiàng)目為從 Java 應(yīng)用程序中操縱 XML 提供了一個(gè)簡(jiǎn)單的 API。他還是 Apache Cocoon 項(xiàng)目和 EJBoss EJB 服務(wù)器的活躍開(kāi)發(fā)人員以及 Apache Turbine 項(xiàng)目的共同創(chuàng)始人之一。 |
posted on 2006-03-21 23:31 Vincent.Chen 閱讀(287) 評(píng)論(0) 編輯 收藏 所屬分類: XML