XQuery et bases de données XML

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Manuel de l'utilisateur et référence > XQuery >

XQuery et bases de données XML

Un document XQuery peut être utilisé pour requêter une base de données XML (BD XML). Actuellement, cette fonction XQuery est uniquement prise en charge pour les bases de données IBM DB2. Le mécanisme de requête d'une BD XML avec XQuery implique essentiellement : (i) indiquer au moteur XQuery qu'un XML doit être requis dans une BD, contrairement à un XML dans un document XML ; et (ii) accéder aux données XML dans la BD.

 

Les étapes de mise en place de ce mécanisme sont les suivants et sont décrits en détail ci-dessous :

 

1.Configurer le document XQuery pour requêter la BD XML en insérant le mot-clé XQUERY au début du document.
2.En ce qui concerne le document XQuery actif, activer la prise en charge de BD (par le biais de la fenêtre Info) et se connecter à la BD (avec le dialogue Connexion rapide).
3.Dans le document XQuery, insérer les extensions XQuery spécifiques à la BD afin de pouvoir accéder aux données de BD et de les rendre disponibles pour les opérations XQuery.
4.Exécuter le document XQuery dans XMLSpy.

 

Configurer le document XQuery pour requêter la BD XML

Afin de configurer le document XQuery pour requêter une BD XML, ouvrir le document XQuery (ou créer un nouveau document XQuery) et saisir le mot-clé XQUERY (quelle que soit la casse) au début du document (avant le prologue) ; voir exemples ci-dessous.

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

Si le document utilise l'expression optionnelle xquery version, le mot-clé XQUERY est toujours requis :

 

XQUERY xquery version "1.0"; (: Retrieve details of all customers :)

declare default element namespace "http://http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

Note :Les moteurs XQuery intégrés de XMLSpy lisent le mot-clé XQUERY d'une manière qui indique qu'une BD XML doit être accédée. En conséquence, toute tentative d'exécuter un document XQuery contenant le mot-clé XQUERY sur un document XML autre qu'un document contenu dans une BD XML, entraînera une erreur.

 

Activer la prise en charge de XQuery et se connecter à la BD

La prise en charge de la BD d'un document XQuery est activée en cochant la case Activer la prise en charge de base de données dans la fenêtre Info (capture d'écran ci-dessous). Veuillez noter que la prise en charge BD doit être activée pour chaque document XQuery séparément et qu'à chaque fois qu'un document XQuery est ouvert pour la première fois.

XQEnableDBSupport

Lorsque vous activez la prise en charge BD dans la fenêtre Info, un dialogue Connexion rapide s'affiche qui vous permet de vous connecter à une base de données. Actuellement, seules les bases de données IBM DB2 sont prises en charge. La connexion à une BD est décrite dans la section Se connecter à une base de données. Si des connexions à des sources de données existent déjà, elles seront recensées dans la liste de choix Sources de données de la fenêtre Info (capture d'écran ci-dessous), et une de ces sources de données peut être sélectionnée en tant que la source de données pour le document XQuery actif. Dans la fenêtre Info, vous pouvez aussi sélectionner l'objet racine parmi les objets disponibles dans la liste de choix Objet Racine.

XQDataSourceComboBox

Le dialogue Connexion rapide (qui vous permet de vous connecter à une BD) peut être accédé à tout moment en cliquant sur l'icône XQicQuickConnect dans la fenêtre Info.

Note :Lorsque vous fermez un document XQuery, la connexion à la BD est fermée également. Si, ultérieurement, vous rouvrez le document XQuery, vous devrez également vous reconnecter à la BD.

 

Extensions de langage XQuery spécifiques à IBM DB2

Deux fonctions IBM spécifiques à DB2 peuvent être utilisées dans les documents XQuery pour extraire des données depuis une base de données IBM DB2 :

 

db2-fn:xmlcolumn extrait une colonne XML complète sans chercher ou filtrer la colonne.
db2-fn:sqlquery extrait des valeurs basées sur une déclaration SQL SELECT

 

Les données XML extraites à l'aide de ces fonctions peuvent ensuite être manipulées à l'aide de structures XQuery standard. Voir exemples ci-dessous.

 

db2-fn:xmlcolumn: L'argument de la fonction est un littéral de chaîne sensible à la casse qui identifie une colonne XML dans une table. L'argument littéral de chaîne doit être un nom de colonne qualifié de type XML. La fonction retourne toutes les données XML dans la colonne en tant que séquence, sans y appliquer une condition de recherche. Dans l'exemple suivant, toutes les données de la colonne INFO (XML) de la table CUSTOMER sont retournées dans un élément <newdocelement> de niveau supérieur :

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </newdocelement>

 

Les données extraites peuvent être requises avec des structures XQuery. Dans l'exemple ci-dessous, les données XML extraites depuis la colonne (XML) INFO de la table CUSTOMER est filtrée à l'aide d'une structure XQuery de manière à ce que seuls les profils des clients situés à Toronto sont extraits.

 

XQUERY (: Retrieve details of Toronto customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo[addr/city='Toronto']</newdocelement>

 

Note :dans l'exemple ci-dessus, l'élément de document des fichiers XML dans chaque cellule est customerinfo et le nœud de racine de la séquence XML retournée par db2-fn:xmlcolumn est considérée être un nœud abstrait placé au-dessus des nœuds customerinfo.

 

db2-fn:sqlquery:la fonction prend une déclaration SQL Select en tant que son argument et retourne une séquence de valeurs XML. La séquence extraite est ensuite requêtée avec des structures XQuery. Dans l'exemple suivant, la colonne INFO est filtrée pour des enregistrements dans la table CUSTOMER comportant un champ CID contenant une valeur située entre 1000 et 1004. Veuillez noter qu'alors que SQL n'est pas sensible à la casse, XQuery l'est.

 

XQUERY (: Retrieve details of customers by Cid:)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

 

<persons>

   {db2-fn:sqlquery("SELECT info FROM customer WHERE CID>1000 AND CID<1004")/

   <person>

      <id>{data(@Cid)}</id>

      <name>{data(name)}</name>

   </person>}

</persons>

 

Le document XQuery ci-dessus retourne la sortie suivante :

 

<persons xmlns="http://www.altova.com/xquery/databases/db2">

   <person>

 <id>1001</id>

 <name>Kathy Smith</name>

   </person>

   <person>

 <id>1002</id>

 <name>Jim Jones</name>

   </person>

   <person>

 <id>1003</id>

 <name>Robert Shoemaker</name>

   </person>

</persons>

 

Veuillez noter les points suivants :

 

La déclaration d'espace de noms de l'élément par défaut dans le prologue s'applique pour tout le document XQuery et est utilisé pour parcourir le document XML et pour la construction de nouveaux éléments. Cela signifie que le sélecteur XQuery name est élargi à <default-element-namespace>:name, et que les éléments construits, comme persons, se trouvent dans l'espace de noms élément par défaut.
La déclaration SQL Select n'est pas sensible à la casse.
La clause WHERE de la déclaration Select devrait référencer un autre item de base de données et non un nœud dans le fichier XML en cours d'accession.
La barre oblique "/" située après la fonction db2-fn:sqlquery représente le premier item de la séquence retournée et cet item est le nœud contextuel pour une navigation ultérieure.

 

Exécuter le document XQuery

Afin d'exécuter le document XQuery, sélectionner la commande Exécution XQuery (menu XSL/XQuery). En alternative, appuyer sur Alt+F10 ou cliquer sur l'icône d'exécution XQuery ic_xquery_transform. Le résultat de l'exécution est affiché dans un nouveau document.

 


© 2018 Altova GmbH