Spécification de prédicats booléens dans les requêtes XPath (SQLXML 4.0)

Les exemples suivants montrent comment les prédicats booléens 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

A. Spécifier plusieurs prédicats

La requête XPath suivante utilise plusieurs prédicats pour rechercher les informations de commande d'un ID de commande et d'un ID de client donnés :

/child::Customer[attribute::CustomerID="1"]/child::Order[attribute::OrderID="Ord-43860"]

Il est possible de spécifier un raccourci vers l'axe attribute (@), et comme l'axe child est la valeur par défaut, il peut être absent de la requête :

/Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]

Pour tester la requête XPath par rapport au schéma de mappage

  1. Copiez l'exemple de code de schéma et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema1.xml.

  2. Créez le modèle suivant (BooleanValuedPredicatesA.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[@SalesOrderID="Ord-43860"]
      </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"
    
  3. 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 résultat :

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<Order SalesOrderID="Ord-43860" SalesPersonID="280" OrderDate="2005-08-01T00:00:00" DueDate="2005-08-13T00:00:00" ShipDate="2005-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>

B. Spécifier les prédicats consécutifs et imbriqués

La requête suivante affiche l'utilisation de prédicats consécutifs. La requête retourne tous les éléments enfants <Customer> du nœud de contexte qui ont un attribut SalesPersonID avec la valeur 277 et un attribut TerritoryID avec la valeur 3 :

/child::Customer[attribute::SalesPersonID="277"][attribute::TerritoryID="3"]

La requête retourne les éléments <Customer> qui satisfont les conditions spécifiées dans les prédicats.

Il est possible de spécifier un raccourci vers l'axe attribute (@), et comme l'axe child est la valeur par défaut, il peut être absent de la requête :

/Customer[@SalesPersonID="277"][@TerritoryID="3"]

La requête XPath suivante illustre l'utilisation de prédicats imbriqués. La requête retourne tous les éléments enfants <Customer> du nœud de contexte qui incluent les éléments enfants <Order> avec au moins un élément <Order> ayant une valeur d'attribut SalesPersonID égale à 2.

/Customer[Order[@SalesPersonID=2]]

Pour tester la requête XPath par rapport au schéma de mappage

  1. Copiez l'exemple de code de schéma et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema1.xml.

  2. Créez le modèle suivant (nestedSuccessive.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[@SalesPersonID="277"][@TerritoryID="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"
    
  3. 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.

Les éléments suivants sont un résultat partiel :

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<Customer CustomerID="22" SalesPersonID="277" TerritoryID="3"

AccountNumber="22" CustomerType="S"

Orders="Ord-43874 Ord-44519 Ord-46989 Ord-48013 Ord-49130 Ord-50274 Ord-51807 Ord-57113 Ord-63162 Ord-69495">

<Order SalesOrderID="Ord-43874" SalesPersonID="277"

OrderDate="2005-08-01T00:00:00"

DueDate="2005-08-13T00:00:00"

ShipDate="2005-08-08T00:00:00">

<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"

OrderQty="1" UnitPriceDiscount="0" />

</Order>

...

</Customer>

<Customer CustomerID="39" SalesPersonID="277" TerritoryID="3"

AccountNumber="39" CustomerType="S"

Orders="Ord-47428 Ord-48367 Ord-49529 Ord-50742 Ord-53591 Ord-59051 Ord-65301 Ord-71912"> <Order SalesOrderID="Ord-47428" SalesPersonID="277"

OrderDate="2006-09-01T00:00:00"

DueDate="2006-09-13T00:00:00"

ShipDate="2006-09-08T00:00:00">

<OrderDetail ProductID="Prod-759" UnitPrice="563.7528" OrderQty="2" UnitPriceDiscount="0" />

<OrderDetail ProductID="Prod-769" UnitPrice="563.7528" OrderQty="1" UnitPriceDiscount="0" />

...

</Order>

...

</Customer>

...

</ROOT>

C. Spécifier un prédicat de niveau supérieur

La requête suivante retourne les nœuds des éléments enfants <Customer> du nœud de contexte qui ont des enfants d'un élément <Order>. La requête teste le chemin d'accès de l'emplacement comme prédicat de niveau supérieur :

/child::Customer[child::Order]

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

  1. Copiez l'exemple de code de schéma et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema1.xml.

  2. Créez le modèle suivant (TopLevelPredicate.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]
      </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"
    
  3. 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 résultat partiel :

<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="2005-08-01T00:00:00" DueDate="2005-08-13T00:00:00" ShipDate="2005-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>

<Order SalesOrderID="Ord-44501" SalesPersonID="280" OrderDate="2005-11-01T00:00:00" DueDate="2005-11-13T00:00:00" ShipDate="2005-11-08T00:00:00">

<OrderDetail ProductID="Prod-725" UnitPrice="226.8571" OrderQty="3" UnitPriceDiscount="0" />

<OrderDetail ProductID="Prod-726" UnitPrice="226.8571" OrderQty="2" UnitPriceDiscount="0" />

...

</Order> ...

</Customer>

...

</ROOT>