Exploiter RDF avec Jena. O.Curé [255 ]



Documents pareils
RDF Schema pour les ontologies légères

LES TECHNOLOGIES DU WEB APPLIQUÉES AUX DONNÉES STRUCTURÉES

Ecole Nationale Supérieure de Mécanique et d Aérotechnique Laboratoire d Informatique et d Automatique pour les Systèmes THESE

Web sémantique et pratiques documentaires

Web Sémantique. Examen

Vues d ensembles de documents RDF

Linked Open Data. Le Web de données Réseau, usages, perspectives. Eric Charton. Eric Charton

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Le Web de Données Dan VODISLAV Université de Cergy-Pontoise Master Informatique M2 Plan

OpenPaaS Le réseau social d'entreprise

Catalogue des formations Edition 2015

Java DataBaseConnectivity

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Bigdata et Web sémantique. les données + l intelligence= la solution

DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

Java Licence Professionnelle CISII,

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Initiation à JAVA et à la programmation objet.

Compte-rendu re union Campus AAR 3 mars 2015

Introduction à JDBC. Accès aux bases de données en Java

Java et les bases de données

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

Mysql. Les requêtes préparées Prepared statements

BIRT (Business Intelligence and Reporting Tools)

Évaluation d une architecture de stockage RDF distribuée

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Algorithmes de recommandation, Cours Master 2, février 2011

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Configurer la supervision pour une base MS SQL Server Viadéis Services

Raja Bases de données distribuées A Lire - Tutoriel

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Datalift. + + Architecture Modularité Déploiements. d j = 09/04/2015 Laurent BIHANIC

ACTIVITÉ DE PROGRAMMATION

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

La base de données XML exist. A. Belaïd

Je catalogue, tu FRBRises, il/elle googlise. L évolution des catalogues et les bibliothécaires Vendredi 29 mars 2013 Manufacture des tabacs

Application Form/ Formulaire de demande

Programmer en JAVA. par Tama

Programmation par les Objets en Java

that the child(ren) was/were in need of protection under Part III of the Child and Family Services Act, and the court made an order on

Notes de cours Practical BigData

Université de Bangui. Modélisons en UML

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

JDev Atelier Datalift

Once the installation is complete, you can delete the temporary Zip files..

Forthcoming Database

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

Knowledge Enabled Real-Time Recommendation System

MEMOIRE DE STAGE. Amélioration de l'outillage support à une méthodologie de "Cartographie Sémantique"

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cedric Dumoulin (C) The Java EE 7 Tutorial

Héritage presque multiple en Java (1/2)

Bases de données relationnelles

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

TP Programmation Java / JDBC / Oracle

Plan... as Architecture des Systèmes d Information. Constats. as Architecture des Systèmes d Information

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Programme Compte bancaire (code)

Exemple PLS avec SAS

Auto-évaluation Programmation en Java

Introduction aux bases de données

XML et travail collaboratif : vers un Web sémantique

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Projet de programmation (IK3) : TP n 1 Correction

SQL Parser XML Xquery : Approche de détection des injections SQL

Les bases de données

Comment Créer une Base de Données Ab Initio

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Get Instant Access to ebook Cest Maintenant PDF at Our Huge Library CEST MAINTENANT PDF. ==> Download: CEST MAINTENANT PDF

Serveur d'archivage 2007 Installation et utilisation de la BD exist

TP1 : Initiation à Java et Eclipse

Création d une application JEE

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Public and European Business Law - Droit public et européen des affaires. Master I Law Level

Ingénierie et gestion des connaissances

physicien diplômé EPFZ originaire de France présentée acceptée sur proposition Thèse no. 7178

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

COPYRIGHT Danish Standards. NOT FOR COMMERCIAL USE OR REPRODUCTION. DS/EN 61303:1997

SERVEUR DÉDIÉ DOCUMENTATION

Lamia Oukid, Ounas Asfari, Fadila Bentayeb, Nadjia Benblidia, Omar Boussaid. 14 Juin 2013

22/09/2014 sur la base de 55,03 euros par action

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

The impacts of m-payment on financial services Novembre 2011

Master Web Intelligence 2005/2006. Web Sémantique. Philippe Beaune ENSM SE. mailto : Philippe.Beaune@emse.fr. Lundi 23 janvier

Bases de données et sites WEB

