Upload
marjolaine-lafon
View
103
Download
0
Embed Size (px)
Citation preview
Données sous XML
Stéphane Marchand-MailletGroupe Viper
Vision par Ordinateur et Multimédia
CUI – Université de Genève
http://viper.unige.ch/~marchand
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 2
Plan du cours
Session XML: Généralités Définition Principes
Session Représentation de données: Structuration de données Requêtes
Session Outils: XML sur le WWW Développements liés à XML
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 3
Session 2: Données
Rappel XML Structuration hiérarchique Spécification XPath Langages de requêtes
Quilt XQuery
Outil Cocoon / Kweelt
Alternatives Exemple de structuration
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 4
Résumé XML
XML = eXtended Markup Language XML version 1.0 = 10/02/1998 Spécification sur le site du W3C Basé sur SGML, « similaire » à HTML, texte XML bien formé
Syntaxe simple Peu de contraintes
XML valide Respecte la structure donnée par la DTD/Schema
Liens (XLink/Xpointer)
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 5
Exemple XML (annoté)
Instructionsde traitement
Type dedocument
Corps dudocument
Racine dudocument
Attribut
Element vide
Element non-vide
Commentaire
Balise d'ouverture Balise de fermeture
Declaration
<? xml version = "1.0" ?><? xml-stylesheet href = "http://cui.unige.ch/adressesToHTML.xsl"
type = "text/xsl" version = "1.0" ?><? cocoon-process type = "xslt" ?><! DOCTYPE adresses SYSTEM "http://cui.unige.ch/adresses.dtd">
<!--Ceci est un commentaire-->< adresses> <personne id= "marchand " > <type classe= "enseignant" rang="MA"/> <nom>Marchand-Maillet</nom> <prenom>Stéphane</prenom> <adresse>CUI, Université de Genève</adresse> </personne></adresses >
Entête dudocument
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 6
Document XML
Entête
adresses
personne
type nom prenom adresse
personne
type nom prenom adresse
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 7
Structure hiérarchique
Syntaxe XML: Une seule racine Imbrication correcte
Sans les liens (Xlink/Xpointer), document = arbre Balises = Nœuds Contenus, Elements vides = feuilles
Il faut pouvoir naviguer dans cet arbre Structure de graphe orienté XPath = « Langage » de localisation
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 8
XPath (types) Spécification W3C, V 1.0: 16/11/99 (V 2.0 pour XQuery) Types
Boolean Number String Node-sets Sous-arbre
Types of nodes: processing instruction nodes Instructions comment nodes Commentaires root nodes Racine element nodes Élément attribute nodes Attribut namespace nodes Attributs d’un nœud d’un NS text nodes Contenu
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 9
XPath (chemin = axes) Position (nœud) courant self . Descendants
Direct child / (In)direct descendant //
Predecesseurs Direct parent .. (In)direct ancestor
Frères Meme niveau sibling Navigation following- / preceding-sibling
Autres ancestor-or-self descendant-or-self namespace attribute @
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 10
Chemins
descendant
children
sibling
ancestor
parent
root
processing
commentaire
attribut
texte
self
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 11
XPath (fonctions)
Positions relatives et information locale Exemples:
position() : postion dans le contexte number() : Nombre de positions possibles dans le contexte count() : Cardinalité d’un « node-set » last() : Indicateur de derniere position
Autres: Fonctions booléennes: and, not, or, … Operateurs : mod, >, <=, … 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
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 12
XPath : exemples
child::paragraphe : enfant <paragraphe…> ./paragraphe (premier de la liste)
child::text() : texte contenu dans les enfants descendant::paragraphe : element paragraphe dans le ss-arbre
//paragraphe child::*/child::paragraphe
*/paragraphe child::paragraphe/descendant::section
./paragraphe//section /descendant::list/child::item
//list/item child::paragraphe[position()=last()-1] (avant-dernier paragraphe) /child::doc/child::chapitre[position()=5]/child::section[position()=2]
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 13
Requête XML
Standardisation toujours en cours (presque finale - WD) Buts:
Recherche d'informations dans le document Travaille directement sur la structure XML
Ressemble à SQL Bases de réflexion:
XML-QL (AT&T) YAT (INRIA) Lorel (Stanford) XQL (~Microsoft) Quilt (IBM) Base du standard
Kweelt (open source) ksp (module de Cocoon)
Comparaison: http://www-db.research.bell-labs.com/user/simeon/xquery.html
http://www.w3.org/XML/Query
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 14
Langage de requête (analyse)
Capacités essentielles: Une formulation de la requête en trois parties: pattern + filter +
constructor La possibilité d'imbriquer des requêtes, de les grouper, d'avoir une
indexation interne et de pouvoir faire des opérations de classement de disposer d'un opérateur JOIN d'avoir un accès imprécis aux données pour une grande flexibilité
Capacités utiles Avoir la possibilité de définir une alternative en cas de données
manquantes Pouvoir faire appel à des fonctions externes Pouvoir manipuler les données par références
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 15
Langage de requête (analyse)
10 Requêtes de test Sélection et extraction: "tous les ouvrages publiés après 1991" Flattening: l'arbre XML de la base est "mis à plat" Garder la structure: afficher la base dans sa version originale Changer la structure par imbrication de requête: lister la base par
auteur Changer la structure par opérateur de regroupement Combiner plusieurs sources de données Indexer les éléments de la structure: accéder au 3ème auteur d'un livre Classer les résultats Avoir un accès approximatif (wildcard) sur les éléments (tags) Avoir un accès approximatif (wildcard) sur le contenu
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 16
Requirements
Test cases W3C Use 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
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 17
XQuery language (1)
Spécification du W3C (Working Draft au 20/12/2001) Ressemble à SQL
Notation ENBF (notation des DTD) Satisfait les contraintes emises « W3C XQuery requirements » S’inspire de Quilt (IBM)
basé sur XPath (2.0), XQL, XML-QL, ODMG
Literals (éléments de base) Entiers, Flottants, Doubles, Chaînes
Variables Notation $nom
Appels de fonctions Syntaxe nom-de-la-fonction(…)
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 18
XQuery language (2)
Requêtes sur un arbre => parcours de l’arbre Utilisation de XPath
Opérateurs sur les éléments Logiques: and or Arithmetiques: + - * div mod (pas « / ») Comparaison: > < = <= >= (en fait lt, gt, eq) Comparaison sur les nœuds: == !== Ordre sur les nœuds : << >>
Notion de « sequences » ~ listes Exemples (1,2,3,4) Operateurs: union, intersect,except
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 19
XQuery language (3)
Constructions Evaluation: {…}(symbole « ` » UNIX)
Commentaires {-- Ceci est un commentaire pour XQuery --}
<book isbn="isbn-0060229357"> <title>Harold and the Purple Crayon</title> <author> <first>Crockett</first> <last>Johnson</last> </author> </book>
<example> <p> Here is a query. </p> <eg> $i//title </eg> <p> Here is the result of the above query. </p> <eg>{ $i//title }</eg> </example>
<example> <p> Here is a query. </p> <eg> $i//title </eg> <p> Here is the result of the above query. </p> <eg> Harold and the Purple Crayon </eg> </example>
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 20
XQuery language (4)
Expression FLWR (FLoWeR) FOR…LET…WHERE…RETURN… Exemple:
for $b in $input//book where $b/author = $a return $b/title
Classement: SORTBY…ASCENDING/DESCENDING //book[price > 100] sortby ((author[1], title) ascending)
Conditions : IF…THEN…ELSE… if ($widget1/unit-cost < $widget2/unit-cost) then $widget1 else $widget2
Selection SOME/EVERY…SATISFIES some $emp in //employee satisfies ($emp/bonus > 0.25 * $emp/salary)
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 21
XQuery language (5)
TYPESWITCH…CASE…DEFAULT… typeswitch ($animal)
case element duck return quack($animal) case element dog return woof($animal) default return "No sound"
define function summary(element employee* $emps)
returns element dept* { for $d in distinct-values($emps/deptno)
let $e := $emps[deptno = $d] return <dept> {$d} <headcount> {count($e)} </headcount>
<payroll> {sum($e/salary)} </payroll></dept>}
summary(document("acme_corp.xml")//employee[location = "Denver"])
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 22
Requête: Exemple: KSP
<? xml-stylesheet href = "http://cui.unige.ch/adressesToHTML.xsl"?><? cocoon-process type = "kweelt" ?><? cocoon-process type = "xslt" ?>
<kweelt-query> <!– QUERY </kweelt-query>
XML et XQuery
Module KSP
XML pur
<? cocoon-process type = "kweelt" ?>
Module XSLT
HTML
<? cocoon-process type = "xslt" ?><? xml-stylesheet href = "…"?>
Serveur Apache
BrowserWWW
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 23
Alternatives Serveur SQL classique
Pas forcement adapte (Transport du systeme) XML et SQL: Cocoon + module serveur MySQL
Architecture lourde PHP: spécialisé pour les BD SQL Microsoft: ASP + Access
Plate-forme Microsoft Access n’est pas un serveur Microsoft SQL server
Choix: dépend des cas d’utilisations et de leur contexte
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 24
Structuration de l’information
Choix technologique XML: 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)
Structure: Choix de représentation Pas de recette générique Peu faciliter l’analyse finale
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 25
Structuration (exemple)
<liste-personnel-cui> <professeur> <nom>Jean Prof</nom> <groupe>Groupe Vision</groupe> <groupeId>vision</groupeId> </professeur> <etudiant> <nom>Pierre Etude</nom> <groupe>Groupe Vision</groupe> <groupeId>vision</groupeId> </etudiant></liste-personnel-cui>
<liste-personnel id="cui"> <personne type="prof"> <nom>Jean</nom> <prenom>Prof</prenom> <groupe id="vision">Groupe Vision</groupe> </personne> <personne type="etudiant"> <nom>Pierre</nom> <prenom>Etude</prenom> <groupe id="tios">T. I. O. S</groupe> </personne></liste-personnel>
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 26
Conclusion
XML structure d’arbre Navigation grâce à XPath Caractérisation de sous-arbres grâce aux Axes
Requêtes Travaillent sur les sous-arbres construits Opérateurs de comparaison Générent un sous-arbre extrait ou calculé
Structuration de données Dépend du contexte Pas de recette unique XML n’est pas forcément toujours le bon choix
XML : Echange de données
Stéphane Marchand-Maillet – CUI – Université de Genève – http://viper.unige.ch/~marchand Cours XML 27
Liens utiles
(suite de la liste donnée au premier cours)
XPath : http://www.w3.org/TR/xpath XQuery : http://www.w3.org/TR/xquery/ Quilt : http://www.almaden.ibm.com/cs/people/chamberlin/quilt.html Kweelt : http://kweelt.sourceforge.net/ Document sur XQuery: http://www.w3.org/1999/09/ql/docs/xquery.html Cocoon : http://xml.apache.org/cocoon/ dbXML : http://www.dbxml.org/