Spécification d'opérateurs de relation dans les requêtes XPath (SQLXML 4.0)
S’applique à : SQL ServerAzure SQL Database
Les exemples suivants montrent comment les opérateurs de relation sont spécifiés dans les requêtes XPath. Les requêtes XPath de ces exemples sont spécifiées par rapport au schéma de mappage contenu dans SampleSchema1.xml. Pour plus d’informations sur cet exemple de schéma, consultez Exemple de schéma XSD annoté pour les exemples XPath (SQLXML 4.0).
Exemples
R. Spécifier un opérateur relationnel
Cette requête XPath retourne les éléments enfants de l’élément <Customer> où la valeur d’attribut CustomerID est « 1 » et où tous les éléments Order> enfants< contiennent un< enfant OrderDetail> avec un attribut OrderQty avec une valeur supérieure à 3 :
/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
Le prédicat spécifié entre crochets filtre les éléments Customer>.< Seuls les <éléments Customer> qui ont au moins un <petit-enfant OrderDetail> avec une valeur d’attribut OrderQty supérieure à 3 sont retournés.
L’axe enfant est la valeur par défaut. Par conséquent, la requête peut être spécifiée sous la forme :
/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (SpecifyRelationalA.xml) et enregistrez-le dans le même répertoire que SampleSchema1.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3] </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<OrderDetail ProductID="Prod-760" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-766" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="4" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-757" UnitPrice="1049.7528" OrderQty="4" UnitPriceDiscount="0" />
</ROOT>
B. Spécifier l'opérateur relationnel dans la requête XPath et utiliser une fonction booléenne pour comparer le résultat
Cette requête retourne tous les enfants de l’élément <Order> du nœud de contexte qui ont une valeur d’attribut SalesPersonID inférieure à 270 :
/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]
Un raccourci vers l’axe d’attribut (@) peut être spécifié et, étant donné que l’axe enfant est la valeur par défaut, il peut être omis à partir de la requête :
/Customer/Order[(@SalesPersonID < 270)=true()]
Remarque
Lorsque cette requête est spécifiée dans un modèle, le < caractère doit être encodé en entité, car le < caractère a une signification particulière dans un document XML. Dans un modèle, utilisez cette option <
pour spécifier le < caractère.
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (SpecifyRelationalB.xml) et enregistrez-le dans le même répertoire que SampleSchema1.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[(@SalesPersonID<270)=true()] </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats partiel de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-46613" SalesPersonID="268"
OrderDate="2002-07-01T00:00:00"
DueDate="2002-07-13T00:00:00"
ShipDate="2002-07-08T00:00:00">
<OrderDetail ProductID="Prod-739" UnitPrice="917.9363"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-779" UnitPrice="1491.4221"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-825" UnitPrice="242.1391"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
<Order SalesOrderID="Ord-71919" SalesPersonID="268"
OrderDate="2004-06-01T00:00:00"
DueDate="2004-06-13T00:00:00"
ShipDate="2004-06-08T00:00:00">
<OrderDetail ProductID="Prod-961" UnitPrice="534.492"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-965" UnitPrice="534.492"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-966" UnitPrice="1716.5304"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</ROOT>