Connaître la version de SharePoint installée

Langage SQL : créer et interroger une base

4. SERVICES WEB REST 46

Instructions Mozilla Thunderbird Page 1

Transcription:

5 Exploiter RDF avec Jena O.Curé [255 ]

JENA : Présentation Plateforme Java pour le Web sémantique Open-source Développé par un laboratoire de Hewlett-Packard O.Curé [256 ]

JENA : URL La page d'accueil de JENA : Un groupe de discussions : http://jena.sourceforge.net/downloads.html http://groups.yahoo.com/group/jena-dev/ La javadoc http://jena.sourceforge.net/javadoc/index.html O.Curé [257 ]

JENA : éléments Un analyseur RDF : ARP Another RDF Parser un langage de requêtes pour RDF : RDQL RDF Query Language Persistence des données, en particulier avec les SGBD (Oracle, MySQL, PostgreSQL) Support de RDF, RDFS, OWL Inférence O.Curé [258 ]

Modèle L'architecture de JENA est centrée sur la notion de modèle (model) : l'ensemble des déclarations qui composent un document, graphe ou instanciation d'un vocabulaire. A partir de JENA2.0, on doit créer un modèle en s'aidant de ModelFactory. O.Curé [259 ]

ModelFactory : code import java.util.iterator; import com.hp.hpl.jena.rdf.model.*; public class EtudRDF { private String etudns ="file:/home/olive/_mescours/ kr/etudins2.rdf"; public static void main(string[] args) { EtudRDF etudrdf= new EtudRDF(); etudrdf.load(); } public void load() { Model model = ModelFactory.createDefaultModel(); model.read(etudns); model.write(system.out); } } O.Curé [260 ]

Création / Enrichissement d'un modèle (1) model = ModelFactory.createDefaultModel(); jean = model.createresource(familleuri+"jean"); marie = model.createresource(familleuri+"marie"); dominique = model.createresource(familleuri+"dominique"); alexandra = model.createresource(familleuri+"alexandra"); baptiste = model.createresource(familleuri+"baptiste"); pierre = model.createresource(familleuri+"pierre"); enfantde = model.createproperty(relationshipuri,"childof"); parentde = model.createproperty(relationshipuri,"parentof"); epousede = model.createproperty(relationshipuri,"spouseof"); dominique.addproperty(parentde, baptiste); dominique.addproperty(parentde, pierre); alexandra.addproperty(parentde, baptiste); alexandra.addproperty(parentde,pierre); alexandra.addproperty(epousede, dominique); O.Curé [261 ]

Création / Enrichissement d'un modèle (2) Statement statement = model.createstatement(dominique, enfantde, jean); model.add(statement); statement = model.createstatement(dominique, enfantde, marie); model.add(statement); Property prop = model.createproperty(relationshipuri,"knowsof"); //Création d'un noeud vide Resource blank = model.createresource( ).addproperty(prop, "personne1").addproperty(prop, "personne2").addproperty(prop, model.createliteral("personne3", "fr")); // Affichage du document RDF au format RDF/XML (par défaut) model.write(new PrintWriter(System.out)); O.Curé [262 ]

Accès aux données On peut accéder aux données : à l'aide de programmes en s'appuyant sur les méthodes et classes de l'api À l'aide de langage de requêtes RDQL. O.Curé [263 ]

Via les données : code // Ensemble des déclarations StmtIterator iter = model.liststatements(); while (iter.hasnext()) { Statement stmt = (Statement) iter.next(); System.out.println(stmt.getSubject()+" ("+stmt.getpredicate()+") >"+stmt.getobject().tostring()); } O.Curé [264 ]

Via les données : code (2) // Connaitre les parents ResIterator parents = model.listsubjectswithproperty(parentde); while (parents.hasnext()) { personne = parents.nextresource(); System.out.println(personne.getLocalName()+ " > URI ="+personne.geturi()); } // Encore des parents avec enfantde NodeIterator parentssuite = model.listobjectsofproperty(enfantde); while (parentssuite.hasnext()) { Resource person = (Resource) parentssuite.nextnode(); System.out.println( person.getlocalname()+ " > URI ="+person.geturi()); } O.Curé [265 ]

