概述
XPointer(XML Pointer Language)是XML指針語言,它定義了XML文檔的每個單獨部分的定址模式,用來定位XML文檔中的不同片段。XPointer是XPath標準的擴展,它重用了XPath的許多概念、規則以及語法。
XPointer提供了對元素、字元串和其他部分的特定引用方法,XPath通過軸、定位測試和謂詞對XML文檔中的樹形結構各部分進行選擇。XPointer的思想也是如此。XPointer還可以表達多個這樣的選擇,而且依次在前面所選的結果中再次進行選擇。
XPointer定位路徑
XPath作為XPointer的基石提供了表達定位的語法,XPointer還在它的基礎上進行了擴展,XPath提供了對XML文檔中的子節點集合進行定位的方法。XPath通過謂詞對軸進行過濾是根據對節點或節點集的操作來定義的,而XPointer還需要指定另外意義上的文檔節點。
XPointer的主要功能是在XML文檔中定位片段、查找資源。XLink可以連結資源,通過把XPointer和XLink聯合使用,就可以連結資源的任意部分,而不是整個資源。所以,在XML連結中,通常將它加到URL的結尾以便更明確地表示目標資源。
但是,XPointer語言的使用並不局限於XML連結,它可以連結到特定位置,甚至可以連結到XML文檔中的某個位置範圍,還可以使用字元串來匹配搜尋XML文檔。
在HTML中,有一個類似於XPointer的標記<a>,它的作用就是指明可以連結到被<a>元素的屬性href指定連結的位置。但是,使用HTML超連結只能連結到整個文檔,對於連結文檔內部就會比較麻煩,而XPointer對XML文檔則解決了這個問題。由於XML是結構化的文檔,其內部都是由節點來標識的,所以町以藉助檔案結構進行內部定位。XPointer支持在XML文檔中定位元素、屬性、字元串等內部結構。
XPointer語言基於XSLT中的XPath,支持完整形式(Full XPointers)、無修飾名稱(Bare Names)或子節點序列(Child Sequences)三種形式以定位片段。
形式
完整形式
完整形式的XPointer的形式為XPointer表達式,其中表達式用於定位計算,得到需要的資源片斷,所有的定位計算都基於一個上下文節點。一般而言,最初始的上下文節點總是文檔中的確定位置,如文檔的根節點、文檔中具有確定id屬性值的元素(用函式id()表示)、當前元素(用函式here()表示)等。
無修飾名稱
無修飾名稱只有一個名稱,表示檔案中id等於指定名稱的元素,它提供了與HTML檔案兼容的方式以定位文檔片段。
子節點序列
子節點序列由名稱、一系列數字和“/”組成,其中“/”用於分隔名稱和數字,數字n表示前面定位元素的第n個直接子元素,子節點序列必須以“/1”或名稱打頭,表示該序列從根元素或指定id的元素開始。
事實上,無修飾名稱和子節點序列形式都是完整形式的簡寫形式。同XPath一樣,XPointer語言的表達式也是由一個或多個定位步驟構成的定位路徑,並且每個定位步驟由“/”隔開。一個定位步驟由軸、節點測試及謂詞構成。
結構
XPointer表達式定位路徑示例如圖:
第一個表達式表示查找id為xb112的元素,該表達式可以簡寫為xb112。
第二個表達式使用了兩個XPointer語句,表示先查找id為xb112的元素,如果未找到,則查找id為xb113的元素。
第三個表達式中,第一個“/”表示文檔的根節點,該定位路徑中包含了4個定位步驟,該表達式表示查找根元素students的子元素student下任意級別的第三個school元素。該表達式可以簡寫為XPointer(/students/student/*/schoo1[3])。
第四個表達式中查找文檔中元素book下的前10個chapter元素。
第五個表達式中,*表示所有的子元素,該表達式表示查找根元素下第3個子元素下的第1個子元素,可以簡寫為/3/1。
第六個表達式表示查找id為xb112的元素的第5個子元素下的第2個子元素,可以簡寫為xb112/5/2。