Top Banner
Requêter une base de données à un niveau conceptuel avec Ontop Benjamin Cogrel Université Libre de Bozen-Bolzano, Italie Free University of Bozen-Bolzano Journées Ontologie en Sciences Humaines et Sociales Tours, le 8 novembre 2015 1 / 35
44

Benjamin cogrel, atelier Ontologies et Ontop

Jan 16, 2017

Download

Data & Analytics

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

Page 2: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 3: Benjamin cogrel, atelier Ontologies et Ontop

Pré-requis

Java 7 ou 8Contenu en ligne :https://github.com/ontop/ontop-examples/tree/master/tours-tutoriel-2015

3 / 35

Page 4: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 5: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 6: Benjamin cogrel, atelier Ontologies et Ontop

Interface H2

localhost : addresse de la base de donnéeshelloworld : nom de la base de données

6 / 35

Page 7: Benjamin cogrel, atelier Ontologies et Ontop

Interface H2

7 / 35

Page 8: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 9: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 10: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 11: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 12: Benjamin cogrel, atelier Ontologies et Ontop

L'ontologie : création de classes et depropriétés

Ajouter la classe Patient :

(Voir PatientOnto.owl)12 / 35

Page 13: Benjamin cogrel, atelier Ontologies et Ontop

L'ontologie : création de classes et depropriétés

Ajouter ces relations :

(Voir PatientOnto.owl)

12 / 35

Page 14: Benjamin cogrel, atelier Ontologies et Ontop

L'ontologie : création de classes et depropriétés

Ajouter ces attributs :

(Voir PatientOnto.owl)

12 / 35

Page 15: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 16: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 17: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 18: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 19: Benjamin cogrel, atelier Ontologies et Ontop

Mappings

16 / 35

Page 20: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 21: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 22: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 23: Benjamin cogrel, atelier Ontologies et Ontop

Graphe virtuel

Données et inférence :

19 / 35

Page 24: Benjamin cogrel, atelier Ontologies et Ontop

Accès à la base de données

Activer Ontop dans le menu “Reasoner”

20 / 35

Page 25: Benjamin cogrel, atelier Ontologies et Ontop

Accès à la base de données

Aller dans l’onglet SPARQLAjouter tous les préfixes

21 / 35

Page 26: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 27: Benjamin cogrel, atelier Ontologies et Ontop

Inférence

Requête : toutes les instances de la classe Neoplasm:SELECT ?x WHERE { ?x a :Neoplasm . }

23 / 35

Page 28: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 29: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 30: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 31: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 32: Benjamin cogrel, atelier Ontologies et Ontop

Cohérence : Définition d'une contrainte

25 / 35

Page 33: Benjamin cogrel, atelier Ontologies et Ontop

Incohérence : mauvais mapping

26 / 35

Page 34: Benjamin cogrel, atelier Ontologies et Ontop

Vérification de la cohérence

27 / 35

Page 35: Benjamin cogrel, atelier Ontologies et Ontop

Incohérence détectée

28 / 35

Page 36: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 37: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 38: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 39: Benjamin cogrel, atelier Ontologies et Ontop

Nouveaux mappings

Mapping map-patientCible : :db2/{pid} a :Patient .Source : SELECT pid FROM T_Name

Exercice : compléter les autres mappings.

32 / 35

Page 40: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 41: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 42: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 43: Benjamin cogrel, atelier Ontologies et Ontop

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

Page 44: Benjamin cogrel, atelier Ontologies et Ontop

Quelques liens

http://ontop.inf.unibz.ithttp://www.optique-project.euhttps://twitter.com/ontop4obda