XML パス言語 (XPath) クエリは、URL の一部として、またはテンプレート内で指定できます。 マッピング スキーマによって、この結果のフラグメントの構造が決定され、値がデータベースから取得されます。 このプロセスは概念的には、CREATE VIEW ステートメントを使用してビューを作成し、それらに対する SQL クエリを記述するのと似ています。
注
SQLXML 4.0 の XPath クエリを理解するには、XML ビューと、テンプレートやマッピング スキーマなどの関連概念を理解している必要があります。 詳細については、「 注釈付き XSD スキーマの概要 (SQLXML 4.0)」および World Wide Web Consortium (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 は属性ノード、 "重要" はテキスト ノードです。
XPath は、XML ドキュメントからノードのセットを選択するために使用されるグラフ ナビゲーション言語です。 各 XPath 演算子は、前の XPath 演算子によって選択されたノード セットに基づいてノード セットを選択します。 たとえば、<Customer> ノードのセットを指定すると、XPath では、日付属性値が "7/14/1999" のすべての <Order> ノードを選択できます。 結果のノード セットには、注文日が 1999 年 7 月 14 日のすべての注文が含まれます。
XPath 言語は、標準のナビゲーション言語として World Wide Web Consortium (W3C) によって定義されています。 SQLXML 4.0 は、 http://www.w3.org/TR/1999/PR-xpath-19991008.htmlにある W3C XPath 仕様のサブセットを実装します。
W3C XPath 実装と SQLXML 4.0 実装の主な違いを次に示します。
ルート クエリ
SQLXML 4.0 では、ルート クエリ (/) はサポートされていません。 すべての XPath クエリは、スキーマの最上位レベルの <ElementType> で開始する必要があります。
エラーの報告
W3C XPath 仕様では、エラー条件は定義されません。 ノードの選択に失敗した XPath クエリは、空のノード セットを返します。 SQLXML 4.0 では、クエリはさまざまな種類のエラー メッセージを返すことができます。
ドキュメントの順序
SQLXML 4.0 では、ドキュメントの順序が常に決定されるとは限りません。 そのため、ドキュメントの順序 (
following
など) を使用する数値述語と軸は実装されません。ドキュメントの順序がないということは、ノードの文字列値を評価できるのは、そのノードが 1 つの行の 1 つの列にマップされる場合のみです。 子要素を持つ要素、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 では、
Customers[Order/@OrderDate=Order/@ShipDate]
などのクロスプロダクト XPath クエリはサポートされていません。 このクエリでは、OrderDate が任意の注文の ShipDate と等しい任意の Order を持つすべての顧客を選択します。ただし、SQLXML 4.0 では、orderDate が ShipDate と等しい任意の Order を持つ顧客を選択する、
Customer[Order[@OrderDate=@ShippedDate]]
などのクエリがサポートされています。エラー処理とセキュリティ
使用されるスキーマと XPath クエリ式によっては、Transact-SQL エラーが特定の条件下でユーザーに公開される可能性があります。
以降のセクションの表では、SQLXML 4.0 での XPath クエリの実装とこれらの領域での W3C 仕様の違いについて詳しく説明します。
サポートされている機能
次の表に、SQLXML 4.0 で実装されている XPath 言語の機能を示します。
特徴 | アイテム | サンプル クエリへのリンク |
---|---|---|
軸 |
attribute 軸、 child 軸、 parent 軸、および self 軸 |
XPath クエリでの軸の指定 (SQLXML 4.0) |
連続する述語と入れ子になった述語を含むブール値述語 | XPath クエリでの算術演算子の指定 (SQLXML 4.0) | |
すべての関係演算子 | =、!=、 <、 <=、 >、 >= | XPath クエリでの関係演算子の指定 (SQLXML 4.0) |
算術演算子 | +、-、*、div | XPath クエリでの算術演算子の指定 (SQLXML 4.0) |
明示的な変換関数 |
number() 、 string() 、 Boolean() |
XPath クエリでの明示的な変換関数の指定 (SQLXML 4.0) |
ブール演算子 | AND、または | XPath クエリでのブール演算子の指定 (SQLXML 4.0) |
ブール関数 |
true() 、 false() 、 not() |
XPath クエリでのブール関数の指定 (SQLXML 4.0) |
XPath 変数 | XPath クエリでの XPath 変数の指定 (SQLXML 4.0) |
サポートされていない機能
次の表に、SQLXML 4.0 で実装されていない XPath 言語の機能を示します。
特徴 | アイテム |
---|---|
軸 |
ancestor 、 ancestor-or-self 、 descendant 、 descendant-or-self (//) 、 following 、 following-sibling 、 namespace 、 preceding 、 preceding-sibling |
数値述語 | |
算術演算子 | モッド |
ノード関数 |
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() |
Numeric 関数 |
sum() 、 floor() 、 ceiling() 、 round() |
Union 演算子 | | |
テンプレートで XPath クエリを指定する場合は、次の動作に注意してください。
- XPath には、XML で特別な意味を持つ < や > などの文字を含めることができます (テンプレートは XML ドキュメントです)。 XML エンコードを使用してこれらの文字をエスケープするか、URL に XPath を指定する必要があります。