Spécification d'axes dans les requêtes XPath (SQLXML 4.0)
Les exemples suivants montrent comment spécifier des axes 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
A. Récupérer les éléments enfants du nœud de contexte
La requête XPath suivante sélectionne tous les éléments enfants <Contact> du nœud de contexte :
/child::Contact
Dans la requête, child est l'axe et Contact est le test de nœud (TRUE si Contact est un nœud <element>, car <element> est le type de nœud principal associé à l'axe child).
L'axe child est la valeur par défaut. Par conséquent, la requête peut être écrite sous la forme :
/Contact
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 le fichier sous le nom SampleSchema1.xml.
Créez le modèle ci-dessous (XPathAxesSampleA.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"> /Contact </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, consultez 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">
<Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />
<Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />
<Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />
<Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />
...
</ROOT>
B. Récupérer les petits-enfants du nœud de contexte
La requête XPath suivante sélectionne tous les éléments enfants <Order> des éléments enfants <Customer> du nœud de contexte.
/child::Customer/child::Order
Dans la requête, child est l'axe et Customer et Order sont les tests de nœud (ces tests de nœud ont la valeur TRUE si Customer et Order sont des nœuds <element>, parce que le nœud <element> est le nœud principal pour l'axe child). Pour chaque nœud correspondant à <Customer>, les nœuds correspondant à <Orders> sont ajoutés au résultat. Seul <Order> est retourné dans le jeu de résultats.
L'axe child est la valeur par défaut. Par conséquent, la requête peut être spécifiée sous la forme :
/Customer/Order
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 le fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (XPathAxesSampleB.xml) et enregistrez-le dans le répertoire où :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order </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, consultez 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-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</ROOT>
Si la requête XPath est spécifiée sous la forme Customer/Order/OrderDetail, de chaque nœud correspondant à <Customer> la requête navigue jusqu'à ses éléments <Order>. De plus, pour chaque nœud correspondant à <Order>, la requête ajoute les nœuds <OrderDetail> au résultat. Seul <OrderDetail> est retourné dans le jeu de résultats.
C. Utiliser .. pour spécifier l'axe parent
La requête suivante récupère tous les éléments <Order> avec un élément <Customer> parent dont l'attribut CustomerID a la valeur 1. La requête utilise l'axe child dans le prédicat pour rechercher le parent de l'élément <Order>.
/child::Customer/child::Order[../@CustomerID="1"]
L'axe child est l'axe par défaut. Par conséquent, la requête peut être spécifiée sous la forme :
/Customer/Order[../@CustomerID="1"]
La requête XPath est équivalente à :
/Customer[@CustomerID="1"]/Order.
[!REMARQUE]
La requête XPath /Order[../@CustomerID="1"] retournera une erreur parce qu'<Order> n'a aucun parent. Bien qu'il puisse exister des éléments dans le schéma de mappage qui contiennent <Order>, le XPath n'a pas commencé sur l'un d'eux ; par conséquent, <Order> est considéré comme le type d'élément de premier niveau dans le document.
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 le fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (XPathAxesSampleC.xml) et enregistrez-le dans le répertoire où :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[../@CustomerID="1"] </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, consultez 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-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</Order>
</ROOT>
D. Spécifier l'axe attribute
La requête XPath ci-dessous sélectionne tous les éléments enfants <Customer> du nœud de contexte dont l'attribut CustomerID a la valeur 1 :
/child::Customer[attribute::CustomerID="1"]
Dans le prédicat attribute::CustomerID, attribute est l'axe et CustomerID est le test de nœud (si CustomerID est un attribut, le test de nœud a la valeur TRUE, car le nœud <attribute> est le nœud principal de l'axe attribute).
Il est possible de spécifier un raccourci vers l'axe attribute (@), et l'axe child étant l'axe par défaut, il peut être omis dans la requête :
/Customer[@CustomerID="1"]
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 le fichier sous le nom SampleSchema1.xml.
Créez le modèle ci-dessous (XPathAxesSampleD.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"> child::Customer[attribute::CustomerID="1"] </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, consultez 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">
<Customer CustomerID="1" SalesPersonID="280"
TerritoryID="1" AccountNumber="1"
CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
...
</Order>
...
</Customer>
</ROOT>