Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une requête XPath (XML Path Language) peut être spécifiée dans le cadre d’une URL ou dans un modèle. Le schéma de mappage détermine la structure de ce fragment résultant et les valeurs sont récupérées à partir de la base de données. Ce processus est conceptuellement similaire à la création de vues à l’aide de l’instruction CREATE VIEW et à l’écriture de requêtes SQL sur celles-ci.
Remarque
Pour comprendre les requêtes XPath dans SQLXML 4.0, vous devez être familiarisé avec les vues XML et les concepts connexes tels que les modèles et le schéma de mappage. Pour plus d’informations, consultez Présentation des schémas XSD annotés (SQLXML 4.0) et la norme XPath définie par le World Wide Web Consortium (W3C).
Un document XML se compose de nœuds tels qu’un nœud d’élément, un nœud d’attribut, un nœud de texte, etc. Par exemple, considérez ce document XML :
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
Dans ce document, <Customer> est un nœud d’élément, cid est un nœud d’attribut et « Important » est un nœud de texte.
XPath est un langage de navigation de graphe utilisé pour sélectionner un ensemble de nœuds à partir d’un document XML. Chaque opérateur XPath sélectionne un jeu de nœuds basé sur un jeu de nœuds sélectionné par un opérateur XPath précédent. Par exemple, étant donné un ensemble de <nœuds Customer>, XPath peut sélectionner tous les <nœuds Order> avec la valeur d’attribut de date« 7/14/1999 ». Le jeu de nœuds résultant contient toutes les commandes avec la date de commande 14/14/1999.
Le langage XPath est défini par le World Wide Web Consortium (W3C) comme langage de navigation standard. SQLXML 4.0 implémente un sous-ensemble de la spécification XPath W3C, qui se trouve à http://www.w3.org/TR/1999/PR-xpath-19991008.html.
Voici les principales différences entre l’implémentation XPath W3C et l’implémentation SQLXML 4.0.
Requêtes racines
SQLXML 4.0 ne prend pas en charge la requête racine (/). Chaque requête XPath doit commencer à un ElementType> de niveau< supérieur dans le schéma.
Signaler des erreurs
La spécification XPath W3C ne définit aucune condition d’erreur. Les requêtes XPath qui ne parviennent pas à sélectionner les nœuds retournent un jeu de nœuds vide. Dans SQLXML 4.0, une requête peut retourner de nombreux types de messages d’erreur.
Ordre des documents
Dans SQLXML 4.0, l’ordre des documents n’est pas toujours déterminé. Par conséquent, les prédicats numériques et les axes qui utilisent l’ordre de document (par exemple
following) ne sont pas implémentés.L’absence d’ordre de document signifie également que la valeur de chaîne d’un nœud peut être évaluée uniquement lorsque ce nœud est mappé à une seule colonne dans une seule ligne. Un élément avec des éléments enfants ou un nœud IDREFS ou NMTOKENS ne peut pas être converti en chaîne.
Remarque
Dans certains cas, l’annotation ou les
key-fieldsclés de l’annotationrelationshippeuvent entraîner un ordre de document déterministe. Toutefois, il ne s’agit pas de l’utilisation principale de ces annotations Pour plus d’informations, consultez Identifier les colonnes clés à l’aide de sql :key-fields (SQLXML 4.0) et spécifier des relations à l’aide de sql :relationship (SQLXML 4.0).Types de données
SQLXML 4.0 présente des limitations dans l’implémentation des types de données et
booleannumberXPathstring. Pour plus d’informations, consultez Les types de données XPath (SQLXML 4.0).Requêtes inter-produits
SQLXML 4.0 ne prend pas en charge les requêtes XPath inter-produits, telles que
Customers[Order/@OrderDate=Order/@ShipDate]. Cette requête sélectionne tous les clients avec n’importe quelle commande pour laquelle OrderDate est égal à ShipDate de n’importe quelle commande.Toutefois, SQLXML 4.0 prend en charge les requêtes telles que
Customer[Order[@OrderDate=@ShippedDate]], qui sélectionne les clients avec n’importe quelle commande pour laquelle OrderDate est égal à son ShipDate.Gestion des erreurs et sécurité
Selon le schéma et l’expression de requête XPath utilisés, Transact-SQL erreurs peuvent être exposées aux utilisateurs dans certaines conditions.
Les tableaux des sections suivantes fournissent des détails sur la façon dont l’implémentation des requêtes XPath dans SQLXML 4.0 diffère de la spécification W3C dans ces domaines.
Fonctionnalités prises en charge
Le tableau suivant présente les fonctionnalités du langage XPath implémentées dans SQLXML 4.0.
Fonctionnalité non prise en charge
Le tableau suivant présente les fonctionnalités du langage XPath qui ne sont pas implémentées dans SQLXML 4.0.
| Caractéristique | Élément |
|---|---|
| Axes |
ancestor, ancestor-or-self, , descendant-or-self (//)descendant, following, following-sibling, namespace, preceding,preceding-sibling |
| Prédicats numériques | |
| Opérateurs arithmétiques | Mod |
| Fonctions de nœud |
ancestor, ancestor-or-self, , descendant-or-self (//)descendant, following, following-sibling, namespace, preceding,preceding-sibling |
| Fonctions de chaîne |
string(), , concat(), contains()starts-with(), , substring-after()normalize()substring()string-length()substring-before()translate() |
| Fonctions booléennes | lang() |
| Fonctions Numeric |
sum(), , floor()ceiling(), ,round() |
| Opérateur Union | | |
Lorsque vous spécifiez des requêtes XPath dans un modèle, notez le comportement suivant :
- XPath peut contenir des caractères tels que < ou & qui ont des significations spéciales dans XML (et le modèle est un document XML). Vous devez échapper à ces caractères à l’aide de l’encodage XML ou spécifier le XPath dans l’URL.