Vincent.Chan‘s Blog

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          網(wǎng)站

          最新評(píng)論

          技巧:使用 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 吉他清單
          												<?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>

          對(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
          												<?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>

          現(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ě)形式
          												<?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:>
          <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:>
          <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>

          除了這種用簡(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ī)范的瀏覽器支持。





          回頁(yè)首


          參考資料





          回頁(yè)首


          關(guān)于作者

          Brett McLaughlin

          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

          主站蜘蛛池模板: 襄樊市| 富平县| 涪陵区| 定襄县| 大兴区| 东乡族自治县| 克东县| 固安县| 灵宝市| 梅州市| 若尔盖县| 津南区| 耿马| 科技| 白水县| 德阳市| 德兴市| 遂昌县| 阿拉尔市| 介休市| 延长县| 新郑市| 朔州市| 陇西县| 罗山县| 太仆寺旗| 金秀| 无棣县| 新和县| 崇州市| 巩留县| 兰溪市| 资阳市| 大名县| 宁都县| 古田县| 周口市| 青岛市| 肥乡县| 临汾市| 乡宁县|