次の方法で共有


XPath クエリの使用の概要 (SQLXML 4.0)

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 stringnumber、および 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 言語の機能を示します。

特徴 アイテム
ancestorancestor-or-selfdescendantdescendant-or-self (//)followingfollowing-siblingnamespaceprecedingpreceding-sibling
数値述語
算術演算子 モッド
ノード関数 ancestorancestor-or-selfdescendantdescendant-or-self (//)followingfollowing-siblingnamespaceprecedingpreceding-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 を指定する必要があります。

こちらもご覧ください

SQLXML 4.0 での XPath クエリの使用