5 SW
5 SW
5 SW
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
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]
O.Cur[261]
O.Cur[262]
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]
O.Cur[264]
O.Cur[265]
Exercice 1
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]
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 :
O.Cur[270]
"SELECT ?o, ?o2 WHERE (?s,<rel:childOf>,?o), (? s,<rel:parentOf>,?o2) USING rel FOR rel FOR < http://purl.org/vocab/relationship#> Rsultats :
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]
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
Afficher les cours Afficher les tudiants Afficher les enseignants Afficher l'enseignant du Cours1
O.Cur[274]
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:
Patterns
Variables are prefixed with a '?' Patterns use triple forms Example:
SELECT ?s ?p ?o WHERE {?s ?p ?o}
Example
@prefix person: <http://example/person/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . person:A foaf:name "Alice" . person:A foaf:mbox <mailto:[email protected]> . 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:[email protected]> . person:B foaf:name "Bob" .
PREFIXperson:<http://example/person/> PREFIXfoaf:<http://xmlns.com/foaf/0.1/> SELECT?name WHERE{?personfoaf:mbox <mailto:[email protected]>. ?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 :
O.Cur[289]
Influences de OWL
O.Cur[290]
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 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.
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
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]
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]
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]
owl:intersectionOf : le codomaine est restreint aux identifiants de classes et restrictions sur les proprits. Restriction :
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]
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]
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.
2 different patterns :
For example :
O.Cur[306]
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]
Caution : using the rdf:List vocabulary in OWL would have put the ontology in OWL Full.
O.Cur[308]
O.Cur[309]
Open-source :
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
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]
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
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]