Partager via


Spécification d'opérateurs de relation dans les requêtes XPath (SQLXML 4.0)

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

A. Spécifier un opérateur relationnel

Cette requête XPath retourne les éléments enfants de l'élément <Customer> pour lesquels la valeur d'attribut CustomerID est « 1 » et pour lesquels des éléments enfants <Order> contiennent un enfant <OrderDetail> avec un attribut OrderQty ayant 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> ayant au moins un petit-enfant <OrderDetail> avec une valeur d'attribut OrderQty supérieure à 3 sont retournés.

L'axe child est l'axe 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

  1. Copiez l'exemple de code de schéma ms172719(v=sql.100).md et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema1.xml.

  2. 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 &gt; 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.

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 éléments enfants <Order> du nœud de contexte qui ont une valeur d'attribut SalesPersonID inférieure à 270 :

/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]

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/Order[(@SalesPersonID < 270)=true()]

[!REMARQUE]

Lorsque cette requête est spécifiée dans un modèle, le caractère < doit être codé sous forme d'entité < car il a une signification spéciale dans un document XML. Dans un modèle, utilisez &lt; pour spécifier le caractère <.

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

  1. Copiez l'exemple de code de schéma ms172719(v=sql.100).md et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema1.xml.

  2. 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&lt;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"
    
  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 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>