使用 XPath 查詢的簡介 (SQLXML 4.0)
您可以將 XML 路徑語言 (XPath) 查詢指定成 URL 的一部分或在範本中指定此查詢。 對應結構描述會決定這個產生片段的結構,而且系統會從資料庫中擷取值。 這個程序在概念上類似於使用 CREATE VIEW 陳述式來建立檢視,然後針對它們撰寫 SQL 查詢。
[!附註]
若要了解 SQLXML 4.0 中的 XPath 查詢,您必須熟悉 XML 檢視和相關的概念,例如範本與對應結構描述。 如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>,以及全球資訊網協會 (W3C) 所定義的 XPath 標準。
XML 文件是由元素節點、屬性節點、文字節點等節點所組成。 例如,請考慮下列 XML 文件:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
在這份文件中,<Customer> 是元素節點、cid 是屬性節點,而 "Important" 是文字節點。
XPath 是一種圖表導覽語言,可用來從 XML 文件中選取一組節點。 每個 XPath 運算子都會根據前一個 XPath 運算子所選取的節點集來選取節點集。 例如,在給定一組 <Customer> 節點的情況下,XPath 可以選取所有 date 屬性值為 "7/14/1999" 的 <Order> 節點。 產生的節點集會包含訂單日期為 7/14/1999 的所有訂單。
全球資訊網協會 (W3C) 將 XPath 語言定義成標準導覽語言。 SQLXML 4.0 會實作 W3C XPath 規格的子集,而此規格位於:http://www.w3.org/TR/1999/PR-xpath-19991008.html。
下面是 W3C XPath 實作與 SQLXML 4.0 實作之間的重要差異。
根目錄查詢
SQLXML 4.0 不支援根目錄查詢 (/)。 每個 XPath 查詢都必須從結構描述中的最上層 <ElementType> 開始。
報告錯誤
W3C XPath 規格沒有定義任何錯誤條件。 無法選取任何節點的 XPath 查詢會傳回空的節點集。 在 SQLXML 4.0 中,查詢可能會傳回許多錯誤訊息類型。
文件順序
在 SQLXML 4.0 中,不一定會決定文件順序。 因此,系統不會實作使用文件順序 (例如 following) 的數值述詞和軸。
缺少文件順序也就表示只有當節點對應至單一資料列中的單一資料行時,才能夠評估該節點的字串值。 具有子元素的元素或是 IDREFS 或 NMTOKENS 節點無法轉換成字串。
[!附註]
在某些情況下,來自 relationship 註解的 key-fields 註解或索引鍵可能會產生具決定性的文件順序。 不過,這並非這些註解的主要用途。如需詳細資訊,請參閱<使用 sql:key-fields 來識別索引鍵資料行 (SQLXML 4.0)>和<使用 sql:relationship 指定關聯性 (SQLXML 4.0)>。
資料類型
SQLXML 4.0 在實作 XPath string、number 和 boolean 資料類型方面有所限制。 如需詳細資訊,請參閱<XPath 資料類型 (SQLXML 4.0)>。
交叉乘積查詢
SQLXML 4.0 不支援交叉乘積 XPath 查詢,例如 Customers[Order/@OrderDate=Order/@ShipDate]。 這個查詢會選取 OrderDate 等於 ShipDate 之任何訂單的所有客戶。
不過,SQLXML 4.0 支援 Customer[Order[@OrderDate=@ShippedDate]] 等查詢,其中系統會刪除 OrderDate 等於其 ShipDate 之任何訂單的客戶。
錯誤處理和安全性
根據所使用的結構描述和 XPath 查詢運算式,在特定條件下,Transact-SQL 錯誤可能會公開給使用者。
下列各節中的表格會提供有關在 SQLXML 4.0 中實作 XPath 查詢與 W3C 規格的差異之處。
支援的功能
下表將顯示在 SQLXML 4.0 中實作之 XPath 語言的功能。
功能 |
項目 |
範例查詢的連結 |
---|---|---|
軸 |
attribute、child、parent 和 self 軸 |
|
布林值述詞,包括連續和巢狀述詞 |
|
|
所有關係運算子 |
=, !=, <, <=, >, >= |
|
算術運算子 |
+、-、*、div |
|
明確轉換函數 |
number(), string(), Boolean() |
|
布林運算子 |
AND、OR |
|
布林函數 |
true(), false(), not() |
|
XPath 變數 |
|
不支援的功能
下表將顯示沒有在 SQLXML 4.0 中實作之 XPath 語言的功能。
功能 |
項目 |
---|---|
軸 |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
數值述詞 |
|
算術運算子 |
mod |
節點函數 |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
字串函數 |
string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
布林函數 |
lang() |
數值函數 |
sum(), floor(), ceiling(), round() |
Union 運算子 |
| |
當您在範本中指定 XPath 查詢時,請注意下列行為:
- XPath 可以包含在 XML 中具有特殊意義的 < 或 & 等字元 (而且範本是 XML 文件)。 您必須使用 XML & 編碼來逸出這些字元,或在 URL 中指定 XPath。