Ceci est une ancienne révision du document !


Introduction à XML/XQuery

Les supports de cours se trouvent dans la partie Enseignement/Intranet après connexion avec vos identifiants de l’UTV.

Pour cette partie pratique le document exemple du livre “XQuery pour interroger des données XML” sera utilisé : queryas.xml

Regarder ce document, et décrire sa structure générale sous la forme d’un arbre. Cela facilitera ensuite l’interrogation

Pour cette première approche de XQuery, nous allons utiliser l’interprète zorba (http://www.zorba.io/). Pour pouvoir l’utiliser il faut :

  1. ouvrir un terminal, créer un répertoire de travail et se placer dedans. Par exemple, le répertoire XML à la racine de votre compte (mkdir XML puis cd XML).
  2. télécharger le document exemple queryas.xml dans le répertoire précédent.
  3. lancer un éditeur de texte (par exemple gedit) pour écrire les requêtes en les enregistrant dans des fichiers textes en précisant l’extension habituelle .xq.
  4. A partir du terminal lancer l’exécution de la requête (ici dans le fichier q1.xquery)
  zorba -i -f -q q1.xq

L’option -f indique que le texte source de la requête est enregistré dans le fichier dont le nom local q1.xq est le paramètre de l’option -q. L’option -i indique que le résultat doit être indenté.

Les expressions XQuery les plus simples des valeurs littérales :

  • Des chaînes de caractères : “Secteur de St-Véran”
  • Des nombres : 2005 3.14 1.602e-19 1.602E-19
  • Des booléens : true() et false()

Il est aussi possible d’évaluer des expressions arithmétiques avec les opérateurs classique (à part le / pour la division qui est remplacé par div).

<Note>Ecrivez quelques requêtes simples utilisant des littéraux et des expressions arithmétiques</Note>

XQuery ne manipule que des séquences (une liste ordonnée) d’items (des littéraux ou des noeuds XML). L’évaluation d’une requête retourne une séquence. Il est possible de créer des séquences avec les opérateurs () et ,.

Quelques exemples : () (1,2,“a”,<a><b/></a>)

Il est possible définir des variables pour l’évaluation d’une requête.

let $x := 3, $y := 2
return $x + $y

Il est existe une bibliothèque de fonctions http://www.w3.org/TR/xpath-functions/

Pour le moment citons fn:doc() qui retourne le nœud racine d’un document par exemple fn:doc(“queyras.xml”).

Interrogation d'un arbre XML

Nous allons voir maintenant la forme la plus simple de l’interrogation d’un arbre XML : Un pas dans un arbre à la forme suivante :

 axe::test-de-nœud prédicat1 ... prédicatn

A partir d’une séquence de nœuds (par exemple après l’appel de fn:doc) une nouvelle séquence est produite : pour chaque nœud de la séquence d’origine, on suit l’axe (cf détail ci dessous) et on en garde que les nœuds pour lesquels le test (cf. ci dessous) et les prédicats sont successivement vrais.

Si aucun axe n’est précisé c’est l’axe child qui est utilisé.

Attention, comme le document XML utilise un espace de nom. Il faut le déclarer en ajoutant avant chaque requête : declare default element namespace “http://mes-guides-randos”;

Quelques exemples :

  • fn:doc(“queyras.xml”)/descendant::secteur
  • fn:doc(“queyras.xml”)/descendant::itinéraire
  • fn:doc(“queyras.xml”)/descendant::itinéraire/nom/text()
  • fn:doc(“queyras.xml”)/child::guide/child::secteur/child::nom
  • fn:doc(“queyras.xml”)/guide/secteur/nom

<Note>Tester les exemples précédents. Trouver (i) tous les paragraphes et (ii) toutes les altitudes. </Note>

Les axes

– l’axe self qui contient le nœud contexte ;
– l’axe child qui contient les enfants du nœud contexte ;
– l’axe descendant qui contient les descendants du nœud contexte, c.-à-d. les enfants

du nœud contexte et leurs descendants ;

– l’axe descendant-or-self qui contient le nœud contexte et ses descendants ;
– l’axe parent qui contient le parent du nœud contexte ;
– l’axe ancestor qui contient les ancêtres du nœud contexte ;
– l’axe ancestor-or-self qui contient le nœud contexte et ses ancêtres ;
– l’axe preceding-sibling qui contient les frères et sœurs du nœud contexte qui apparaissent avant le nœud contexte dans l’ordre du document mais qui est vide si le nœud

contexte est un nœud attribut ;

– l’axe following-sibling qui contient les frères et sœurs du nœud contexte qui apparaissent après le nœud contexte dans l’ordre du document mais qui est vide si le nœud

contexte est un nœud attribut ;

– l’axe preceding qui contient les descendants de la racine de l’arbre auquel appartient

le nœud contexte qui apparaissent avant le nœud contexte dans l’ordre du document, excepté les ancêtres du nœud contexte ;

– l’axe following qui contient les descendants de la racine de l’arbre auquel appartient

le nœud contexte qui apparaissent après le nœud contexte dans l’ordre du document, excepté les descendants du nœud contexte ;

– l’axe attribute qui contient les nœuds attribut dont le parent est le nœud contexte.

Il y a trois types d’opérateurs de comparaisons – les opérateurs de comparaison de valeurs qui sont les opérateurs classiques qui comparent des valeurs atomiques de façon stricte (eq, ne, lt, le, gt et ge) ; – les opérateurs de comparaison générale qui comparent des valeurs de façon plus flexible, par exemple, deux séquences seront considérées comme égales si l’une contient un item égal à un item contenu dans l’autre ; (=, !=, <, …) – les opérateurs de comparaison de nœuds qui comparent des nœuds par rapport à leur identité où à leur rang dans l’ordre du document ( is même noeud, « avant et » après).