Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:mlbda:tmes:xqueryfaq

XQuery: Foire aux Questions

Syntaxe

  • Les mots clés doivent être en lettres minuscules (ex. for, in, let, where, return, and, or, … )
  • La clause return s'écrit sans parenthèses, par exemple :
    return expression
    return <nom_element> {expression} </nom_element>
  • la fonction doc(“fichier.xml”) permet de lire un fichier du répertoire conrant
  • Une expression XPath peut contenir un prédicat entre crochets.
     doc("bib.xml")//book[publisher=$p] 

Commentaires

  • accolade avec 2 tirets:
     {-- un commentaire --}
  • Dans l'outil BaseX le raccourci Ctrl-k commente/décommente une ligne

Distinct

  • La fonction distinct-values(…) produit un ensemble de chaînes de caractères sans doubles.

Dans l'exemple suivant, $x est une chaine de caractères (concaténation du nom et du prénom d'un auteur), ce n'est pas un élément author.

for $x in distinct-values( document("bib.xml")//author ) 

Position

La fonction xpath position() donne le rang d'un élément (i.e., le n-ième fils).

Requêtes imbriquées

Il est possible d'imbriquer des expressions FLWOR dans la clause return d'une requête ou dans une clause let.

Tri

  • ajouter une clause order by nom_element, … avant la clause return.

A ne pas confondre avec l'opérateur sort by (nom_element) servant à trier une collection. L'opérateur sort by est ajouté dans les clauses for ou let.

Comparaison de valeurs avec l'opérateur d'égalité: ''a eq b''

  1. si le type de a et b est simple (simpleType), alors a eq b est vrai ssi leur valeurs sont égales.
  2. si le type de a et b est complexe (complexType), alors a eq b est vrai ssi xs:string(a) eq xs:string(b)

Comparaison générale de deux ensembles : ''A = B''

Lorsque les opérandes A et B sont des ensembles. A = B est vrai ssi il existe au moins un elt a dans A et un elt b dans B tels que a eq b

Comparaison "en profondeur" de deux éléments:

utiliser la fonction deep-equal(a, b) au lieu de l'opérateur d'égalité =

Comparaison des identifiants de 2 éléments

a is b est vrai ssi a représente le même élément que b

Est-ce que Xquery a un prédicat exists comme en SQL?

Oui, la fonction s'écrit exists( expression )

Comment visualiser les données dans BaseX ?

Menu Visualization, cocher Folder. Possibilité de naviguer en zoomant. Cliquer sur le bouton “Home”(logo représentant une maison) pour revenir à la racine du document.

Message d'erreur rencontré: context item not defined

  • erreur dans le noeud contextuel d'une expression xpath. Le premier terme d'une expression xpath est erroné.
  • Vérifier la présence des guillemets dans les expressions xpath commençant par document( fichier )
  • Vérifier la présence du $ au début des expressions xpath commençant par un nom de variable.

Retour vers TME XQuery : séance 1 (ancienne page) ou TME XQuery : Séance 2 (ancienne page)

site/enseignement/master/mlbda/tmes/xqueryfaq.txt · Dernière modification: 14/12/2017 11:16 par hubert