Via les données : code (3) System.out.println("Les ens :"); NodeIterator itnode = model.listobjectsofproperty(estens); while (itnode.hasnext()) { RDFNode node = (RDFNode) itnode.next(); System.out.println("Enseignant ="+node.tostring()); // on veut le nom Property nom = model.createproperty("http://www.univ mlv.fr/~ocure/etudschema.rdf#possedenom"); NodeIterator itnom = model.listobjectsofproperty((resource)node,nom); while (itnom.hasnext()) { System.out.println("Nom = "+itnom.next()); } } O.Curé [266 ]

Exercice 1 A partir du fichier RDF sur les cours, enseignants et etudiants : Afficher la liste des cours Afficher les enseignants, dans un premier temps le nom local des enseignants puis la valeur de l'attribut possedenom de chaque enseignant. O.Curé [267 ]

RDQL : présentation Syntaxe proche de SQL. Influence : SquishQL, RDFDB QL Les clauses sont : SELECT, WHERE, USING Les variables débutent par un?. Orienté données : les données explicites du modèle (pas implicites). Jena Tutorial : RDF provides a graph with directed edges - the nodes are resources or literals. RDQL provides a way of specifying a graph pattern that is matched against the graph to yield a set of matches. It returns a list of bindings - each binding is a set of name-value pairs for the values of the variables. All variables are bound (there is no disjunction in the query). O.Curé [268 ]

RDQL : le langage (1) BNF de RDQL à la page : http://jena.sourceforge.net/tutorial/rdql/rdql_grammar.html Exemple : SELECT * WHERE (?s,?p,?o) (s, 129d96a8:10160ffc9cc: 8000) (p, http://purl.org/vocab/relationship#knowsof) (o, personne2) (s, 129d96a8:10160ffc9cc: 8000) (p, http://purl.org/vocab/relationship#knowsof) (o, personne3~fr) (s, http://www.univ mlv.fr/~ocure/rdf/famille#alexandra) (p, http://purl.org/vocab/relationship#parentof) (o, http://www.univ mlv.fr/~ocure/rdf/famille#pierre) (s, http://www.univ mlv.fr/~ocure/rdf/famille#alexandra) (p, http://purl.org/vocab/relationship#parentof) (o, http://www.univ mlv.fr/~ocure/rdf/famille#baptiste) (s, http://www.univ mlv.fr/~ocure/rdf/famille#dominique) (p, http://purl.org/vocab/relationship#parentof) (o, http://www.univ mlv.fr/~ocure/rdf/famille#pierre) (s, http://www.univ mlv.fr/~ocure/rdf/famille#dominique) (p, http://purl.org/vocab/relationship#parentof) (o, http://www.univ mlv.fr/~ocure/rdf/famille#baptiste)... O.Curé [269 ]

RDQL : le langage (2) SELECT * WHERE (?s,<rel:parentof>,?o) USING rel FOR < http://purl.org/vocab/relationship#> SELECT?s WHERE (?s,<rel:parentof>,?o) USING rel FOR < http://purl.org/vocab/relationship#> Résultats : alexandra parent de pierre alexandra parent de baptiste dominique parent de pierre dominique parent de baptiste O.Curé [270 ]

RDQL : le langage (3) "SELECT?o,?o2 WHERE (?s,<rel:childof>,?o), (? s,<rel:parentof>,?o2) USING rel FOR rel FOR < http://purl.org/vocab/relationship#> Résultats : marie parent de pierre marie parent de baptiste jean parent de pierre jean parent de baptiste O.Curé [271 ]

RDQL : filtre On peut filtrer les valeurs des variables à l'aide de la clause AND. Exemple : AND?age > 18 On apeut aussi profiter des expressions régulières ( =~ egalité et!~ différence). Exemple : SELECT * WHERE (?s,<rel:parentof>,?o) AND?s =~ /dominique/i USING rel FOR < http://purl.org/vocab/relationship#> dominique parent de pierre dominique parent de baptiste Insensible à la casse O.Curé [272 ]

RDQL :programmation Java Mode de fonctionnement : On passe la requête à un objet instancié de la classe Query. On passe alors l'objet à un objet du type QueryEngine. Les résultats se trouvent dans un objet du type QueryResults On accède aux résultats via la classe ResultBinding Query qr1 = new Query("SELECT * WHERE (?s,?p,?o)"); qr1.setsource(model); QueryEngine qe = new QueryEngine(qr1); QueryResults results = qe.exec(); for(it=results; it.hasnext();) { ResultBinding res = (ResultBinding)it.next() ; String x = (res.get("s").tostring()); String y = res.get("o").tostring(); System.out.println(x.substring(x. indexof('#')+1) +" parent de "+y.substring(y.indexof('#')+1)); } O.Curé [273 ]

Exercice 2 Toujours le fichier RDF de l'exercice 1, rédiger les requêtes RDQL suivantes : Afficher les cours Afficher les étudiants Afficher les enseignants Afficher l'enseignant du Cours1 O.Curé [274 ]

Opérations sur les modèles On peut réaliser les opérations ensemblistes suivantes sur les modèles : union, intersection et différence. Exemple pour l'union Model modeli = ModelFactory.createDefaultModel(); modeli.read(instns); Model models = ModelFactory.createDefaultModel(); models.read(schemans); Model model = models.union(modeli); model.write(system.out); Idem pour intersection et difference O.Curé [275 ]

Inférence Jena propose de nombreuses fonctionnalités pour réaliser des inférences. Lire le document Inference engine user manual accessible depuis la page Documentation du site de Jena. O.Curé [276 ]

Exercice 3 Sur le fichier RDFS (schemaetud.rdf) afficher toutes les sous-classes de la classe Personne Rédiger une classe Thesard, sousclasse de la classe Etudiant. Demander à nouveau les sous-classes de la classe Personne. O.Curé [277 ]

Exercice 4 Réaliser l'union du modèle du schéma RDF et du modèle des instances RDF. Ecrire le code permettant d'obtenir les instances de la classe Etudiant puis Enseignant. Ecrire un modèle permettant l'inférence et écrire le code permettant d'obtenir les instances de la classe Personne. O.Curé [278 ]

SPARQL O.Curé [279 ]

Introduction Query language for RDF data Basic graph pattern matching Result forms: SELECT, CONSTRUCT, DESCRIBE, ASK with filters to restrict values Solution modifiers: ORDER BY, LIMIT/OFFSET, DISTINCT, REDUCED O.Curé [280 ]

Patterns Variables are prefixed with a '?' Patterns use triple forms Example: SELECT?s?p?o WHERE {?s?p?o} A pattern is a conjunction of triples: {?x rdf:type ex:person.?x ex:nom?name} O.Curé [281 ]

Example @prefix person: <http://example/person/>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. person:a foaf:name "Alice". person:a foaf:mbox <mailto:alice@example.net>. person:b foaf:name "Bob". PREFIX person: <http://example/person/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?name WHERE {?x foaf:name?name } name "Bob" "Alice" O.Curé [282 ]

Example (2) @prefix person: <http://example/person/>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. person:a foaf:name "Alice". person:a foaf:mbox <mailto:alice@example.net>. person:b foaf:name "Bob". PREFIX person: <http://example/person/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?name WHERE {?person foaf:mbox <mailto:alice@example.net>.?person foaf:name?name. } name "Alice" O.Curé [283 ]

Example (3a) @prefix dc: <http://purl.org/dc/elements/1.1/>. @prefix stock: <http://example.org/stock#>. @prefix inv: <http://example.org/inventory#>. stock:book1 dc:title "SPARQL Query Language Tutorial". stock:book1 inv:price 10. stock:book1 inv:quantity 3. stock:book2 dc:title "SPARQL Query Language (2nd ed)". stock:book2 inv:price 20 ; inv:quantity 5. stock:book3 dc:title "Moving from SQL to SPARQL". stock:book3 inv:price 5 ; inv:quantity 0. stock:book4 dc:title "Applying XQuery". stock:book4 inv:price 20 ; inv:quantity 8. O.Curé [284 ]

Example (3b) PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX stock: <http://example.org/stock#> PREFIX inv: <http://example.org/inventory#> SELECT?book?title WHERE {?book dc:title?title.?book inv:price?price. FILTER (?price < 15 )?book inv:quantity?num. FILTER (?num > 0 ) } book title stock:book1 "SPARQL Query Language Tutorial" O.Curé [285 ]

Example (4) @prefix person: <htp://example/person/>. t @prefix foaf: <http://xmlns.com/foaf/0.1/>. person :a foaf:name "Alice". person :a foaf:nick "A-online". person:b foaf:name "Bob". PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?name?nick {?x foaf:name?name. OPTIONAL {?x foaf:nick?nick } } name nick "Alice" "A online" "Bob O.Curé [286 ]

6 OWL Web Ontology Language O.Curé [287 ]

OWL Une recommendation du W3C pour représenter des ontologies pour le Web Sémantique. Influences : RDF, DL et les frames OWL est un langage pour structurer l'information dans des ontologies : définir les concepts d'un domaine et les relations liant ces concepts. OWL permet également de définir les instances. O.Curé [288 ]

OWL OWL possède 3 sous-langages : OWL Lite, OWL DL and OWL Full OWL propose plusieurs syntaxes : RDF, OWL/RDF, abstract syntax. Termes utilisés avec OWL : Concepts = classes Rôles = propriétés O.Curé [289 ]

Influences de OWL O.Curé [290 ]

OWL comme une DL O.Curé [291 ]

Syntaxe OWL/RDF syntax <owl:class rdf:id="cat"> <rdfs:subclassof rdf:resource="#animal"/> </owl:class> Abstract syntax Class (a:cat partial a:animal) O.Curé [292 ]

OWL Lite OWL Lite ressemble aux Frames : supporte la classification hiérarchique des classes et propriétés, des contraintes simples OWL Lite possède moins de constructeurs que OWL DL Descriptions dans des descriptions Unions, OneOf, etc.. OWL Lite correspond à DL SHIN(Dn) Qui est décidable Avec des implémentations efficaces. O.Curé [293 ]

OWL DL Expressivité riche en gardant la complétude computationelle et la décidabilité. Ne permet pas toute la liberté syntaxique de RDF : Ex : une classe ne peut être une propriété ou une instance, une propriété ne peut être une classe ou une instance. Correspondence avec la DL SHOIN(D) O.Curé [294 ]

OWL DL (2) 40 primitives : 16 pour les classes et 24 pour les propriétés. Classes pour définir des classes et des restrictions : owl:class = spécialisation de rdfs:class owl:restriction = spécialisation de owl:class pour définir des restrictions sur des classes (existencielle, universelle, number restrictions ), etc.). O.Curé [295 ]

