Données sous XML Stéphane Marchand-Maillet Groupe Viper Vision par Ordinateur et Multimédia CUI – Université de Genève
Cours XML 2 Stéphane Marchand-Maillet – CUI – Université de Genève – Plan du cours lSession XML: 6Généralités 6Définition 6Principes lSession Représentation de données: 6Structuration de données 6Requêtes lSession Outils: 6XML sur le WWW 6Développements liés à XML
Cours XML 3 Stéphane Marchand-Maillet – CUI – Université de Genève – Session 2: Données lRappel XML lStructuration hiérarchique lSpécification XPath lLangages de requêtes 6Quilt 6XQuery lOutil 6Cocoon / Kweelt lAlternatives lExemple de structuration
Cours XML 4 Stéphane Marchand-Maillet – CUI – Université de Genève – Résumé XML lXML = eXtended Markup Language lXML version 1.0 = 10/02/1998 lSpécification sur le site du W3C lBasé sur SGML, « similaire » à HTML, texte lXML bien formé 6Syntaxe simple 6Peu de contraintes lXML valide 6Respecte la structure donnée par la DTD/Schema lLiens (XLink/Xpointer)
Cours XML 5 Stéphane Marchand-Maillet – CUI – Université de Genève – Exemple XML (annoté) Instructions de traitement Type de document Corps du document Racine du document Attribut Element vide Element non-vide Commentaire Balise d'ouvertureBalise de fermeture Declaration Marchand-Maillet Stéphane CUI, Université de Genève Entête du document
Cours XML 6 Stéphane Marchand-Maillet – CUI – Université de Genève – Document XML Entête adresses personne typenomprenomadresse personne typenomprenomadresse
Cours XML 7 Stéphane Marchand-Maillet – CUI – Université de Genève – Structure hiérarchique lSyntaxe XML: 6Une seule racine 6Imbrication correcte lSans les liens (Xlink/Xpointer), document = arbre 6Balises = Nœuds 6Contenus, Elements vides = feuilles lIl faut pouvoir naviguer dans cet arbre 6Structure de graphe orienté 6XPath = « Langage » de localisation
Cours XML 8 Stéphane Marchand-Maillet – CUI – Université de Genève – XPath (types) lSpécification W3C, V 1.0: 16/11/99 (V 2.0 pour XQuery) lTypes 6Boolean 6Number 6String 6Node-sets Sous-arbre lTypes of nodes: 6processing instruction nodesInstructions 6comment nodesCommentaires 6root nodes Racine 6element nodesÉlément 6attribute nodesAttribut 6namespace nodesAttributs d’un nœud d’un NS 6text nodesContenu
Cours XML 9 Stéphane Marchand-Maillet – CUI – Université de Genève – XPath (chemin = axes) lPosition (nœud) courant self. lDescendants 6Directchild / 6(In)directdescendant // lPredecesseurs 6Directparent.. 6(In)directancestor lFrères 6Meme niveau sibling 6Navigation following- / preceding-sibling lAutres 6 ancestor-or-self 6 descendant-or-self 6 namespace 6
Cours XML 10 Stéphane Marchand-Maillet – CUI – Université de Genève – Chemins descendant children sibling ancestor parent root processing commentaire attribut texte self
Cours XML 11 Stéphane Marchand-Maillet – CUI – Université de Genève – XPath (fonctions) lPositions relatives et information locale lExemples: 6position() : postion dans le contexte 6number() : Nombre de positions possibles dans le contexte 6count() : Cardinalité d’un « node-set » 6last() : Indicateur de derniere position lAutres: 6Fonctions booléennes: and, not, or, … 6Operateurs : mod, >, <=, … 6Fonctions de chaîne: contains, substring-before 6Fonctions d’environnement: normalize-space lPermettent des requêtes de base 6Analyse des contenus et noms de balises/attributs
Cours XML 12 Stéphane Marchand-Maillet – CUI – Université de Genève – XPath : exemples child::paragraphe : enfant ./paragraphe (premier de la liste) l child::text() : texte contenu dans les enfants l descendant::paragraphe : element paragraphe dans le ss-arbre 6 //paragraphe l child::*/child::paragraphe 6 */paragraphe l child::paragraphe/descendant::section 6./paragraphe//section l /descendant::list/child::item 6 //list/item l child::paragraphe[position()=last()-1] (avant-dernier paragraphe) l /child::doc/child::chapitre[position()=5]/child::section[position()=2]
Cours XML 13 Stéphane Marchand-Maillet – CUI – Université de Genève – Requête XML lStandardisation toujours en cours (presque finale - WD) lButs: 6Recherche d'informations dans le document 6Travaille directement sur la structure XML lRessemble à SQL lBases de réflexion: 6XML-QL (AT&T) 6YAT (INRIA) 6Lorel (Stanford) 6XQL (~Microsoft) 6Quilt (IBM) Base du standard èKweelt (open source) èksp (module de Cocoon) 6Comparaison:
Cours XML 14 Stéphane Marchand-Maillet – CUI – Université de Genève – Langage de requête (analyse) lCapacités essentielles: 6Une formulation de la requête en trois parties: pattern + filter + constructor 6La possibilité d'imbriquer des requêtes, de les grouper, d'avoir une indexation interne et de pouvoir faire des opérations de classement 6de disposer d'un opérateur JOIN 6d'avoir un accès imprécis aux données pour une grande flexibilité lCapacités utiles 6Avoir la possibilité de définir une alternative en cas de données manquantes 6Pouvoir faire appel à des fonctions externes 6Pouvoir manipuler les données par références
Cours XML 15 Stéphane Marchand-Maillet – CUI – Université de Genève – Langage de requête (analyse) l10 Requêtes de test 6Sélection et extraction: "tous les ouvrages publiés après 1991" 6Flattening: l'arbre XML de la base est "mis à plat" 6Garder la structure: afficher la base dans sa version originale 6Changer la structure par imbrication de requête: lister la base par auteur 6Changer la structure par opérateur de regroupement 6Combiner plusieurs sources de données 6Indexer les éléments de la structure: accéder au 3ème auteur d'un livre 6Classer les résultats 6Avoir un accès approximatif (wildcard) sur les éléments (tags) 6Avoir un accès approximatif (wildcard) sur le contenu
Cours XML 16 Stéphane Marchand-Maillet – CUI – Université de Genève – Requirements lTest cases W3C 6Use Case "XMP": Experiences and Exemplars Use Case "TREE": Queries that preserve hierarchy Use Case "SEQ" - Queries based on Sequence Use Case "R" - Access to Relational Data Use Case "SGML": Standard Generalized Markup Language Use Case "TEXT": Full-text Search Use Case "NS" - Queries Using Namespaces Use Case "PARTS" - Recursive Parts Explosion Use Case "REF" - Queries based on References
Cours XML 17 Stéphane Marchand-Maillet – CUI – Université de Genève – XQuery language (1) lSpécification du W3C (Working Draft au 20/12/2001) lRessemble à SQL 6Notation ENBF (notation des DTD) 6Satisfait les contraintes emises « W3C XQuery requirements » 6S’inspire de Quilt (IBM) è basé sur XPath (2.0), XQL, XML-QL, ODMG lLiterals (éléments de base) 6Entiers, Flottants, Doubles, Chaînes lVariables 6Notation $nom lAppels de fonctions 6Syntaxe nom-de-la-fonction(…)
Cours XML 18 Stéphane Marchand-Maillet – CUI – Université de Genève – XQuery language (2) lRequêtes sur un arbre => parcours de l’arbre 6Utilisation de XPath lOpérateurs sur les éléments 6Logiques: and or 6Arithmetiques: + - * div mod (pas « / ») 6Comparaison: > = (en fait lt, gt, eq) 6Comparaison sur les nœuds: == !== 6Ordre sur les nœuds : > lNotion de « sequences » ~ listes 6Exemples (1,2,3,4) 6Operateurs: union, intersect,except
Cours XML 19 Stéphane Marchand-Maillet – CUI – Université de Genève – XQuery language (3) lConstructions 6Evaluation: {…} (symbole « ` » UNIX) lCommentaires 6{-- Ceci est un commentaire pour XQuery --} Harold and the Purple Crayon Crockett Johnson Here is a query. $i//title Here is the result of the above query. { $i//title } Here is a query. $i//title Here is the result of the above query. Harold and the Purple Crayon
Cours XML 20 Stéphane Marchand-Maillet – CUI – Université de Genève – XQuery language (4) lExpression FLWR (FLoWeR) 6FOR…LET…WHERE…RETURN… 6 Exemple: for $b in $input//book where $b/author = $a return $b/title l Classement: SORTBY…ASCENDING/DESCENDING 6 //book[price > 100] sortby ((author[1], title) ascending) l Conditions : IF…THEN…ELSE… 6 if ($widget1/unit-cost < $widget2/unit-cost) then $widget1 else $widget2 l Selection SOME/EVERY…SATISFIES 6 some $emp in //employee satisfies ($emp/bonus > 0.25 * $emp/salary)
Cours XML 21 Stéphane Marchand-Maillet – CUI – Université de Genève – XQuery language (5) lTYPESWITCH…CASE…DEFAULT… 6 typeswitch ($animal) case element duck return quack($animal) case element dog return woof($animal) default return "No sound" l define function summary (element employee* $emps) returns element dept* { for $d in distinct-values($emps/deptno) let $e := $emps[deptno = $d] return {$d} {count($e)} {sum($e/salary)} } summary(document("acme_corp.xml")//employee[location = "Denver"])
Cours XML 22 Stéphane Marchand-Maillet – CUI – Université de Genève – Requête: Exemple: KSP <!– QUERY XML et XQuery Module KSP XML pur Module XSLT HTML Serveur Apache Browser WWW
Cours XML 23 Stéphane Marchand-Maillet – CUI – Université de Genève – Alternatives lServeur SQL classique 6Pas forcement adapte (Transport du systeme) lXML et SQL: Cocoon + module serveur MySQL 6Architecture lourde lPHP: spécialisé pour les BD SQL lMicrosoft: ASP + Access 6Plate-forme Microsoft 6Access n’est pas un serveur Microsoft SQL server lChoix: dépend des cas d’utilisations et de leur contexte
Cours XML 24 Stéphane Marchand-Maillet – CUI – Université de Genève – Structuration de l’information lChoix technologique 6XML: Transport de données èTechnologie légère : Parseur + représentation objet èMultiplateforme èBasé sur le fichiers (texte) èPas de système de serveur èTexte = mauvaise compression èTexte => peu d’optimalité dans les requêtes èXML: Hiérarchique / Pas de structure relationelle (si avec XPointer) 6Structure: Choix de représentation èPas de recette générique èPeu faciliter l’analyse finale
Cours XML 25 Stéphane Marchand-Maillet – CUI – Université de Genève – Structuration (exemple) Jean Prof Groupe Vision vision Pierre Etude Groupe Vision vision Jean Prof Groupe Vision Pierre Etude T. I. O. S
Cours XML 26 Stéphane Marchand-Maillet – CUI – Université de Genève – Conclusion lXML structure d’arbre 6Navigation grâce à XPath 6Caractérisation de sous-arbres grâce aux Axes lRequêtes 6Travaillent sur les sous-arbres construits 6Opérateurs de comparaison 6Générent un sous-arbre extrait ou calculé lStructuration de données 6Dépend du contexte 6Pas de recette unique 6XML n’est pas forcément toujours le bon choix XML : Echange de données
Cours XML 27 Stéphane Marchand-Maillet – CUI – Université de Genève – Liens utiles (suite de la liste donnée au premier cours) lXPath : lXQuery : lQuilt : lKweelt : lDocument sur XQuery: lCocoon : ldbXML :