Вы находитесь на странице: 1из 66

5

Exploiter RDF avec Jena

O.Cur[255]

JENA : Prsentation

Plateforme Java pour le Web smantique Open-source Dvelopp par un laboratoire de Hewlett-Packard

O.Cur[256]

JENA : URL

La page d'accueil de JENA :

http://jena.sourceforge.net/downloads.html http://groups.yahoo.com/group/jena-dev/ http://jena.sourceforge.net/javadoc/index.html

Un groupe de discussions :

La javaDoc

O.Cur[257]

JENA : lments

Un analyseur RDF : ARP Another RDF Parser un langage de requtes pour RDF : RDQL RDF Query Language Persistence des donnes, en particulier avec les SGBD (Oracle, MySQL, PostgreSQL) Support de RDF, RDFS, OWL Infrence
O.Cur[258]

Modle

L'architecture de JENA est centre sur la notion de modle (model) : l'ensemble des dclarations qui composent un document, graphe ou instanciation d'un vocabulaire. A partir de JENA2.0, on doit crer un modle en s'aidant de ModelFactory.

O.Cur[259]

ModelFactory : code
importjava.util.Iterator; importcom.hp.hpl.jena.rdf.model.*; publicclassEtudRDF{ privateStringetudNS="file:/home/olive/_mesCours/ kr/etudIns2.rdf"; publicstaticvoidmain(String[]args){ EtudRDFetudRDF=newEtudRDF(); etudRDF.load(); } publicvoidload(){ Modelmodel=ModelFactory.createDefaultModel(); model.read(etudNS); model.write(System.out); } }
O.Cur[260]

Cration / Enrichissement d'un modle (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]

Cration / Enrichissement d'un modle (2)


Statementstatement=model.createStatement(dominique, enfantDe,jean); model.add(statement); statement=model.createStatement(dominique,enfantDe, marie); model.add(statement); Propertyprop= model.createProperty(relationshipURI,"knowsOf"); //Crationd'unnoeudvide Resourceblank=model.createResource() .addProperty(prop,"personne1") .addProperty(prop,"personne2") .addProperty(prop,model.createLiteral("personne3","fr")); //AffichagedudocumentRDFauformatRDF/XML(pardfaut) model.write(newPrintWriter(System.out));

O.Cur[262]

Accs aux donnes

On peut accder aux donnes :

l'aide de programmes en s'appuyant sur les mthodes et classes de l'API l'aide de langage de requtes RDQL.

O.Cur[263]

Via les donnes : code


//Ensembledesdclarations StmtIteratoriter=model.listStatements(); while(iter.hasNext()){ Statementstmt=(Statement)iter.next(); System.out.println(stmt.getSubject()+" ("+stmt.getPredicate()+") >"+stmt.getObject().toString()); }

O.Cur[264]

Via les donnes : code (2)


//Connaitrelesparents ResIteratorparents= model.listSubjectsWithProperty(parentDe); while(parents.hasNext()){ personne=parents.nextResource(); System.out.println(personne.getLocalName()+">URI ="+personne.getURI()); } //EncoredesparentsavecenfantDe NodeIteratorparentsSuite= model.listObjectsOfProperty(enfantDe); while(parentsSuite.hasNext()){ Resourceperson=(Resource)parentsSuite.nextNode(); System.out.println(person.getLocalName()+">URI ="+person.getURI()); }

O.Cur[265]

Via les donnes : code (3)


