技巧:使用 XML 和 XPointer::鏈接到文檔的特定部分
級別: 初級
Brett McLaughlin, Enhydra 策略顧問, Lutris Technologies
2001 年 7 月 01 日
本技巧文章介紹 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 吉他清單
|
對于本技巧文章,假設此文檔位于
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
|
現在,我的文檔可以引用 Dana Bourgeois 保留的有關他的吉他的 XML
內容。即便他更改了此信息,我也無需擔心;我的文檔始終是最新的,因為它只鏈接到他更新過的信息。請注意,在上述代碼中,必須使用
&
而不是“和”符號(“&”)來轉義 XPointer
表達式中的引號。這會使連接的 URL 相當長,而長 URL
可以導致討厭的輸入錯誤。對于我們來說幸運的是,在鏈接到帶有 ID
標記的元素時,XPointer 允許使用方便的簡寫形式。除了使用
xpointer(id("D"))
形式,您還可以使用 ID
的值來定位。在這種情況下,那將是 "D"。這樣,我就可以將“清單
2”中的文檔簡化成“清單
3”中所示的文檔,該文檔中的連接語法更清晰。
清單 3. 使用 ID 鏈接的 XPointer 簡寫形式
|
除了這種用簡化的鏈接進行比較簡單的列示之外,您還可以指向其它元素的
相關元素。舉例來說,在
清單 4
中,我將
description
元素改成指向 bourgeois.xml
文件中指定的圖像。
在“清單 4”中,可以看到第一步是在被引用文檔中找到特定元素。那個元素用作附加到它之上的相關表達式的引用點。在本例中,指定了那個元素的子孫(由
descendant
關鍵字指定),在我們的示例中名為 "picture" 的那個元素。然后,該鏈接的最終目標是那個元素名為 "url" 的屬性的值。我知道,這樣說太費口舌,但如果循序漸進地做,就會相當簡單。
您應該注意到,我在 清單 4 中 沒有使用上一節所談論的 ID 鏈接的簡寫形式。那是因為使用那種 ID 鏈接形式只允許直接鏈接;不使用 ID 鏈接的較長形式,就無法進行任何進一步的鏈接(例如“清單 4”中的子代遍歷引用)。
有關 XPointer 提供的多種不同選項的更多信息,請查看聯機的 XPointer 規范(請參閱 參考資料)。有關那個看起來很奇怪的鏈接語法的完整表述,可以查看 XPath;也可以聯機查看 XPath 規范(請參閱 參考資料)。
我知道,這只是一篇介紹,但現在,您可以告訴您的朋友和家人:關于 XPointer、XLink 和 XPath,您比他們多了解多少!試用它、閱讀規范,并關注即將出現的對這些與 XML 有關的規范的瀏覽器支持。
![]() ![]() |
![]()
|
- 您可以參閱本文在 developerWorks 全球站點上的
英文原文.
- 通過單擊本文頂部或底部的
討論來參加本文的
論壇。
- 閱讀我的
使用 XML 和 XLink
技巧文章。
- 查看
XPointer
規范。
- 還可以聯機查看
XPath
規范。
- 在
developerWorks
XML 專區中查找更多 XML 資源。
![]() ![]() |
![]()
|
![]() |
||
|
![]() |
Brett McLaughlin( brett@newinstance.com)是 Lutris Technologies 的 Enhydra 策略顧問,專長于分布式系統體系結構方面。他是 Java and XML(O'Reilly)的作者。他參與了如 Java Servlet、Enterprise JavaBean 技術、XML 和商家對商家應用程序等技術的研究。他與 Jason Hunter 一起發起了 JDOM 項目,該項目為從 Java 應用程序中操縱 XML 提供了一個簡單的 API。他還是 Apache Cocoon 項目和 EJBoss EJB 服務器的活躍開發人員以及 Apache Turbine 項目的共同創始人之一。 |
posted on 2006-03-21 23:31 Vincent.Chen 閱讀(287) 評論(0) 編輯 收藏 所屬分類: XML