Upload
emmanuelle-morlock
View
177
Download
1
Embed Size (px)
Citation preview
Atelier de formation Humanités numériques (HISoMA)Séance n°2
Outil de collation du projet HyperDonatInitiation XPath / XQuery avec BaseX
ENS de Lyon, 19/11/2014
Programme
1. Présentation d’outil ○ outil de collation du projet HyperDonat par Bruno Bureau
2. Atelier pratique○ rappels XML○ prise en main de BaseX○ exercices Xpath○ exercices Xquery○ “visualisation minute” avec GoogleFusion tables
outil de collation Hyperdonat
Atelier : XML en 4 points1. XML ne sert pas à afficher les données mais à les décrire. Il ne fait
rien. Appliqué à la représentation des textes, il permet de décrire notamment leur structure (livre, section, chapitre, paragraphe, phrase, mot…)
2. Les balises ne sont pas prédéfinies : on peut librement créer ses propres balises (en fonction de la structure logique qu’on choisit de représenter par exemple)
3. On peut l’utiliser avec une “grammaire” de balises (pour donner de la rigueur et encoder avec un langage commun entre projets)
4. XML est auto-descriptif et assez facilement lisible (on peut prendre connaissance de la structure d’un corpus assez rapidement en ouvrant simplement le fichier avec n’importe quel éditeur de texte)
Atelier : balises
Elle viendra <date>lundi prochain</date>.
balise ouvrante
balise fermante
contenu
Atelier : attributs
<date when=”2014-11-25”>lundi prochain</date>
valeur de l’attribut
attribut
Atelier : le corpus de travail
Atelier : structure d’un fichier TEI
Atelier : Corpus Morand : une structure “teiCorpus”
Atelier : Corpus Morand, structure d’une lettre
BaseX : introduction
BaseX est une base de données XML native offrant de nombreuses possibilités de recherche et de visualisation de documents XML.
vue “tree” vue “plot”
vue “map”
vue “table” vue “explorer”
vue “folder”
BaseX : prise en main
zone de saisie de requête XPath ou texte
Editor
Result
Query Info
vues
créer une base
BaseX : premieres explorations 1 (vue tree)
● Activez la vue “Tree” et la fenêtre “result”
● Naviguez dans la structure TEI de noeud element en noeud element pour afficher le titre d’une lettre dans la vue result
● résultat :
teiCorpus
TEI
teiHeader
fileDesc
titleStmt
title
<title>Lettre d'Antoine à son épouse Magdeleine, 19 août 1794</title>
BaseX : premières explorations 2 (vue plot)
Corpus Morand● Affichez la vue “plot” et la fenêtre de résultats● Quels correspondants ont écrit le plus grand nombre de
lettres ?
Aide :
● Pour l’élément TEI, mettez en relation les lettres et les correspondants en utilisant comme variables :○ axe X: l’attribut @id (cf. les lettres)○ axe Y : l’élément persName (cf. les correspondants)
XPath : initiation
● XPath = XML path language
● Il sert à identifier et localiser des fragments de documents XML.
● Il décrit des chemins à prendre pour aller de la racine ou d’un noeud “local” vers le noeud recherché en suivant les filiations…
XPath : initiation
L’arbre XPath (un peu différent du précédent)
● la racine est l’élément racinedu document XML
● les noeuds sont : ○ les éléments, ○ les attributs, ○ le texte, ○ etc.*
* noeuds commentaire, processing-instruction, namespace
XPath : initiation
Exemple
structure
/body/div/head ?
/body/div/head
/body/div/lg ?
/body/div/lg
/body/div/@type ?
/body/div/@type
/body/div/lg/l[@n=”2”] ?
/body/div/lg/l[@n=”2”]
//l[@n > 9] ?
//l[@n > 9]
Xpath : à savoir
● un chemin de localisation retourne un node-set (ensemble non ordonné de noeuds)
● Les chemins peuvent être :○ absolus : (/div/lg[1]/l)○ relatifs (l/../../head)
● Syntaxe formelle : (axe::type[predicat])
Exemple : child::div[contains(head, 'Chanson')]
Axes
● ancestor:: tous les ascendants (parent, grand-parent etc.) du noeud courant● ancestor-or-self:: les ascendants + le noeud courant● attribute:: les attributs du noeud courant● child:: tous les enfants du noeud courant● descendant:: tous les descendants (enfants, petits-enfants, etc.) du noeud
courant● descendant-or-self:: descendants + le noeud courant● following:: les noeuds après le noeud courant dans l’ordre de document mais qui
ne sont pas les descendants du noeud courant● following-sibling:: les frères à droite du noeud courant● parent:: le parent● preceding:: tous les noeuds à gauche du noeud courant à l’exception des
ascendants● preceding-sibling:: les frères à gauche du noeud courant● self:: le noeud courant
Pour aller plus loin : tutoriel de Wieslaw Zielonka
http://www.liafa.univ-paris-diderot.fr/~zielonka/Enseignement/BDAvances/2012/XML/xpath.pdf
XPath : à vous de jouer
● Comptez le nombre de lettres du corpus
● Combien Antoine et Antoinette Morand ont-il écrit de lettres ?
● Regardez la vue “tree” de ces résultats pour voir la répartition sur l’ensemble du corpus
XPath : à vous de jouer
● Recherchez tous les paragraphes des lettres
● Recherchez tous les paragraphes des lettres qui ont des éléments enfants
● Quel est le plus fréquent ? Qu’en déduire sur les centres d’intérêt de l’auteur du corpus ?
Aide :
● Allez voir la définition de cet élément dans les guidelines de la TEI : http://www.tei-c.org/
XQuery : sensibilisation
XQuery est un langage de requêtes dans des documents XML permettant d’effectuer des calculs à partir des informations extraites, et de formater les résultats dans de nouveaux documents XML ou des fragments XML.
FLWOR (prononcer flower) est une syntaxe de XQuery.
XQuery : sensibilisation 2
FLWOR = For-Let-Where-Order-Return
Modèle :
● For : itération sur une liste de fragments XML● Let : association du résultat d’une expression avec une
variable● Where : condition de sélection● Order : tri des résultats● Return : expression à retourner
XQuery : sensibilisation 3
FLWOR = For-Let-Where-Order-Return
Exemple
for $variable in expression_recherche
return
for $titre in //TEI//text//opener
return
XQuery : exercice
Remplacez les ******** par les expressions requises
for $lettre in ******************
where $lettre//persName[contains(.,’*****’)]
let $lieu := $lettre//location/placeName
let $titre := $lettre//text/body//opener/text()
group by **************
let $nbr_lettres := count($lettre)
order by ************ descending
return
<result>
<lieu>{$lieu}</lieu>
<lieu>**********</lieu>
</result>
Visualisation minute avec Google Fusion Tables
● Affichez la fenêtre ‘editor’
● Chargez la requête “morand2csv” (dossier ‘requete’)● Executez la requête puis enregistrez le résultat sous “export-
morand.csv”● Dans GoogleDrive, faites “créer > fusion table”● Choisissez “export-morand.csv”● Indiquez le caractère point-virgule (“;”) comme séparateur● Cliquez sur “next” 2 fois, puis “finish”● Dans Drive, cliquez sur la croix rouge et sélectionnez “add chart”● Sélectionnez “Network graph” dans la colonne de gauche
● Choisissez des variables à mettre en relation dans “show link between”...