Eléments du langage Classes pour définir des propriétés : owl:objectproperty, owl:datatypeproperty, owl:transitiveproperty, owl:symmetricproperty, owl:functionalproperty, owl:inversefunctionalproperty (une sous classe de ObjectProperty pour OWL Lite et DL, également une sous-classe de datatype Property pour OWL Full) sont des spécialisations de rdf:property O.Curé [296 ]

Eléments du langage (2) Classes pour déclarer l'inégalité entre individus : owl:alldifferent pour spécifier que des individus sont différents. Nécessaire car OWL ne suppose pas UNA Donc 2 définitions d'individus avec des identifiants différents peuvent correspondre au même individu. O.Curé [297 ]

Eléments du langage (3) Classes pour l'énumération de types de données : owl:datarange pour énumérer des données avec des valeurs prédéfinies. Classes prédéfinies : owl:thing et owl:nothing Classes pour la description d'ontologie : owl:ontology Version des ontologies : owl:deprecatedclass, owl:deprecatedproperty O.Curé [298 ]

Eléments du langage (4) Propriétés pour définir des classes dans OWL Lite : owl:intersectionof : le codomaine est restreint aux identifiants de classes et restrictions sur les propriétés. Restriction : owl:allvaluesfrom owl:somevaluesfrom owl:cardinality, owl:mincardinality, owl:maxcardinality avec des valeurs de 0 ou 1. O.Curé [299 ]