System.out.println("Lesens:"); NodeIteratoritNode= model.listObjectsOfProperty(estEns); while(itNode.hasNext()){ RDFNodenode=(RDFNode)itNode.next(); System.out.println("Enseignant ="+node.toString()); //onveutlenom Propertynom= model.createProperty("http://www.univ mlv.fr/~ocure/etudSchema.rdf#possedeNom"); NodeIteratoritNom= 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 : prsentation

Syntaxe proche de SQL. Influence : SquishQL, RDFDB QL Les clauses sont : SELECT, WHERE, USING Les variables dbutent par un ?. Orient donnes : les donnes explicites du modle (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.univmlv.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.univmlv.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.univmlv.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.univmlv.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#> Rsultats :

alexandraparentdepierre alexandraparentdebaptiste dominiqueparentdepierre dominiqueparentdebaptiste

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#> Rsultats :

marieparentdepierre marieparentdebaptiste jeanparentdepierre jeanparentdebaptiste

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 rgulires (=~ egalit et !~ diffrence). Exemple : SELECT*WHERE(?s,<rel:parentOf>,?o)AND?s =~/dominique/iUSINGrelFOR<
http://purl.org/vocab/relationship#> Insensible la casse

dominiqueparentdepierre dominiqueparentdebaptiste

O.Cur[272]

RDQL :programmation Java

Mode de fonctionnement :

On passe la requte un objet instanci de la classe Query. On passe alors l'objet un objet du type QueryEngine. Les rsultats se trouvent dans un objet du type QueryResults On accde aux rsultats via la classe ResultBinding

Queryqr1=newQuery("SELECT* WHERE(?s,?p,?o)"); qr1.setSource(model); QueryEngineqe=new QueryEngine(qr1); QueryResultsresults=qe.exec(); for(it=results;it.hasNext();){ ResultBindingres= (ResultBinding)it.next(); Stringx= (res.get("s").toString()); Stringy= res.get("o").toString(); System.out.println(x.substring(x. indexOf('#')+1)+"parentde "+y.substring(y.indexOf('#')+1)); }

O.Cur[273]

Exercice 2

Toujours le fichier RDF de l'exercice 1, rdiger les requtes RDQL suivantes :


Afficher les cours Afficher les tudiants Afficher les enseignants Afficher l'enseignant du Cours1

O.Cur[274]

Oprations sur les modles

On peut raliser les oprations ensemblistes suivantes sur les modles : union, intersection et diffrence. Exemple pour l'union

ModelmodelI=ModelFactory.createDefaultModel(); modelI.read(instNS); ModelmodelS=ModelFactory.createDefaultModel(); modelS.read(schemaNS); Modelmodel=modelS.union(modelI); model.write(System.out); Idem pour intersection et difference

O.Cur[275]

Infrence

Jena propose de nombreuses fonctionnalits pour raliser des infrences. 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 Rdiger une classe Thesard, sousclasse de la classe Etudiant. Demander nouveau les sous-classes de la classe Personne.

O.Cur[277]

Exercice 4

Raliser l'union du modle du schma RDF et du modle des instances RDF. Ecrire le code permettant d'obtenir les instances de la classe Etudiant puis Enseignant. Ecrire un modle permettant l'infrence 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" . PREFIXperson:<http://example/person/> PREFIXfoaf:<http://xmlns.com/foaf/0.1/> SELECT?name WHERE{?xfoaf: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" .
PREFIXperson:<http://example/person/> PREFIXfoaf:<http://xmlns.com/foaf/0.1/> SELECT?name WHERE{?personfoaf:mbox <mailto:alice@example.net>. ?personfoaf: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)
PREFIXdc:<http://purl.org/dc/elements/1.1/> PREFIXstock:<http://example.org/stock#> PREFIXinv:<http://example.org/inventory#> SELECT?book?title WHERE{ ?bookdc:title?title.?bookinv:price?price.FILTER(?price<15) ?bookinv:quantity?num.FILTER(?num>0)}

book|title stock:book1|"SPARQLQueryLanguageTutorial"
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" . PREFIXfoaf:<http://xmlns.com/foaf/0.1/> SELECT?name?nick {?xfoaf:name?name. OPTIONAL{?xfoaf:nick?nick}}

name|nick
"Alice"|"Aonline" "Bob|

O.Cur[286]

6
OWL Web Ontology Language

O.Cur[287]

OWL

Une recommendation du W3C pour reprsenter des ontologies pour le Web Smantique. Influences : RDF, DL et les frames OWL est un langage pour structurer l'information dans des ontologies : dfinir les concepts d'un domaine et les relations liant ces concepts. OWL permet galement de dfinir les instances.

O.Cur[288]

OWL

OWL possde 3 sous-langages : OWL Lite, OWL DL and OWL Full OWL propose plusieurs syntaxes : RDF, OWL/RDF, abstract syntax. Termes utiliss avec OWL :

Concepts = classes Rles = proprits

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 hirarchique des classes et proprits, des contraintes simples OWL Lite possde moins de constructeurs que OWL DL

Descriptions dans des descriptions Unions, OneOf, etc.. Qui est dcidable Avec des implmentations efficaces.
O.Cur[293]

OWL Lite correspond DL SHIN(Dn)


OWL DL

Expressivit riche en gardant la compltude computationelle et la dcidabilit. Ne permet pas toute la libert syntaxique de RDF :

Ex : une classe ne peut tre une proprit ou une instance, une proprit 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 proprits. Classes pour dfinir des classes et des restrictions :

owl:Class = spcialisation de rdfs:Class owl:Restriction = spcialisation de owl:Class pour dfinir des restrictions sur des classes (existencielle, universelle, number restrictions), etc.).
O.Cur[295]

Elments du langage

Classes pour dfinir des proprits :

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 spcialisations de rdf:Property

O.Cur[296]

Elments du langage (2)

Classes pour dclarer l'ingalit entre individus :

owl:AllDifferent pour spcifier que des individus sont diffrents. Ncessaire car OWL ne suppose pas UNA Donc 2 dfinitions d'individus avec des identifiants diffrents peuvent correspondre au mme individu.

O.Cur[297]

Elments du langage (3)

Classes pour l'numration de types de donnes :

owl:DataRange pour numrer des donnes avec des valeurs prdfinies.

Classes prdfinies : owl:Thing et owl:Nothing Classes pour la description d'ontologie : owl:Ontology Version des ontologies : owl:DeprecatedClass, owl:DeprecatedProperty

O.Cur[298]

Elments du langage (4)

Proprits pour dfinir des classes dans OWL Lite :

owl:intersectionOf : le codomaine est restreint aux identifiants de classes et restrictions sur les proprits. Restriction :

owl:AllValuesFrom owl:SomeValuesFrom owl:cardinality, owl:minCardinality, owl:maxCardinality avec des valeurs de 0 ou 1.


O.Cur[299]

Elments du langage (6)

Proprits pour dfinir des classes dans OWL DL:

owl:intersectionOf, owl:unionOf, owl:complementOf (ngation) sont sans restriction sur le codomaine. owl:OneOf pour dfinir des collections d'individus Entier naturel pour les cardinalits owl:hasValue

Restrictions :

O.Cur[300]

Elments du langage (7)

Pour OWL Lite :

owl:inverseOf pour dfinir l'inverse d'une proprit owl:sameAs, owl:equivalentClass, owl:equivalentProperty, owl:sameIndividualAs pour dfinir des quivalences entre des ressources, des classes, des proprits et des individus. owl:differentFrom pour dfinir que 2 individus sont diffrents
O.Cur[301]

Elments du langage (8)

Pour OWL Lite :

owl:distinctMembers. A utiliser avec owl:AllDifferent pour dfinir une liste d'instances o les lments sont diffrents les uns des autres. owl:disjointWith pour dfinir que des classes sont disjointes.

Pour OWL DL :

O.Cur[302]

O.Cur[303]

OWL Full

Trs expressif (mta-classes, classes comme valeur d'object property). Profite de toute la libert syntaxique de RDF

Une classe peut tre traite 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, Protg, WebODE, WebOnto

O.Cur[310]

Protg

O.Cur[311]

Introduction

Un diteur d'ontologies et de bases de connaissances Open-source Disponible l'URL : http://www-protege.stanford.edu/ Dvelopp l'Universit de Stanford en Java Supporte de nombreux plug-ins.
O.Cur[312]

Historique

Dbut des annes 90 : Protg II

Environnement pour l'ingnierie des connaissances permettant de dfinir des modles et de gnrer des GUI. Version pour NeXTSTEP. Version pour Windows Version Java, Open-source Dveloppement de plug-ins Support de OWL.
O.Cur[313]

Milieu des 90s : ProtgWin

Fin des 90s : Protg2000


2003 : Protg ( partir de la version 2.0)

Plateforme pour plug-ins

Communaut trs active. On trouve des plug-ins pour :


La visualisation L'infrence 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 Protg pour permettre : le chargement, l'enregistrement de fichiers OWL, l'dition graphique d'expressions OWL, l'accs des fonctionnalits lies l'infrence (classifier)

Racer

O.Cur[315]

Dmonstration

Crer des classes, des proprits, des instances Lancer la classification avec Racer. Ecrire et excuter des requtes en RDQL. Visualisation de graphes

O.Cur[316]

Exercice

Ecrire la terminologie complte de l'ontologie Personne :

O.Cur[317]

Exercice 1

Ecrire un programme Java qui va afficher les dclarations de la base de connaissances (Personne) Ecrire une nouvelle mthode qui va permettre d'afficher les sous-classes de la classe Man. Ecrire une mthode qui va permettre d'afficher toutes les instances de la Abox. En vous aidant des tutoriaux sur les infrences avec Jena (que vous devriez dj avoir tudi) et using a DIG reasoner with Jena (DIG = Description Logic Implementation Group), intgrez 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 (gnre avec Rice) se trouve l'adresse : www.univ-mlv.fr/~ocure/Ex1PersonDLInst.png). Les donnes sur les oncles ne sont pas explicites. Regarder le code OWL pour comprendre l'infrence : dfinition de la classe Uncle, des classes associes et des instances impliques. Dfinir l'aide de manire programmatique en Java la classe suivante HappyFather dfinie comme un pre ayant au moins un garon et une fille.
O.Cur[319]

Exercice 1 (fin)

Modifier la classe HappyFather et ajouter une contrainte supplmentaire : 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]

Вам также может понравиться