Benjamin cogrel, atelier Ontologies et Ontop
-
Upload
umr-7324-citeres-laboratoire-archeologie-et-territoires-tours -
Category
Data & Analytics
-
view
5.379 -
download
0
Transcript of Benjamin cogrel, atelier Ontologies et Ontop
Requêter une base de données à unniveau conceptuel avec Ontop
Benjamin CogrelUniversité Libre de Bozen-Bolzano, Italie
Free University of Bozen-Bolzano
Journées Ontologie en Sciences Humaines et SocialesTours, le 8 novembre 2015
1 / 35
Exemple issu des sciences du vivant
Source(s): bases de données décrivant des cancersOntologie: Le vocabulaire du domaine (Patient, Cancer,LungCancer, etc)
2 / 35
Pré-requis
Java 7 ou 8Contenu en ligne :https://github.com/ontop/ontop-examples/tree/master/tours-tutoriel-2015
3 / 35
Source de données
Table : tbl_patient
PatientId Name Type Stage1 Mary false 42 John true 7
Type:faux : Non-Small Cell Lung Cancer (NSCLC)vrai : Small Cell Lung Cancer (SCLC)
Stage(niveau d’avancement):1-6 : NSCLC: I,II,III,IIIa,IIIb,IV7-8 : SCLC: Limited, Extensive
4 / 35
Création de la base de données H2
H2 est une base de données relationnelle écrite en JavaDécompresser le paquet téléchargéLancer les scripts :
Ouvrir un terminal (Mac Terminal.app, Windows exécutercmd.exe)Aller dans le répertoire bin de H2 (par exemple, cd h2/bin)
sh h2.sh (Mac/Linux - Si nécessaire, “chmod u+x h2.sh ”)h2w.bat (Windows)
5 / 35
Interface H2
localhost : addresse de la base de donnéeshelloworld : nom de la base de données
6 / 35
Création de la tableUtiliser les scripts create.sql et insert.sql
CREATE TABLE "tbl_patient" (patientid INT NOT NULL PRIMARY KEY,name VARCHAR(40),type BOOLEAN,stage TINYINT)
Ajout de données :
INSERT INTO "tbl_patient"(patientid,name,type,stage)VALUES(1,'Mary',false,4),(2,'John',true,7);
8 / 35
Requête SQL
Patients ayant un cancer du poumon non à petites cellules auniveau IIIa ou au-delà (select.sql)
SELECT patientidFROM "tbl_patient"WHERETYPE = false AND stage >= 4
9 / 35
Ontologies avec Protégé
Aller dans le répertoire protégé-ontop. Il y a un paquet Protégé5 contenant le plugin Ontop.Lancer Protégé depuis la console à partir des commandesrun.bat ou run.sh scripts. Autrement dit, exécuter :cd Protege_5/; run.sh
10 / 35
Configuration du pilote JDBC
Ouvrir “Preferences”, “JDBC Drivers” et ajouter laconfiguration pour H2
Description: h2Class Name: org.h2.DriverDriver File (jar): /path/to/h2/bin/h2-1.3.176.jar
11 / 35
L'ontologie : création de classes et depropriétés
Ajouter la classe Patient :
(Voir PatientOnto.owl)12 / 35
L'ontologie : création de classes et depropriétés
Ajouter ces relations :
(Voir PatientOnto.owl)
12 / 35
L'ontologie : création de classes et depropriétés
Ajouter ces attributs :
(Voir PatientOnto.owl)
12 / 35
Mappings
On a désormais le vocabulaire et la base de données, on vamaintenant les lier.Les mappings définissent des triplets (sujet, propriété, objet) àpartir de requêtes SQL.
13 / 35
Mappings
p.Id Name Type Stage1 Mary false 2
(:db1/{p.id},type, :Patient) ← Select p.id From tbl_patient(:db1/{p.id},:hasName, {name}) ← Select p.id,name From tbl_patient(:db1/{p.id},:hasNeoplasm, :db1/neoplasm/{p.id}) ←
Select p.id From tbl_patient(:db1/neoplasm/{p.id},:hasStage, :stage-IIIa) ←
Select p.id From tbl_patient where stage=4
14 / 35
Mappings
p.Id Name Type Stage1 Mary false 2
(:db1/{p.id},type, :Patient) ← Select p.id From tbl_patient(:db1/{p.id},:hasName, {name}) ← Select p.id,name From tbl_patient(:db1/{p.id},:hasNeoplasm, :db1/neoplasm/{p.id}) ←
Select p.id From tbl_patient(:db1/neoplasm/{p.id},:hasStage, :stage-IIIa) ←
Select p.id From tbl_patient where stage=4
14 / 35
Les mappings
En utilisant l’onglet Ontop Mapping, définir les paramètres deconnexion à notre base de donnéesÉtapes :
1. Basculer vers l’onglet Ontop Mapping2. Ajouter une nouvelle source de données (la nommer PatientDB)3. Définir les paramètres de connexion suivants :
Connection URL: jdbc:h2:tcp://localhost/helloworldUsername: saPassword: (leave empty)Driver class: org.h2.Driver (à choisir dans le menu déroulant)
4. Tester la connexion en cliquant sur le bouton “TestConnection”
15 / 35
Mappings
Basculer sur l’onglet “Mapping Manager” dans l’onglet ontopmappings.Sélectionner la source de donnéeCliquer sur Create:
target: :db1/{patientid} a :Patient .
source: SELECT patientid FROM "tbl_patient"
target: :db1/{patientid} :hasName {name} .
source: Select patientid,name FROM "tbl_patient"
target: :db1/{patientid} :hasNeoplasm :db1/neoplasm/{patientid}.
source: SELECT patientid FROM "tbl_patient"
target: :db1/neoplasm/{patientid} :hasStage :stage-IIIa .
source: SELECT patientid FROM "tbl_patient" where stage=4
17 / 35
Mappings
Nous allons classifier la tumeur à partir de notre connaissancede la base de données.Nous savons que “false” dans la table patient indique un “NonSmall Cell Lung Cancer”, donc nous classifions les tumeurscomme étant des :NSCLC.
18 / 35
Graphe virtuel
Données :
Le vocabulaire est centré sur le domaine et indépendant de labase de données.Plus besoin de se soucier des codes des types et des étatsd’avancement.Ce vocabulaire rendra l’intégration de nouvelles sources plusfacile.Nos sources de données sont désormais documentées !
19 / 35
Accès à la base de données
Besoin d’information : L’identifiant et le nom des patientsayant une tumeur au niveau IIIa.Écrire la requête SPARQL suivante :
SELECT ?p ?name WHERE{?p rdf:type :Patient .?p :hasName ?name .?p :hasNeoplasm ?tumor .?tumor :hasStage :stage-IIIa .}
Cliquer sur execute
22 / 35
Inférence
Requête : toutes les instances de la classe Neoplasm:SELECT ?x WHERE { ?x a :Neoplasm . }
23 / 35
Inférence
Requête : toutes les instances de la classe Neoplasm:SELECT ?x WHERE { ?x a :Neoplasm . }
Traduction étape par étape (en théorie) :SELECT ?x WHERE { { ?x a :Neoplasm. }
UNION{ ?x a :BenignNeoplasm. }UNION{ ?x a :MalignantNeoplasm. }UNION...{ ?x rdf:type :NSCLC). }UNION{ ?x rdf:type :SCLC). } }
23 / 35
Inférence
Requête : toutes les instances de la classe Neoplasm:SELECT ?x WHERE { ?x a :Neoplasm . }
Traduction étape par étape (en théorie) :
SELECT ?x WHERE { {?x a :Neoplasm.}UNION{ ?x a :BenignNeoplasm. }UNION{ ?x a :MalignantNeoplasm . }UNION...{ ?x rdf:type :NSCLC). }UNION{ ?x rdf:type :SCLC). } }
23 / 35
Inférence
Requête : toutes les instances de la classe Neoplasm:SELECT ?x WHERE { ?x a :Neoplasm . }
Traduction étape par étape (en théorie) :
SELECT Concat(:db1/neoplasm/, TBL.PATIENT.id) AS ?xFROM TBL.PATIENT
23 / 35
Cohérence des données
Contraintes imposées par l’ontologie
Sources d’incohérence (violation)MappingsDonnées de la base
Disjonction entre classes ou propriétésL’intersection entre deux classes/propriétés doit êtrevide.Ex : les classes Patient et Employee peuvent êtredisjointes (choix de modélisation discutable)
24 / 35
Intégration de donnéesT_Name
pid name1 Anna2 Mike
Information distribuée dans plusieurs tablesPas de fédération SQL pour le moment
T_NSCLCpid hosp stage1 X two2 Y one
Information codée différemment (texte aulieu d’un nombre)
T_SCLCpid hosp stage1 XXX2 YYY
29 / 35
Nouvelles tables
Script create_others.sql
CREATE TABLE T_Name (pid INT NOT NULL PRIMARY KEY,name VARCHAR(40));CREATE TABLE T_NSCLC (pid INT NOT NULL PRIMARY KEY,hosp VARCHAR(40),stage VARCHAR(40));CREATE TABLE T_SCLC (pid INT NOT NULL PRIMARY KEY,hosp VARCHAR(40),stage VARCHAR(40));ALTER TABLE T_NSCLCADD FOREIGN KEY (pid) REFERENCES ID T_Name(pid);ALTER TABLE T_SCLCADD FOREIGN KEY (pid) REFERENCES ID T_Name(pid);
30 / 35
Nouvelles tables
Script insert_others.sql
INSERT INTO T_Name(pid,name) VALUES(1,’Anna’),(2,’Mike’);INSERT INTO T_NSCLC(pid,hosp,stage) VALUES(1,’X’, ’two’),(2,’Y’, ’one’);INSERT INTO T_SCLC(pid,hosp) VALUES(1,’Z’),(2,’X’);
31 / 35
Nouveaux mappings
Mapping map-patientCible : :db2/{pid} a :Patient .Source : SELECT pid FROM T_Name
Exercice : compléter les autres mappings.
32 / 35
Fédération SQL avec Exareme (extra)
http://www.exareme.org
Développé à l’Université d’AthènesModule de traitement de requête SQL de la plateforme OptiqueLogiciel libre
33 / 35
Fédération SQL avec Exareme (extra)
Étapes :Installer Exareme
Pré-requis : Python 2.7 et APSW.Construire l’URL JDBC pour Ontop, qui est composée de :
1 fragment pour le serveur où Exareme est installé1 fragment pour chaque base de données DB
34 / 35
Fédération SQL avec Exareme (extra)
Étapes :Installer Exareme
Pré-requis : Python 2.7 et APSW.Construire l’URL JDBC pour Ontop, qui est composée de :
1 fragment pour le serveur où Exareme est installé1 fragment pour chaque base de données DB
jdbc:fedadp:http://10.7.20.80:9090/tmp-fedDB-data1-next-jdbc:postgresql://10.7.20.80/exareme1-next-org.postgresql.Driver-next-postgres-next-postgres-next-public-fedDB-data2-next-jdbc:postgresql://10.7.20.39/exareme2-next-org.postgresql.Driver-next-postgres-next-postgres-next-public
34 / 35
Fédération SQL avec Exareme (extra)
Étapes :Installer Exareme
Pré-requis : Python 2.7 et APSW.Construire l’URL JDBC pour Ontop, qui est composée de :
1 fragment pour le serveur où Exareme est installé1 fragment pour chaque base de données DB
Vous pouvez ensuite écrire vos mappings et requêter commed’ordinaire.
34 / 35
Quelques liens
http://ontop.inf.unibz.ithttp://www.optique-project.euhttps://twitter.com/ontop4obda