Partager via


Spécification de prédicats de sélection dans le chemin d'accès d'emplacement (SQLXML 4.0)

Un prédicat filtre un élément node-set par rapport à un axe (semblable à une clause WHERE dans une instruction SELECT). Le prédicat est spécifié entre crochets. Pour chaque nœud de l'élément node-set à filtrer, l'expression de prédicat est évaluée avec ce nœud en tant que nœud de contexte et avec le nombre de nœuds de l'élément node-set en tant que taille de contexte. Si l'expression de prédicat prend la valeur TRUE pour ce nœud, ce dernier est inclus dans l'élément node-set obtenu.

XPath autorise également un filtrage basé sur les positions. Une expression de prédicat qui correspond à un nombre sélectionne ce nœud ordinal. Par exemple, le chemin d'accès d'emplacement Customer[3] retourne le troisième client. De tels prédicats numériques ne sont pas pris en charge. Seules les expressions de prédicat qui retournent un résultat booléen sont prises en charge.

Notes

Pour plus d'informations sur les limitations de cette implémentation XPath de XPath et les différences entre celle-ci et la norme W3C, consultez Introduction à l'utilisation des requêtes XPath (SQLXML 4.0).

Prédicat de sélection : exemple 1

L'expression XPath suivante (chemin d'accès d'emplacement) sélectionne à partir du nœud de contexte actuel tous les éléments enfants <Customer> dont l'attribut CustomerID a la valeur ALFKI :

/child::Customer[attribute::CustomerID="ALFKI"]

Dans cette requête XPath, child et attribute sont les noms d'axes. Customer est le test de nœud (TRUE si Customer est un <nœud d'élément>, car <element> est le type de nœud principal de l'axe child). attribute::CustomerID="ALFKI" est le prédicat. Dans le prédicat, attribute est l'axe et CustomerID est le test de nœud (TRUE si CustomerID est un attribut du nœud de contexte, car <attribute> est le type de nœud principal de l'axe attribute).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

/Customer[@CustomerID="ALFKI"]

Prédicat de sélection : exemple 2

L'expression XPath suivante (chemin d'accès d'emplacement) sélectionne à partir du nœud de contexte actuel tous les petits-enfants <Order> dont l'attribut SalesOrderID a la valeur 1 :

/child::Customer/child::Order[attribute::SalesOrderID="1"]

Dans cette expression XPath, child et attribute sont les noms des axes. Customer, Order et SalesOrderID sont les tests de nœud. attribute::OrderID="1" est le prédicat.

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

/Customer/Order[@SalesOrderID="1"]

Prédicat de sélection : exemple 3

L'expression XPath suivante (chemin d'accès d'emplacement) sélectionne à partir du nœud de contexte actuel tous les enfants <Customer> qui ont un ou plusieurs enfants <ContactName> :

child::Customer[child::ContactName]

Cet exemple suppose que l'élément <ContactName> est un élément enfant de l'élément <Customer> dans le document XML, connu sous le nom de mappage centré sur l'élément dans un schéma XSD annoté.

Dans cette expression XPath, child est le nom de l'axe. Customer est le test de nœud (TRUE si Customer est un nœud <element>, car <element> est le type de nœud principal de l'axe child). child::ContactName est le prédicat. Dans le prédicat, child est l'axe et ContactName est le test de nœud (TRUE si ContactName est un nœud <element>).

Cette expression retourne seulement les éléments enfants <Customer> du nœud de contexte qui ont des éléments enfants <ContactName>.

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[ContactName]

Prédicat de sélection : exemple 4

L'expression XPath suivante sélectionne les éléments enfants <Customer> du nœud de contexte qui n'ont pas d'élément enfant <ContactName> :

child::Customer[not(child::ContactName)]

Cet exemple suppose que <ContactName> est un élément enfant de l'élément <Customer> dans le document XML et que le champ ContactName n'est pas requis dans la base de données.

Dans cet exemple, child est l'axe. Customer est le test de nœud (TRUE si Customer est un nœud <element>). not(child::ContactName) est le prédicat. Dans le prédicat, child est l'axe et ContactName est le test de nœud (TRUE si ContactName est un nœud <element>).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[not(ContactName)]

Prédicat de sélection : exemple 5

L'expression XPath suivante sélectionne à partir du nœud de contexte actuel tous les enfants <Customer> qui ont l'attribut CustomerID :

child::Customer[attribute::CustomerID]

Dans cet exemple, child est l'axe et Customer est le test de nœud (TRUE si Customer est un nœud <element>). attribute::CustomerID est le prédicat. Dans le prédicat, attribute est l'axe et CustomerID est le prédicat (TRUE si CustomerID est un nœud <attribute>).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[@CustomerID]

Prédicat de sélection : exemple 6

Microsoft SQLXML 4.0 inclut la prise en charge des requêtes XPath qui contiennent un produit croisé dans le prédicat, comme l'illustre l'exemple suivant :

Customer[Order/@OrderDate=Order/@ShipDate]

Cette requête sélectionne tous les clients avec un Order quelconque pour lequel OrderDate est égal au ShipDate de tout Order.