Eléments du langage (6) Propriétés pour définir des classes dans OWL DL: owl:intersectionof, owl:unionof, owl:complementof (négation) sont sans restriction sur le codomaine. owl:oneof pour définir des collections d'individus Restrictions : Entier naturel pour les cardinalités owl:hasvalue O.Curé [300 ]

Eléments du langage (7) Pour OWL Lite : owl:inverseof pour définir l'inverse d'une propriété owl:sameas, owl:equivalentclass, owl:equivalentproperty, owl:sameindividualas pour définir des équivalences entre des ressources, des classes, des propriétés et des individus. owl:differentfrom pour définir que 2 individus sont différents O.Curé [301 ]

Eléments du langage (8) Pour OWL Lite : owl:distinctmembers. A utiliser avec owl:alldifferent pour définir une liste d'instances où les éléments sont différents les uns des autres. Pour OWL DL : owl:disjointwith pour définir que des classes sont disjointes. O.Curé [302 ]

O.Curé [303 ]

OWL Full Très expressif (méta-classes, classes comme valeur d'object property). Profite de toute la liberté syntaxique de RDF Une classe peut être traitée comme un ensemble d'individus et comme une classe. Pas d'algo efficace pour le raisonnement. O.Curé [304 ]

Defining n-ary relations Problem: how to represent n-ary relations in RDF/OWL 2 different patterns : introduce a new class for a relation using lists of arguments in a relation. O.Curé [305 ]

New class for a relation For example : O.Curé [306 ]

New class for a relation This approach is useful in the case of additional attributes describing a relation different aspects of the same relation n -ary relation with no distinguished participants, e.g. someone buys in a particular book, in a shop, at a given price for a specific purpose. O.Curé [307 ]

Lists for arguments of a relation Caution : using the rdf:list vocabulary in OWL would have put the ontology in OWL Full. O.Curé [308 ]

Lists for arguments of a relation (2) The following ontology is in OWL Lite: O.Curé [309 ]

Outils pour concevoir des ontologies Open-source : KAON, OilEd, OntoEdit, Ontolingua, OntoSaurus, Protégé, WebODE, WebOnto O.Curé [310 ]

Protégé O.Curé [311 ]

Introduction Un éditeur d'ontologies et de bases de connaissances Open-source Disponible à l'url : http://www-protege.stanford.edu/ Développé à l'université de Stanford en Java Supporte de nombreux plug-ins. O.Curé [312 ]

Historique Début des années 90 : Protégé II Milieu des 90s : ProtégéWin Environnement pour l'ingénierie des connaissances permettant de définir des modèles et de générer des GUI. Version pour NeXTSTEP. Version pour Windows Fin des 90s : Protégé2000 Version Java, Open-source Développement de plug-ins 2003 : Protégé (à partir de la version 2.0) Support de OWL. O.Curé [313 ]

Plateforme pour plug-ins Communauté très active. On trouve des plug-ins pour : La visualisation L'inférence Import et export de formats (XML, RDF, DAML+OIL, OWL, CLIPS, Topic Maps). Conception d'ihm etc.. O.Curé [314 ]

Notre environnement Le plug-in OWL Une extension de Protégé pour permettre : le chargement, l'enregistrement de fichiers OWL, l'édition graphique d'expressions OWL, l'accès à des fonctionnalités liées à l'inférence (classifier) Racer O.Curé [315 ]

Démonstration Créer des classes, des propriétés, des instances Lancer la classification avec Racer. Ecrire et exécuter des requêtes en RDQL. Visualisation de graphes O.Curé [316 ]

Exercice Ecrire la terminologie complète de l'ontologie Personne : O.Curé [317 ]

Exercice 1 Ecrire un programme Java qui va afficher les déclarations de la base de connaissances (Personne) Ecrire une nouvelle méthode qui va permettre d'afficher les sous-classes de la classe Man. Ecrire une méthode qui va permettre d'afficher toutes les instances de la Abox. En vous aidant des tutoriaux sur les inférences avec Jena (que vous devriez déjà avoir étudié) et «using a DIG reasoner with Jena» (DIG = Description Logic Implementation Group), intégrez le raisonneur Racer dans le programme et chargez notre base de connaissances. O.Curé [318 ]

Exercice 1 (2) Afficher les instances qui sont des hommes («Man»). Afficher les instances qui sont des oncles («uncle»). Le graphe des instances (générée avec Rice) se trouve à l'adresse : www.univ-mlv.fr/~ocure/ex1persondlinst.png). Les données sur les oncles ne sont pas explicites. Regarder le code OWL pour comprendre l'inférence : définition de la classe «Uncle», des classes associées et des instances impliquées. Définir à l'aide de manière programmatique en Java la classe suivante «HappyFather» définie comme un père ayant au moins un garçon et une fille. O.Curé [319 ]

Exercice 1 (fin) Modifier la classe «HappyFather» et ajouter une contrainte supplémentaire : n'a qu'un seul enfant. La base de connaissances contient maintenant une classe inconsistante. A l'aide du tutoriel, programmer l'afficher des classes inconsistances. O.Curé [320 ]