Module BDWEB Maîtrise d informatique Cours 9 - Xquery Anne Doucet anne.doucet@lip6.fr 1
Langages de requêtes XML Concepts des langages de requêtes XML motivations caractéristiques Navigation dans les documents Expression de chemins XPath Langages de requêtes pour XML XQuery Exemples de requêtes 2
Interrogation de documents XML extraire rapidement un sous-ensemble de données transformer des données en documents XML intégrer des données provenant de sources hétérogènes retrouver des documents (full text) générer des nouveaux documents, dériver de nouvelles présentations à partir d un document indexer des documents effectuer des recherches par contexte requêtes sur documents structurés (données imbriquées, etc.) Bases de données et Recherche d Information 3
Fonctionnalités BD Tout ce qu offre SQL déclaratif indépendant du système support de quantificateurs existentiels et universels support d aggrégats recherche d un élément dans un document combiner des informations provenant de plusieurs documents doit pouvoir être optimisé support de types simples et complexes (SQL3)... 4
Fonctionnalités RI support d opérations sur la structure des documents transformation et création de structures XML recherche d informations dans le document recherche efficace de texte dans de grandes collections de documents 5
Syntaxe XML Une seule racine, imbrication correcte : structure de graphe Structure exacte des données pas toujours connue, ou pouvant varier selon les données Il est plus facile d utiliser une forme navigationnelle d interrogation, basée sur des expressions de chemin. Langage de requêtes = SQL + RI + Navigation (SQL généralisé à XML) 6
Caractéristiques du langage de requêtes (1) Caractéristiques essentielles : une formulation de la requête en trois parties : pattern + filtre + constructeur possibilité d imbriquer des requêtes, de les grouper, d indexer, de faire du tri (permet de restructurer un document) disposer d un opérateur de jointure, permettant de combiner des données provenant de diverses portions de documents interroger sans connaître nécessairement la structure du document (accès à des données imbriquées de façon arbitraire) 7
Caractéristiques du langage de requêtes (2) Fonctionnalités utiles : possibilité de définir une alternative en cas de données manquantes pouvoir vérifier l absence d une information pouvoir faire appel à des fonctions externes (agrégats, comparaison de chaînes de caractères, etc.) Utilisation d opérateurs de navigation (simplifie la manipulation des données par référence) 8
DTD Exemple www.bn.com/bib.xml <!ELEMENT bib (book*)> <!ELEMENT book (title, (author+ editor+), publisher, price)> <!ATTLIST book year CDATA #REQUIRED> <!ELEMENT author (last, first)> <!ELEMENT editor (last, first, affiliation )> <!ELEMENT title (#PCDATA )> <!ELEMENT last (#PCDATA )> <!ELEMENT first (#PCDATA )> <!ELEMENT affiliation (#PCDATA )> <!ELEMENT publisher (#PCDATA )> <!ELEMENT price (#PCDATA )> 9
10 requêtes essentielles (1) Sélection et extraction : tous les titres des ouvrages publiés par Eyrolles depuis 2000 Flattening : l arbre XML de la base est «mis à plat» (ex: aplatir la structure imbriquée book (title, author) en faisant apparaître un n-uplet (title, author) par auteur de livre) Préserver la structure : afficher la base dans sa version originale (regrouper les livres par titre) Changer la structure par imbrication de requête : lister la base par auteur changer la structure par opérateur de regroupement : classement des livres par auteur 10
10 requêtes essentielles (2) Combiner plusieurs sources de données : joindre la base des livres et celle des prix pour avoir les livres et leurs prix. Indexer les éléments de la structure : lister les livres par leur titre et les deux premiers auteurs (et un élément et al s il y a plus que deux auteurs) Trier les résultats : titre des livres par ordre alphabétique Accès approximatif par les éléments (tags) : sélectionner les livres dont une des balises contient l expression régulière *or (author, editor) et dont la valeur est Martin Accès approximatif par le contenu : retrouver les sections ou les chapitres traitant de XML (indépendamment du niveau d imbrication) 11
Use Cases (W3C) Use Case «XMP» : Experiences and Exemplars Use Case «TREE» : requêtes préservant la hiérarchie Use Case «SEQ» : requêtes basée sur des séquences Use Case «R» : accès à des données relationnelles Use Case «SGML» : standard generalized markup language Use Case «TEXT» : recherche full-text Use Case «NS» : requêtes utilisant des espaces nominaux (namespaces) Use Case «PARTS» : recursive parts explosion Use Case «REF» : requêtes utilisant des références Use Case «FNPARM» : requêtes utilisant des fonctions et paramètres 12
Navigation Modèle de données XML : graphe dont les noeuds sont des éléments. Expression de chemins séquence de noeuds T1, T2,..., Tn retourne un ou plusieurs noeuds Tn, tels qu il existe des arcs T1 T2,... Tn-1 Tn Expression de chemin simple : nom de racine suivi par une séquence de balises Expression de chemin généralisée : utilisation de patterns (sous-chaîne de caractère, disjonction, optionalité, nombre quelconque de balises). 13
XPath Spécification W3C Expression de chemins XML standards prédicats pour spécifier les valeurs d éléments ou d attributs Brique de base pour d autres standards XML XLink : spécification des hyperliens XPointer : pointer des éléments de documents avec des expressions XPath dans les URL XSL : langage de spécification de feuilles de style XQuery : langage de requêtes 14
XPath (types) Types Boolean, Number, String, Node-sets (sous-arbre) Types de noeuds : processing instruction nodes (instructions) comment nodes (commentaires) root nodes (racine) element nodes (élément) attribute nodes (attribut) namespace nodes (attributs d un noeud) text nodes (contenu) 15
Exemple bib year book title author editor publisher price last first last first affiliation 16
XPath (axes) Position (noeud courant) self. Descendants direct child / indirect descendant // Prédécesseurs direct parent.. indirect ancestor Frères même niveau sibling navigation following-/preceding-sibling Autres ancestor-or-self, descendant-or-self, namespace, attribute (@) 17
XPath (fonctions) Positions relatives et information locale Exemples position() : position dans le contexte number() : nombre de positions possibles dans le contexte count() : cardinalité d un node-set last() : indicateur de dernière position Autres Fonctions booléennes : and, or, not opérateurs : mod, >, <=, etc. fonctions de chaîne : contains, substring-before,... fonctions d environnement : normalize-space Permettent des requêtes de base analyse des contenus et noms de balises/attributs 18
XPath (exemples) Child::title Child::* Child::text() Attribute::year Descendant::last Self::title élément title fils du nœud contexte tous les nœuds fils du nœud contexte nœuds texte contenus dans les enfants attribut year du noeud contexte élément last descendant du nœud contexte nœud contexte si c est un élément title (rien sinon) Child::book/descendant::last élément last, descendant de l élément book fils du nœud contexte Child::*/child::last tous les éléments last petits-fils du noeud contexte Child::book[position()=1] premier fils book du nœud contexte Child::book[child::title= bases de donnees ] élément book fils du nœud contexte ayant un ou plusieurs fils title dont la valeur est bases de donnees 19
XPath (abréviations) child:: est l axe par défaut, et peut être omis child::section/child::title peut s écrire section/title attribute:: peut être remplacé par @ child::title[attribute::type= warning ] peut s écrire title[@type= warning ] // est l abréviation de /descendant-or-self::node()/ //title sélectionne tous les éléments title. est l abréviation de self::node().. est l abréviation de parent::node()../title sélectionne les enfants title du parent du nœud contexte 20
Langages de requêtes pour XML Standardisation presque terminée Buts : recherche d informations dans les documents travaille directement sur la structure XML Bases de réflexion SQL XML-QL (T&T) YATL (INRIA) Lorel (Stanford) XQL Quilt (IBM) 21
XQuery Spécification du W3C (déc.2001) inspiré de SQL satisfait les contraintes émises (requêtes essentielles, Use Cases) basé sur XPath Une requête en XQuery est une expression qui lit un ensemble de documents XML (ou des fragments) renvoie une séquence de fragments XML bien formés 22
XQuery Requête sur un arbre : parcours de l arbre utilisation de XPath Eléments de base : entiers, flottants, chaînes Variables : $nom Appels de fonction : nomfonction(...) Opérateurs sur les éléments logiques : and or arithmétiques : + - * div mod comparaison : > < = >= <= (en fait lt, gt, eq) comparaison sur les noeuds : = =!= = ordre sur les noeuds : << >> Notions de séquences (listes) ex : (1, 2, 3, 4) opérateurs : union, intersect, except 23
Expressions XQuery Principales formes des expressions XQuery: expressions de chemins construction d éléments expressions FLWR (flower) : for, let, where, return listes conditions quantificateurs types de données 24
Expression de chemin Expression XPath document( bib.xml )//book//author[last= martin ] Renvoie tous les auteurs des livres du document bib.xml dont le nom est Martin. Le résultat est une liste de fragments XML, ayant chacun comme racine un élément last. l ordre des fragments respecte l ordre du document 25
Construction d élément <employee empid= 12345 > <name>jean Dupont</name> <job>spécialiste XML</job> </employee> Crée l élément décrit dans la requête. On peut utiliser des variables : <employee empid= {$id}> <name>{$name}</name> <job>{$job}</job> </employee> Les 3 variables $id,$name,$job doivent être liées aux fragments appropriés 26
Expression FLWR FOR... LET... WHERE... RETURN Exemple : personnes ayant édité plus de 100 livres FOR $p IN document( bib.xml )//publisher LET $b:=document( bib.xml )//book[publisher = $p] WHERE count($b) > 100 RETURN $p FOR génère une liste ordonnée de liens de noms d éditeurs avec $p. LET associe à chacun de ces liens un autre lien de la liste des éléments book avec cet éditeur avec $b. On a une liste ordonnée de n-uplets($p,$b). WHERE filtre cette liste pour ne retenir que les n-uplets souhaités. RETURN construit pour chaque n-uplet la valeur résultat. Il est possible d avoir plusieurs FOR dans une requête (utilisé pour la jointure). 27
Listes Liste des éditeurs et le prix moyen de leurs livres : FOR $p IN distinct(document( bib.xml )//publisher LET $a := avg(document( bib.xml )//book[publisher= $p]/price) RETURN <publisher> <name>{$p/text()}</name> <avgprice>{$a}</avgprice> </publisher> Les listes peuvent être triées (SORTBY...ASCENDING/DESCENDING). document( bib.xml )//book[price > 100] SORTBY (author[1], title)ascending 28
Conditions IF... THEN... ELSE FOR $h IN document( library.xml )//holding RETURN <holding> {$h/title, IF ($h/@type = journal ) THEN $h/editor ELSE $h/author } </holding> Extrait du contenu d une bibliothèque les titres et soit l auteur, soit l éditeur. 29
Quantificateurs SOME... IN... SATISFIES EVERY... IN... SATISFIES FOR $b IN document( bib.xml )//book WHERE SOME $p IN $b//resume SATISFIES (contains($p, sailing ) AND contains($p, windsurfing )) RETURN $b/title Titre de tous les livres mentionnant à la fois sailing et windsurfing dans le même élément resume. FOR $b IN document( bib.xml )//book WHERE EVERY $p IN $b//resume SATISFIES contains($p, sailing ) RETURN $b/title Titre des livres mentionnant sailing dans chaque élément resume. 30
Types XQuery supporte les types de données de XML Schema, types simples et complexes. INSTANCEOF : renvoie true si la valeur du premier opérande est du type du deuxième opérande. TYPESWITCH.. CASE..DEFAULT..: branchement en fonction du type typeswitch ($animal) case element duck return quack($animal) case element dog return woof($animal) default return no sound CAST : force un type 31
Exemple (1) Livres publiés par Addison-Wesley depuis 1991, avec l année et le titre <bib> { for $b in document( www.bn.com )/bib/book where $b/publisher = Addison-Wesley and $b/@year > 1991 return <book year= {$b/@year} > {$b/title} </book> } </bib> Résultat : <bib> <book year= 1994 <title> Bases de données </title> </book> <book year= 1999 <title> Langages de requêtes XML </title> </book> </bib> 32
Exemple (2) Liste de toutes les paires (titre, auteur), chaque paire étant contenue dans un élément result. <results> { for $b in document("www.bn.com")/bib/book, $t in $b/title $a in $b/author Return <result> { $t} { $a } </result> } </results> 33
Conclusion XML : structure d arbre navigation grâce à XPath caractérisation des sous-arbres grâce aux axes Requêtes : travaillent sur les sous-arbres construits génèrent un sous-arbre extrait ou calculé XQuery : langage très puissant, comprenant toutes les fonctionnalités de SQL (restriction, projection, jointure, imbrication, restructuration, agrégation, tri, quantificateurs, etc.) En passe de devenir un standard. 34
Liens www.w3.org/tr/xquery www.w3.org/tr/xquery-requirements www.w3.org/tr/xquery-use-cases http://www-db.research.bell-labs.com/user/simeon/xquery.ps 35