M2 DAC – MU5IN860 LODAS – Linked Open Data
Bernd AMANN
Les exercices suivantes sont destiné à être effectués en salle TP de la PPTI.
2020
1 TP – XPath
1.1 Préparation (en salle TP)
Vous pouvez copiez/coller le texte sur un fond coloré dans un terminal Linux pour l’exécuter :
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Créer un répertoire
$HOME/asws
:mkdir $HOME/asws
- On suppose que vous êtes toujours dans le répertoire
$HOME/asws
:cd $HOME/asws
- Décompressez le fichier
$ASWS_HOME/public/data.tar.gz
tar xzf $ASWS_HOME/public/data.tar.gz
- Décompressez le fichier
$ASWS_HOME/xpath.tar.gz
:tar xzf $ASWS_HOME/public/xpath.tar.gz
- La commande
xqilla
permet d’exécuter des expressions XPath et XQuery stockés dans des fichiers texte:xqilla -i doc.xml query.xp
évalue l’expression XPath dans le fichier query.xp sur le fichier doc.xml
- Documentation XQilla: http://xqilla.sourceforge.net/Documentation
1.2 XPath
Exercice: Évaluez les requêtes dans le répertoire xquery
sur le document data/roisdefrance.xml
expliquez le résultat.
Exercice: Ecrivez les requêtes suivantes en créant un fichier par requête:
- les noms des fils de Catherine de Medicis;
<nom>Francois II</nom> <nom>Charles IX</nom> <nom>Henry III</nom>
- le nom de l’épouse de Henri II;
<nom>Catherine de Medicis</nom>
- le nom de l’époux de Mary Stuart;
<nom>Francois II</nom>
- le nom de l’époux d’Elisabeth d’Autriche;
<nom>Charles IX</nom>
- le nom de la belle mère de Mary Stuart (de la personne qui a un fils dont l’épouse s’appelle Mary Stuart);
<nom>Catherine de Medicis</nom>
- les noms des frères de Francois II;
<nom>Charles IX</nom> <nom>Henry III</nom>
- les rois sans épouses;
<nom>Francois I</nom> <nom>Henry III</nom>
- les noms des rois et reines avec au moins un fils;
<nom>Francois I</nom> <nom>Catherine de Medicis</nom>
- les noms des rois et reines sans fils;
<nom>Henri II</nom> <nom>Francois II</nom> <nom>Mary Stuart</nom> <nom>Charles IX</nom> <nom>Elisabeth d Autriche</nom> <nom>Henry III</nom>
Exercice: (optionnel) Essayez de réécrire les requêtes précédentes en remplaçant le document data/roisdefrance.xml
par le document data/roisdefranceplat.xml
1.3 XQuery (optionnel)
Exercice: répondez aux questions précédentes en utilisant XQuery avec XBase
2 TP – Manipulation RDF avec Jena
2.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez le fichier
$ASWS_HOME/public/data.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/data.tar.gz
2.2 Transformation RDF
Les commandes rapper
et riot
permettent de transformer des fichiers RDF d’un format à un autre:
riot -help
- N3: format N3/Turtle (extension
.ttl
) - N-TRIPLE: format triplets (extension
.nt
) - RDF/XML: format XML étendu (extension
.rdf
) - RDF/XML-ABBREV: format XML étendu (extension
.xml
)
Exemples:
riot -out=N3 fichier.xml
rapper -help
formats input:
- rdfxml RDF/XML (default)
- ntriples N-Triples
- turtle Turtle Terse RDF Triple Language
- trig TriG – Turtle with Named Graphs
- rss-tag-soup RSS Tag Soup
- grddl Gleaning Resource Descriptions from Dialects of Languages
- guess Pick the parser to use using content type and URI
- rdfa RDF/A via librdfa
- json RDF/JSON (either Triples or Resource-Centric)
- nquads N-Quads
formats output:
- ntriples N-Triples (default)
- turtle Turtle Terse RDF Triple Language
- rdfxml-xmp RDF/XML (XMP Profile)
- rdfxml-abbrev RDF/XML (Abbreviated)
- rdfxml RDF/XML
- rss-1.0 RSS 1.0
- atom Atom 1.0
- dot GraphViz DOT format
- json-triples RDF/JSON Triples
- json RDF/JSON Resource-Centric
- html HTML Table
- nquads N-Quads
Exemples:
rapper -i rdfxml -o turtle data/rois.xml > data/rois.ttl
Cette commande permet en particulier de transformer un fichier RDF en graphe dans le format dot
pour la visualisation (voir section ci-dessous).
- Transformation d’un graphe RDF (Turtle) en format SVG:
mkdir $HOME/asws/gendata cd $HOME/asws rapper -i rdfxml -o dot data/rois.xml | dot -Tsvg > gendata/rois.svg
- Visualisation avec firefox :
firefox gendata/rois.svg
2.3 Exercices
Exercice: Transformez les deux documents data/roisgraphe.xml
et data/roisarbre.xml
dans différents formats et comparez les documents générés dans un répertoire gendata
:
mkdir $HOME/asws/gendata
cd $HOME/asws
rapper -o turtle data/roisgraphe.xml > gendata/roisgraphe.ttl
less gendata/roisgraphe.ttl
rapper -o turtle data/roisarbre.xml > gendata/roisarbre.ttl
less gendata/roisarbre.ttl
Exercice: Est-ce que les deux documents représentent le même graphe RDF ?
Exercice: Transformez les trois documents data/rois.rdf
, data/rois2.rdf
et data/rois3.rdf
en format N3/Turtle et en N-TRIPLE et comparez les résultats.
Exercice: Combien de noeuds blancs il y a dans chacun des trois graphes ?
Exercice: Affichez les graphes data/roisgraphe.xml
et data/roisarbre.xml
2.4 Stockage RDF
Jena fournit un système de stockage pour des données RDF appelé Jena TDB1. Les commandes disponibles sont:
- Créer (si nécessaire) un base de données et charger un fichier (de préférence en format Turtle):
tdbloader --loc=<db> <fichier>
- Afficher le contenu d’une base de données:
tdbdump --loc=<db>
- Afficher des statistiques (voir TP optimisation, section [sec:tdbstats]):
tdbstats --loc=<db>
- Effacer la base de données:
rm -rf <db>
Exercice: Créez une base RDF db/rois.tdb
et chargez les graphes data/rois.rdf
et data/rois_schema.rdfs
:
mkdir $HOME/asws/db
mkdir $HOME/asws/gendata
cd $HOME/asws
rapper -o turtle data/rois.rdf > gendata/rois.ttl
rapper -o turtle data/rois_schema.rdfs > gendata/rois_schema.ttl
tdbloader --loc=db/rois.tdb gendata/rois.ttl gendata/rois_schema.ttl
Exercice: Afficher le contenu et les statistiques du (des) graphe(s) RDF dans db/rois.tdb
. Combien de triples, de reines (ressources de type Reine
) et de rois (ressources de type Roi
) sont dans la base ?
Exercice: Rechargez les deux fichiers data/rois.rdf
et data/rois_schema.rdfs
une deuxième fois et affichez les statistiques. Qu’est-ce que vous observez ?
Exercice: Créez une base RDF db/rois2.tdb
et chargez le graphes data/rois2.rdf
Exercice: Affichez le contenu et les statistiques de db/rois2.tdb
. Combien de noeuds blancs il y a dans db/rois2.tdb
?
Exercice: Rechargez le fichier data/rois2.rdf
une deuxième fois et affichez les statistiques. Pourquoi le nombre de triplets augmente à chaque fois qu’on charge le fichier à nouveau?
2.5 Inférence RDF/S
La commande infer
permet de matérialiser la transitivité des propriétés subClassOf
et subPropertyOf
dans un schéma RDFS:
infer --rdfs=<schéma> <graphe>
Exercice: Générer un fichier gendata/rois_infer.nt
(triplet) qui matérialise les propriétés subClassOf
et subPropertyOf
définies dans le schéma data/rois_schema.ttl
dans le graphe data/rois.ttl
Exercice: Visualisez le graphe généré.
rapper -i ntriples -o dot gendata/rois_infer.nt | dot -Tsvg > gendata/rois_infer.svg
firefox gendata/rois_infer.svg
Exercice: Chargez le nouveau graphe gendata/rois_infer.nt
et le schéma gendata/rois_schema.ttl
dans la base db/rois_infer.tdb
.
Exercice: Analysez les statistiques (nombre de classes, propriétés, instances, …).
Exercice: Visualisez le contenu de la base db/rois_infer.tbd
.
tdbdump --loc=db/rois_infer.tdb > gendata/rois_infer_dump.nt
rapper -i ntriples -o dot gendata/rois_dump.nt | dot -Tsvg > gendata/rois_infer_dump.svg
firefox gendata/rois_infer_dump.svg
3 TP – SPARQL
3.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez le fichier
$ASWS_HOME/public/data.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/data.tar.gz
- Décompressez le fichier
$ASWS_HOME/public/queries.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/sparql.tar.gz
3.2 Interrogation SPARQL
La commande sparql
permet d’évaluer des requêtes SPARQL:
sparql --data=<fichier.rdf> --query=<fichier.sparql>
<fichier.rdf>
indique le fichier interrogé<fichier.sparql>
contient la requête SPARQL à exécuter.
3.3 Interrogation d’un seul graphe
Exercice: Affichez et évaluez la requête sparql/file/rois/q1.sparql
sur le document data/roisdbpedia.ttl
.
cat sparql/file/rois/q1.sparql
sparql --data=data/roisdbpedia.ttl --query=sparql/file/rois/q1.sparql
Exercice: Définissez et évaluez les requêtes SPARQL suivantes sur le graphe RDF data/roisdbpedia.ttl
:
- Les noms des rois avec leur date de naissance.
- 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).
- 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 WHERE { { ?a asws:nom ?n } MINUS { ?b asws:fils ?f } }
Exercice: Interrogation de schéma RDFS: définissez et évaluez les requêtes SPARQL suivantes sur le schéma RDFS data/rois_schema.ttl
:
- Toutes les propriétés du schéma.
- Toutes les classes et leurs sous-classes.
3.4 Interrogation de plusieurs graphes
Exercice: Expliquez la réponse de la requête sparql/file/rois/q1a.sparql
.
cat sparql/file/rois/q1a.sparql
sparql --base=$HOME/asws/ --query=sparql/file/rois/q1a.sparql
Exercice: Expliquez la réponse de la requête sparql/file/rois/q1anamed.sparql
.
cat sparql/file/rois/q1a.sparql
sparql --base=$HOME/asws/ --query=sparql/file/rois/q1anamed.sparql
Exercice: Définissez et évaluez les requêtes SPARQL suivantes sur le graphe RDF data/roisdbpedia.ttl
et le schéma RDFS data/rois_schema.ttl
:
- 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: Définissez et évaluez les requêtes SPARQL suivantes sur les graphes RDF data/roisdbpedia.ttl
et data/succdbpedia.ttl
:
- 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.
- 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 de reines par dynastie.
- Le nombre de descendants et d’ancêtres par roi ou reine.
4 TP – Règles RDF
4.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez le fichier
$ASWS_HOME/public/data.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/data.tar.gz
- Décompressez le fichier
$ASWS_HOME/public/rules.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/rules.tar.gz
4.2 Règles d’inférence
La commande java jena.RuleMap
permet d’appliquer des règles d’inférence à des graphes RDF
java jena.RuleMap -il <inlang> -ol <outlang> [-d>] rulefile infile
<inlang>
indique le format d’entrée (N3 par défaut)<outlang>
indique le format de sortie (N3 par défaut)-d
indique que la commande doit uniquement retourner les données déduites.
Exercice: Appliquez les règles rules/rois.rules
au document data/rois6.ttl
et vérifiez le résultat obtenu.
java jena.RuleMap -ol N3 rules/rois.rules data/rois6.ttl \
> gendata/rois6_rules.ttl
visualize turtle gendata/rois6_rules.ttl ./gendata/rois6_rules.svg
Exercice: Copiez le fichier rules/rois.rules
dans un nouveau fichier rules/rois2.rules
Exercice: Ajoutez des règles suivantes au fichier: rules/rois2.rules
:
- si x est le
:conjoint
de y et x est une:Femme
alors x est l’:épouse
de y. - [r2] la propriété
:époux
est l’inverse de la propriété:épouse
. - si x est l’
:épouse
de y alors x est une:Femme
et y est un:Homme
. - un
:Homme
qui est un:enfant
de x est un:fils
de x (propriété) - une
:Femme
qui est un:enfant
de x est une:fille
de x (propriété) - la
:fille
d’un:Roi
ou d’une:Reine
est une:Princesse
. - le
:fils
d’un:Roi
ou d’une:Reine
est un:Prince
. - un
:enfant
d’un:enfant
de x est un:petit_enfant
de x (propriété) - si x est l’
:enfant
de y et y est un:Homme
alors y est le:père
de x. - si x est l’
:enfant
de y et y est une:Femme
alors y est le:mère
de x.
Exercice: Appliquez les règles rules/rois2.rules
au document data/rois6.ttl
et vérifiez le résultat dans gendata/rois6_rules2.ttl
:
java jena.RuleMap -ol N3 rules/rois2.rules data/rois6.ttl \
> gendata/rois6_rules2.ttl
- Pourquoi Catherine de Medicis n’est pas reconnue comme épouse de Henri III?
Exercice: Créez un document triplets gendata/rois6_infer.nt
qui matérialise dans le document data/rois6ttl
les propriétés rdfs:subClassOf
et rdfs:subPropertyOf
du schéma RDFS data/rois_schema.ttl
en utilisant la commande infer
(voir TP 2).
infer --rdfs=data/rois_schema.ttl data/rois6.ttl \
> gendata/rois6_infer.nt
Exercice: Concaténez les deux fichiers gendata/rois_schema.ttl
et gendata/rois6_infer.nt
pour créer un seul fichier Turtle gendata/rois6_all.ttl
en utilisant la commande riot
(section [sec:transformation]:
Exercice: Appliquez à nouveaux les règles rules/rois2.rules
à nouveau au document gendata/rois6_all.ttl
pour générer un nouveau document gendata/rois6_all_rules2.ttl
. Qu’est-ce que vous observez et donnez une explication ?
java jena.RuleMap -ol N3 rules/rois2.rules gendata/rois6_all.ttl \
> gendata/rois6_all_rules2.ttl
Exercice: Ajoutez une règle qui définit la relation de descendant et appliquez à nouveaux les règles rules/rois2.rules
.
Exercice: On observe que certaines propriétés comme :enfant
, :petit_enfant
, :fille
, :fils
, :époux
, :epouse
, :conjoint
ont comme valeurs des littéraux (le nom des personnes au lieu des ressources). Écrivez des règles rules4.rules
qui replacent ces littéraux par des noeuds blancs qui ont une propriété :nom
avec le littéral comme valeur. Appliquez ces règles au document ./gendata/rois6_all.ttl
et vérifiez le résultat. Remarque: utilisez les fonctions isLiteral
et makeSkolem
définies dans https://jena.apache.org/documentation/inference/#RULEbuiltins.
Exercice: Ajoutez à toutes les ressources qui ont une propriété :enfant
, :fille
, :fils
, :époux
, :epouse
, :conjoint
, :père
, :mère
ou :descendant
une propriété :nom
qui contient l’identifiant local (sans préfixe) de la ressource comme valeur. Il faut utiliser les fonctions strConcat
, regex
et noValue
(pour vérifier s’ils ont déjà un nom).
Exercice: Ajoutez une règle qui remplace tous les caractère ’_’ par un espace ’ ’ dans les noms de personnes (utilisez la fonction regex et strConcat).
Exercice: Écrivez des règles rules3.rules
qui enlèvent
- les triplets (apb) s’il existe une sous-propriété q de p et un triplet (apb). Par exemple, on enlève les propriétés
:enfant
entre deux personnes qui sont déjà reliées par la propriété:fils
ou:fille
(utilisez la fonctiondrop
). - les triplets (ardf : typex) s’il existe une sous-classe y de x et un triplet (ardf : typey). Par exemple, on enlève les (ardf : typeFemme) pour les reines (utilisez la fonction
drop
).
Appliquez ces règles au graphe ./gendata/rois6_all.ttl
:
{}
java jena.RuleMap -ol N3 rules/rois3.rules gendata/rois6_all_rules2.ttl \
> gendata/rois6_all_rules2_3.ttl
5 TP – OWL/Jena: Interrogation sémantique
5.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez les fichiers
$ASWS_HOME/public/owl.tar.gz
etcd $HOME/asws tar xzf $ASWS_HOME/public/owl.tar.gz
- Compilez le programme
roisOwl.java
:cd owl mkdir gendata cp data/* gendata javac owlsparql.java
- 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)
5.2 Exercice
Exercice: Appliquez le programme owlsparql
pour comprendre son fonctionnement:
- afficher le contenu du document
data/monarques_data.ttl
:java owlsparql -d data/monarques_data.ttl
- interroger document
data/monarques_data.ttl
avec la requêtesparql/personnes.sparql
.java owlsparql -d data/monarques_data.ttl -q sparql/personnes.sparql -f nt
Pourquoi la réponse est vide ?
- interroger document
data/monarques_data.ttl
avec la requêtesparql/personnes.sparql
après l’application du fichier OWLdata/monarques_onto.ttl
.java owlsparql -d data/monarques_data.ttl -o data/monarques_onto.ttl \ -q sparql/personnes.sparql
Pourquoi le réponse n’est plus vide?
Exercice: Exécutez les commandes ci-dessous et expliquez ce qui se passe:
- évaluez les deux requêtes suivante:
java owlsparql -d data/monarques_data.ttl -o gendata/monarques_onto.ttl \ -q sparql/monarques_sans.sparql java owlsparql -d data/monarques_data.ttl -o gendata/monarques_onto.ttl \ -q sparql/monarques.sparql
Pourquoi les deux requêtes ne retournent pas le même résultat ?
- modifiez
gendata/monarques_onto.ttl
en ajoutant l’expression OWL suivante::Monarque owl:unionOf (:MonarqueAnglais :MonarqueFrancais ) .
- Réévaluez les requêtes précédentes. Pourquoi le résultat est le même maintenant ?
Exercice: Évaluez d’abord la requête <requete>_sans.sparql
et modifiez ensuite le fichier gendata/monarques_onto.ttl
pour que la requête <requete>.sparql
retourne le même résultat.
sparql/monarques.sparql
sparql/enfants.sparql
sparql/descendants.sparql
sparql/ancetres.sparql
sparql/successeurs.sparql
sparql/dynastiesfrancaises.sparql
sparql/dynastiesanglaises.sparql
sparql/avecsuccesseur.sparql
sparql/rois.sparql
sparql/reines.sparql
sparql/enfantsroyal.sparql
sparql/princesses.sparql
sparql/princes.sparql
Exercice: Ajoutez les contraintes suivante et vérifiez les avec la commande suivante (testez chaque contrainte individuellement pour gagner du temps):
{}
java owlsparql -d data/monarques_data.ttl -o gendata/monarques_onto.ttl
- une personne ne peut pas être roi et reine en même temps.
- une personne ne peut pas être un monarque français et un monarque anglais en même temps.
- les dynasties anglaises et françaises sont séparées.
- un monarque ne peut pas avoir deux successeurs.
Exercice: Traduisez les contraintes ci-dessus en requêtes SPARQL (ask) qui retournent FALSE
quand la contrainte est satisfaite et TRUE
sinon.
Exercice: Exécutez la requête sparql/ancetres.sparql
:
java owlsparql -d data/monarques_data.ttl -o gendata/monarques_onto.ttl \
-q sparql/ancetres.sparql
Qu’est-ce que vous observez ?
6 TP – SPARQL et Optimisation / Yago / DBpedia
6.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez le fichier
$ASWS_HOME/public/sparql.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/sparql.tar.gz
- Copiez la base
yago.tdb
:export YAGO_DB=/tmp/yago.tdb tdbloader --loc=$YAGO_DB $ASWS_HOME/yago/yagoFacts.ttl tdbloader --loc=$YAGO_DB $ASWS_HOME/yago/yagoSimpleTypes.ttl tdbloader --loc=$YAGO_DB $ASWS_HOME/yago/yagoSimpleTaxonomy.ttl tdbloader --loc=$YAGO_DB $ASWS_HOME/yago/yago_classes.ttl tdbloader --loc=$YAGO_DB $ASWS_HOME/yago/yago_subclasses.ttl touch $YAGO_DB/none.opt
6.2 Commandes
Génération de statistiques sur une base TDB
tdbstats --loc=DIR [--graph=URI]
DIR
indique l’entrepôt RDF ($YAGO_DB)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 ($YAGO_DB)FILE
indique le fichier avec la requête SPARQL
6.3 Interrogation d’une base TDB
Exercice: Affichez et évaluez la requête sparql/tdb/yago/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):
tdbquery --time --loc=$YAGO_DB --query=<requête>
sparql/tdb/yago/q2a.sparql
sparql/tdb/yago/q2b.sparql
Qu’est-ce que vous observez ?
Exercice: Affichez et évaluez les deux requêtes SPARQL précédentes sur la base yago.tdb
et comparez les plans d’exécution et le temps d’exécution en utilisant les options –debug
et –time
:
tdbquery --time --debug --loc=$YAGO_DB --query=<requête>
Qu’est-ce que vous observez ?
Exercice: Affichez et évaluez les trois requêtes SPARQL suivantes sur la base yago.tdb
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/yago/q3a.sparql
sparql/tdb/yago/q3b.sparql
sparql/tdb/yago/q3c.sparql
sparql/tdb/yago/q4a.sparql
sparql/tdb/yago/q4b.sparql
sparql/tdb/yago/q5a.sparql
sparql/tdb/yago/q5b.sparql
Qu’est-ce que vous observez ?
6.4 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) $YAGO_DB/fixed.opt
:
rm $YAGO_DB/*.opt
touch $YAGO_DB/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 /tmp/yago.tdb
:
tdbstats --loc=$YAGO_DB > yago.stats
less yago.stats
Exercice: Copiez les statistiques dans la base RDF:
rm $YAGO_DB/*.opt
cp yago.stats $YAGO_DB/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 ?
7 TP – Linked-Open-Data
7.1 Préparation
- Mise-à-jour de l’environnement Linux:
source /Infos/bd/dm/asws/public/config
- Décompressez les fichiers
$ASWS_HOME/public/sparql.tar.gz
et$ASWS_HOME/public/lod.tar.gz
cd $HOME/asws tar xzf $ASWS_HOME/public/sparql.tar.gz tar xzf $ASWS_HOME/public/lod.tar.gz
- Installez la librairie
rdflib
:cd pip install --user --upgrade pip pip install --user rdflib pip install --user SPARQLWrapper cd $HOME/asws
- Python
rdflib
:SPARQLWrapper
- 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.
7.2 Interrogation de DBPedia
Dans cet exercice on interroge DBpedia en utilisant l’interface DBpediaLive : http://live.dbpedia.org/
Exercice: Connectez vous à la page http://live.dbpedia.org/sparql et évaluez les requêtes sparql/dbpedia/q1.sparql
et sparql/dbpedia/q2.sparql
(en utilisant le format HTML pour afficher le résultat).
Exercice: Définissez et évaluez les requêtes suivantes (affichez le résultat en format HTML):
- Tous les endroits habités en France (type
dbpedia-ont:PopulatedPlace
, propriétédbpedia-ont:country
, paysdbpedia:France
) - Combien d’endroits habités il y a en France (enregistrés dans DBPedia) ? (37696)
- Toutes les propriétés de la ville que vous habitez (si elle est dans DBPedia).
- Toutes les capitales de l’Europe (ressources de type
yago:CapitalsInEurope
) - Toutes les capitales de l’Europe avec leur pays si présent (propriété
dbpedia-ont:country
) et leur population si présent (propriétédbpprop:mayor
) et leur maire si présent (propriétédbpprop:population
).
7.3 Linked-Open-Data (LOD)
Dans cette exercice nous allons interroger deux portails (endpoints) SPARQL:
- Dbpedia: http://dbpedia.org/
- Interface de navigation: http://dbpedia.org/resource/Lars_Von_Trier
- Sparql endpoint:: http://live.dbpedia.org/sparql
- Linked Movie Database:
- Interface de navigation: http://data.linkedmdb.org
- Sparql endpoint: http://data.linkedmdb.org/sparql
- Vous trouvez d’autres SPARQL endpoints à interroger ici :
Exercice: Exécutez les trois programmes suivant et étudiez le code exécuté:
python lod/local_directors.py
python lod/dbpedia_lars_von_trier.py
python lod/dbpedia_lars_von_trier_graph.py
python lod/dbpedia_director.py 'Lars T'
La dernière commande écrit le résultat dans des fichiers (voir code).
Exercice: Écrivez les programmes suivants qui interrogent dbpedia pour afficher :
- Tous les films des metteurs en scène dans le document
lod/directors.ttl
avec les noms de leurs acteurs. - Tous les films d’un metteur en scène (le nom est donné comme paramètre du programme).
- Les metteurs en scène qui apparaissent dans leurs propres films comme acteurs: nom du metteur en scène, titre du film
- Tous les films dans lesquels un metteur en scène apparaît: titre du film, nom du metteur en scène du film, nom du metteur en scène qui apparaît
7.4 Silk (optionnel)
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é.