XPath クエリの使用について (SQLXML 4.0)
XML パス言語 (XPath) クエリは、URL の一部として、またはテンプレート内で指定できます。 この結果のフラグメントの構造はマッピング スキーマによって決定され、値はデータベースから取得されます。 このプロセスは、CREATE VIEW ステートメントを使用してビューを作成し、そのビューに対して SQL クエリを記述するのと概念的には同じです。
注 |
---|
SQLXML 4.0 の XPath クエリを理解するには、XML ビューと、それに関連するテンプレートやマッピング スキーマなどの概念について理解している必要があります。 詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」と、W3C (World Wide Web Consortium) で定義されている 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> ノードを選択できます。 結果のノード セットには、注文日が 1999 年 7 月 14 日となっているすべての注文が含まれます。
XPath 言語は W3C (World Wide Web Consortium) によって標準のナビゲーション言語として定義されています。 SQLXML 4.0 には W3C XPath 仕様のサブセットが実装されています。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 では、さまざまな種類のエラー メッセージが返されます。
ドキュメント序数
SQL XML 4.0 では、ドキュメント序数が必ずしも決まっていません。 このため、following などのドキュメント序数を使用する数値型の述語や軸は実装されていません。
ドキュメント序数がないため、ノードの文字列値は、ノードが単一行の単一列にマップされる場合にのみ評価できます。 子要素を含む要素や IDREFS または NMTOKENS ノードは、文字列に変換できません。
注 場合によっては、key-fields 注釈、または relationship 注釈のキーから、決定的なドキュメント序数が得られますが、 これらの注釈はこのようなドキュメント序数を得ることを意図したものではありません。詳細については、「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 クエリはサポートされません。 このクエリでは、任意の Order の OrderDate が任意の Order の ShipDate と等しいすべての Customer が選択されます。
ただし、SQLXML 4.0 では、Customer[Order[@OrderDate=@ShipDate]] などのクエリはサポートされます。このクエリでは、任意の Order の OrderDate とその ShipDate が等しいすべての Customer が選択されます。
エラー処理とセキュリティ
使用されるスキーマと 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 を指定する必要があります。