1 TP – XPath
Préparation
- installer Anaconda/Jupyter (si nécessaire: vous pouvez ausssi essayer de lancer jupyter-notebook )
- installer GraphViz (si nécessaire: sur Linux, graphviz est souvent installé par défaut)
- créez un repertoire LODAS/notebooks
- téléchargez et décompressez les fichiers lodas_notebooks_tme_data et lodas_notebooks_tme1 disponibles sur Moodle.
1.1 Exercices XPath
Exercice : Ouvrir le notebooks xpath. Exécutez les expressions XPath et analysez les réponses.
Exercice: Complétez le notebook avec les expression manquantes pour les deux documents data/roisdefrance.xml
et data/roisdefranceplat.xml
1.2 Exercices XQuery (optionnel)
Exercice: Exprimez les requêtes XPath du notebook avec XQuery en utilisant le logiciel BaseX
- Installer et lancer BaseX
- Créer une nouvelle base de données (Database->new)
- ouvrir le répertoire data (tous les fichiers XML de ce répertoire sont chargés)
- On peut écrire les requêtes XQuery dans le frame Editor:
- Les noms des épouses de rois:
for $a in //Roi/epouse return $a/*/nom
- Les noms des épouses de rois:
-
- Les titres des oeuvres de Shakespeare
for $a in //PLAY return $a/TITLE
- Les personnage d’Hamlet
for $a in //PLAY where $a/TITLE = "The Tragedy of Hamlet, Prince of Denmark" return $a//PERSONA
- La scène avec les paroles ‘To be, or not to be…’:
for $a in //PLAY, $s in $a//SCENE,$p in $s//SPEECH, $x in $p//SPEAKER where $a/TITLE = "The Tragedy of Hamlet, Prince of Denmark" and $p//LINE = "To be, or not to be: that is the question:" return <SCENE>{ $s/TITLE, $x, $p } </SCENE>
- Les titres des scènes avec les paroles de Hamlet:
for $a in //PLAY, $s in $a//SCENE where $a/TITLE = "The Tragedy of Hamlet, Prince of Denmark" return <SCENE>{ $s/TITLE, for $p in $s//SPEECH, $x in $p//SPEAKER let $l:=$p//LINE where fn:starts-with($x,"HAMLET") return ($x, $l) } </SCENE>
- Les titres des oeuvres de Shakespeare
2 TP – Manipulation RDF
On utilise les outils suivants:
Téléchargez et décompressez le fichier lodas_notebooks_tme2 (sur Moodle) dans le repertoire LODAS/notebooks créé pendant le premier TP
Exercice: Exécutez et complétez le noteboock manipulationrdf.
3 TP – SPARQL
Préparation:
Téléchargez et décompressez le fichier lodas_notebooks_tme3 (sur Moodle) dans le répertoire LODAS/notebooks
Exercice :
- Lancez le serveur Jena/Fuseki (startfuseki)
- Creez un dataset TDB2 avec le nom tpsparql en utilisant l’interface du serveur Fuseki http://localhost:3030 :
- manage datasets-> add new dataset
- Dataset name : tpsparql
- Dataset type : TDB2
- Chargez le fichier
data/roisdbpedia.nt
dans le graphe nommé http://localhost:3030/roisdbpedia du dataset tpsparql :- dataset -> upload files (choisir Dataset tpsparql)
- Destination graph name: http://localhost:3030/roisdbpedia
- select files :
data/roisdbpedia.nt
- upload all
- dataset -> upload files (choisir Dataset tpsparql)
3.1 Interrogation d’un seul graphe
Exercice: Evaluez les requêtes SPARQL suivantes sur le graphe RDF roisdbpedia
en utilisant l’interface de Fuseki (localhost:3030)
- dataset -> query (choisir Dataset tpsparql)
Une alternative est d’utiliser le notebook sparqlkernel qui nécessite l’installation d’un noyeau notebook SPARQL (https://github.com/paulovn/sparql-kernel)
Exercice : Exécutez les requêtes suivantes
- Les classes (types) et les propriétes de tous les objets:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT distinct ?c ?p FROM <http://localhost:3030/roisdbpedia> WHERE { ?a a ?c; ?p ?b } ORDER BY ?c ?p
- Les noms des rois avec leur date de naissance (obligatoire).
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?n ?d FROM <http://localhost:3030/roisdbpedia> WHERE { ?a a asws:Roi; asws:nom ?n; asws:datenaiss ?d } ORDER BY ?d
Exercice : Ecrivez et évaluez les requêtes suivantes
- Les noms des rois avec leur date de naissance (optionnel)
- Les noms des reines avec les noms des époux.
- Les noms des reines qui sont nées la même année que leurs époux avec les noms de leurs époux (il faut utiliser la fonction
year
). - Les noms des rois sans fils (deux solutions).
Exercice : Expliquez le résultat de la requête suivante:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?n FROM <http://localhost:3030/roisdbpedia WHERE { { ?a asws:nom ?n } MINUS { ?b asws:fils ?f } }
3.4 Interrogation de plusieurs graphes nommées
Exercice : Créez dans le dataset tpsparql un graphe nommé http://localhost:3030/roisschema et chargez le fichier data/rois_schema.ttl
dans ce graphe .
- dataset -> upload files (choisir Dataset tpsparql)
- Destination graph name: http://localhost:3030/roisschema
- select files :
data/rois_schema.ttl
- upload all
Exercice: Interrogation de schéma RDFS:
- Toutes les propriétés
PREFIX asws: <http://www.asws.com/rois#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?a
FROM <http://localhost:3030/roisschema>
WHERE { ?a a rdf:Property }
ORDER BY ?a
Exercice : Ecrivez et évaluez les requêtes suivantes
- Toutes les propriétés et leurs sous propriétes (optionnel)
- Toutes les classes et leurs sous-classes.
Exercice: Evaluez et expliquez les réponse des requêtes suivantes:
- Requête 1:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?a ?v FROM <http://localhost:3030/roisdbpedia> FROM <http://localhost:3030/roisschema> WHERE { ?a ?q ?v . ?v rdf:type rdfs:Class . ?a asws:fils asws:Louis_XI . }
- Requête 2:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?h ?j ?a ?v FROM NAMED <http://localhost:3030/roisdbpedia> FROM NAMED <http://localhost:3030/roisschema> WHERE { GRAPH ?h { ?a ?q ?v . ?a asws:fils asws:Louis_XI . } GRAPH ?j { ?v rdf:type rdfs:Class . } }
- Requête 3:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?h ?j ?a ?v FROM NAMED <http://localhost:3030/roisdbpedia> FROM NAMED <http://localhost:3030/roisschema> WHERE { GRAPH ?h { ?a ?q ?v . ?a asws:fils asws:Louis_XI . } GRAPH ?h { ?v rdf:type rdfs:Class . } }
- Requête 4:
PREFIX asws: <http://www.asws.com/rois#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?a ?v FROM NAMED <http://localhost:3030/roisdbpedia> FROM NAMED <http://localhost:3030/roisschema> WHERE { ?a ?q ?v . ?v rdf:type rdfs:Class . ?a asws:fils asws:Louis_XI . }
Exercice: Définissez et évaluez les requêtes SPARQL suivantes sur le graphe RDF roisdbpedia
et le schéma RDFS roisschema
:
- Toutes les instances des sous-classes de la classe
asws:Homme
. - Tous les triplets (?a ?p ?b) qui relient une ressource ?a du graphe
data/roisdbpedia.ttl
à une ressource ?b du graphedata/rois_schema.ttl
(graphes nommés).
3.5 Expressions de chemins
Exercice : Ajoutez le fichier succdbpedia.ttl au graphe nommé http://localhost:3030/roisdbpedia . Il y a deux propriétes:
- asws:successeur : le/la successeur directe d’une personne.
- asws:enfant : les enfants d’une personne
Exercice: Définissez et évaluez les requêtes SPARQL suivantes sur le graphe RDF roisdbpedia
:
- Tous les successeurs directes et indirectes de Louis XVI.
- Les noms de toutes les instances de sous-classes directes et indirectes de la classe
asws:Personne
. - Les noms des personnes et de leurs conjoints.
- Les noms des personnes et de leurs enfants:
- en utilisant la propriété asws:enfant
- en utilisant les propriétés asws:fils, asws:fille, asws:pere, asws:mere
- Les noms des personnes et de leurs descendants.
3.6 Requêtes d’aggrégation
- Le nombre de successeurs par roi ou reine.
- Le nombre d’enfants par roi ou reine.
- Le nombre d’époux par reine.
- Le nombre de roi et de reines par dynastie.
- Le nombre de descendants et d’ancêtres par roi ou reine.
4 TP – Règles RDF
- Téléchargez et décompressez le fichier lodas_notebooks_tme4 (sur Moodle) dans le répertoire LODAS/notebooks
- Suivez les instructions du notebook.
5 TP – OWL et SPARQL
5.1 Préparation
- Téléchargez et décompressez le fichier lodas_notebooks_tme5
- Le programme
owlsparql
permet d’exécuter des requêtes SPARQL sur des graphes RDF (ABOX) avec une ontology OWL (TBOX):usage: java owlsparql -d,--data <arg> data file path -f,--format <arg> output format (optional): TURTLE (default) NT JSON-LD RDF/XML-ABBREV -n,--newfacts produce only new facts -o,--owl <arg> OWL ontology file path (optional) -q,--query <arg> SPARQL query file path (optional)
- Il existe déjà une version compilée (owlsparql.class) que vous pouvez tester. Si nécessaire, vous pouvez rompilez le programme
owlsparql.java
:cd owl mkdir gendata cp data/* gendata javac owlsparql.java
5.2 Exercice
Exercice: Suivez les instructions du notebook owl.
6 TP – SPARQL et Optimisation
Version Notebook
- Décompressez le fichier
lodas_notebooks_tme6.zip
dans le répertoire LODAS/notebooks - Exécutez le notebook optimisation.ipynb
Version Shell
- Décompressez le fichier
lodas_notebooks_tme6.zip
dans le répertoire LODAS/notebooks - Créer la base
dbpedia.tdb
:- Option 1
- télécharger le fichier suivant et le décompresser dans le répertoire /tmp/ à la place:
- https://moodle-sciences.upmc.fr/moodle-2020/mod/resource/view.php?id=93127
- Option 2
- Télécharger https://downloads.dbpedia.org/repo/dbpedia/mappings/mappingbased-objects/2020.10.01/mappingbased-objects_lang=en.ttl.bz2 (21M triplets)
- exécuter la commande tdbloader2 –loc=$RDFDB mappingbased-objects_lang=en.ttl.bz2
- d’autres fichiers sont disponible ici: https://wiki.dbpedia.org/develop/datasets/latest-core-dataset-releases
- Option 1
Linux / Mac ?
export LODAS_HOME="/home/..." cd $LODAS_HOME -- télécharger et decompresser lodas_notebooks_tme6.zip cd sparql wget https://downloads.dbpedia.org/repo/dbpedia/mappings/mappingbased-objects/2020.10.01/mappingbased-objects_lang=en.ttl.bz2 export JENA_HOME=$LODAS_HOME/apache-jena-3.16.0 export PATH=$JENA_HOME/bin:$PATH export JVM_ARGS="-Xms512m -Xmx2048M -XX:-UseGCOverheadLimit -XX:+UseParallelGC" export RDFDB=/tmp/dbpedia.tdb tdbloader2 --loc=$RDFDB mappingbased-objects_lang=en.ttl.bz2
Windows
set LODAS_HOME=\Users\... cd %LODAS_HOME% -- télécharger et decompresser lodas_notebooks_tme6.zip cd sparql -- https://downloads.dbpedia.org/repo/dbpedia/mappings/mappingbased-objects/2020.10.01/mappingbased-objects_lang=en.ttl.bz2 set JENA_HOME=%LODAS_HOME%\apache-jena-3.16.0\ set PATH=%JENA_HOME%\bat;%PATH% set JVM_ARGS=-Xms512m -Xmx2048M -XX:-UseGCOverheadLimit -XX:+UseParallelGC set RDFDB=\tmp\dbpedia.tdb mkdir \tmp tdbloader.bat --loc=%RDFDB% mappingbased-objects_lang=en.ttl.bz2
Commandes
Génération de statistiques sur une base TDB
tdbstats --loc=DIR [--graph=URI]
DIR
indique l’entrepôt RDF ($RDFDB)URI
indique l’URI d’un graphe dans l’entrepôt
Les statistiques sont décrites sous forme de motifs
((subj pred obj) count)
où
subj
,pred
etobj
peuvent prendre la valeurVAR
(une variable),TERM
(un terme),ANY
(une variable ou un terme) ou indiquer une URI;count
indique le nombre d’occurrences.
Par exemple:
((TERM TERM TERM) 1)
indique que chaque triplet a une occurrence.((TERM p:prop VAR) 1)
indique que la propriétép:prop
est une propriété fonctionnelle
Le motif (predicate count)
est un raccourci pour:
((TERM predicate ANY) X)
((ANY predicate TERM) Y)
((ANY predicate ANY) count)
où X
et Y
dépendent de la taille du graphe. Voir https://jena.apache.org/documentation/tdb/optimizer.html pour plus de détails.
Interrogation d’une base TDB
tdbquery [--time] [--debug] [--explain] --loc=DIR --query=<FILE>
–time
(optionnel) retourne le temps d’exécution de la requête–debug
(optionnel) affiche le plan d’exécution de la requête–explain
(optionnel) affiche le plan d’exécution de la requête plus d’autres informations (voir partie optimisation)DIR
indique l’entrepôt RDF ($RDFDB)FILE
indique le fichier avec la requête SPARQL
Interrogation d’une base TDB
Désactivez l’optimiseur SPARQL de Jena/TDB:
Linux:
rm $RDFDB/*.opt; touch $RDFDB/none.opt
Windows:
del %RDFDB%\*.opt
echo none > %RDFDB%\none.opt
Exercice: Affichez et évaluez la requête tdb/q1.sparql
Linux:
tdbquery --time --loc=$RDFDB --query=tdb/q1.sparql
Windows:
tdbquery.bat --time --loc=%RDFDB% --query=tdb/q1.sparql
Exercice: Affichez et évaluez les deux requêtes SPARQL suivantes sur la base yago.tdb
et comparez les performances en utilisant l’option –time
(vous pouvez arrêter l’évaluation d’une requête avec CTL-C):
Linux:
tdbquery --time --loc=$RDFDB --query=<requête>
Windows:
tdbquery.bat --time --loc=%RDFDB% --query=<requête>
tdb/q2a.sparql
tdb/q2b.sparql
Qu’est-ce que vous observez ?
Exercice: Affichez et évaluez les deux requêtes SPARQL précédentes sur la base $RDFDB
et comparez les plans d’exécution et le temps d’exécution en utilisant les options –debug
et –time
:
Linux:
tdbquery --time --debug --loc=$RDFDB --query=<requête>
Windows:
tdbquery.bat --time --debug --loc=%RDFDB% --query=<requête>
Qu’est-ce que vous observez ?
Exercice: Affichez et évaluez les equêtes SPARQL suivantes sur la base $RDFDB
et comparez les plans d’exécution et le temps d’exécution (vous pouvez arrêter l’évaluation d’une requête avec CTL-C):
sparql/tdb/q3a.sparql
sparql/tdb/q3b.sparql
sparql/tdb/q3c.sparql
sparql/tdb/q4a.sparql
sparql/tdb/q4b.sparql
sparql/tdb/q5a.sparql
sparql/tdb/q5b.sparql
sparql/tdb/q6a.sparql
sparql/tdb/q6b.sparql
sparql/tdb/q6c.sparql
sparql/tdb/q6d.sparql
Qu’est-ce que vous observez ?
Optimisation de requêtes
TDB Optimizer est un outil d’optimisation de requêtes (https://jena.apache.org/documentation/tdb/optimizer.html) avec trois stratégies d’optimisation. La stratégie est choisie par la présence d’un fichier dans le répertoire de l’entrepôt RDF;
none.opt
ne modifie pas le plan d’origine et exécute les motifs de triplets dans l’ordre de la requêtefixed.opt
réordonne les motifs de triples par le nombre de variables dans le motifstats.opt
utilise des statistiques sur les données de l’entrepôt interrogé
Chaque filtre est appliqué immédiatement après l’instanciation de toutes les variables nécessaires.
Exercice: Remplacez le fichier $YAGO_DB/none.opt
par un fichier (vide) $RDFDB/fixed.opt
:
Linux:
rm $RDFDB/*.opt; touch $RDFDB/fixed.opt
Windows:
del %RDFDB%\*.opt
echo none > %RDFDB%\fixed.opt
Exercice: Affichez et évaluez les requêtes SPARQL précédentes et comparez les performances et les plans d’exécution. Qu’est-ce que vous observez ?
Exercice: Générez et affichez les statistiques de la base $RDFDB
:
Linux:
tdbstats --loc=$RDFDB > rdfdb.stats less rdfdb.statsWindows:
tdbstats.bat
--loc=%RDFDB% > rdfdb.stats type rdfdb.stats
Exercice: Copiez les statistiques dans la base RDF:
Linux:
rm $RDFDB/*.opt ; cp rdfdb.stats $RDFDB/stats.opt
Windows:
del %RDFDB%\*.opt
copy rdfdb.stats %RDFDB%\stats.opt
Exercice: Affichez et évaluez les requêtes SPARQL précédentes et comparez les performances et les plans d’exécution. Qu’est-ce que vous observez ?
Exercice: Donnez un exemple de requête que l’optimiseur « statistique » peut optimiser, mais pas l’optimiser « règles fixes ».
7 TP – Linked-Open-Data
7.1 Préparation
- Téléchargez et décompressez le fichier lodas_notebooks_tme7
- Le notebook utilise
SPARQLWrapper
7.2 Interrogation de DBPedia
Dans cet exercice on interroge deux endpoints SPARQL pour DBpedia et MusicBrainz.
- Exécutez et complétez le notebook lod
7.4 Silk (optionnel)
Silk Workbench est une application Web qui guide l’utilisateur tout au long du processus d’intégration différentes sources de données RDF. Silk Workbench offre les fonctionnalités suivantes:
- Il permet à l’utilisateur de gérer différents ensembles de sources de données RDF et de définir des tâches d’intégration et de résolution d’entités.
- La résolution d’entités étant généralement un processus itératif, Silk Workbench permet à l’utilisateur d’évaluer rapidement les liens générés par la spécification de lien en cours.
- Il permet à l’utilisateur de créer et de modifier un ensemble de liens existants pour évaluer la spécification de lien en cours.
Installez Silk: http://silkframework.org/download
- Attention: je n’ai pas réussi l’installation sur Windows à cause d’un problème de « maximal PATH length ».
Lancez Silk Workbench et ouvrez la page http://localhost:9000:
silk-workbench
Exemple:
- Chargez l’exemple (onglet Start)
- Ouvrez le projet
movies
(double-click surmovies
. - Examinez la tache linking
movies
- les entités reliés (bouton Properties)
- la règle de matching appliquée (bouton Open)
- Affichez les liens
owl:sameAs
générés par les règles (onglets Generate Links/Start) - Affichez les liens référence (onglet Reference Links) positifs, negatifs et non-étiquetés (Positive/Negative/Unlabeled).
- Triez les règles par leurs scores (ascendant)
- Examinez le détails des liens (bouton Expand All) par rapport aux scores obtenus.
- Augmentez et diminuez les bornes (Treshold) dans
compareTitle
etcompareReleaseDates
et vérifiez les nouveaux liens générés ou effacés.
Exercice: Nettoyage du graphe Rois
:
- Créez un nouveau projet
rois
(onglet Workspace) - Chargez la ressource
data/roisdbpedia.nt
(onglet Resources) - Ajoutez le prefix
asws:http://www.asws.com/rois#
(bouton Prefixes) - Créez un nouveau dataset
rois
à partir de la ressource chargée (onglet Dataset / RDF Dump) - Examinez le contenu du dataset
rois
: Bouton Open et Onglet Sparql - Ajoutez le type:
asws:Personne
etowl:Thing
à toutes les ressources du datasetrois
(onglet Transform):- Ajoutez une tache
add_personne
(avec le datasetrois
comme source et output) - Ouvrez la tache
add_personne
- Onglets Add Type Mapping, Evaluate et Execute
- Ajoutez une tache
- Définissez et testez une règle de matching qui créé des liens
owl:sameAs
entre toutes les ressources désignant la même entité.