Corese Moteur de recherche sémantique pour RDF Olivier.Corby@sophia.inria.fr Projet ACACIA INRIA, Sophia Antipolis http://www.inria.fr/acacia «Knowledge is Power»
COnceptual REsource Search Engine Corese COnceptual REsource Search Engine Moteur de recherche RDF en graphe conceptuel Resource Description Framework (W3C)
Histoire 1992 Acacia : acquisition des connaissances à partir de documents structurés avec des graphes conceptuels 1998 : XML 1999 : RDF, 1er prototype de Corese 2000 ICCS : RDF et les graphes conceptuels 2000-2001 : Moteur Corese pour Comma, projet européen
Graphes conceptuels Réseau sémantique Concepts et relations typés Modèle de John Sowa http://www.jfsowa.com/cg/cgexamp.htm Réseau sémantique Concept [Person : John] Relation (author) Concepts et relations typés Hiérarchies de types de concept et de relation
GC [Book:doc]- -(author)-[Person:jr]- -(name)-[Literal:“John Rawls”] -(title)- -[Literal:“Theory of Justice”]
RDF <Book rdf:about=‘doc’> <author> <Person rdf:about=‘jr’> <name>John Rawls</name> </Person> </author> <title>Theory of Justice</title> </Book>
GC - RDF Concept ressource Relation propriété Type classe Signature de relation domain, range Projection pour retrouver des ressources RDF comme format de GC
Différences RDF : relation binaire, CG : n-aire RDF : ressources peuvent avoir plusieurs types RDF distingue les littéraux et les ressources RDF est multilingue (xml:lang tag)
RDFS Ontologie Annotation RDF subClassOf range domain type subPropertyOf Property Resource Class Literal Ontologie Country Company Person employs subdivisionOf activity Inanimate Entity nationality domain range Annotation RDF www.T-Nova.de www.DeutscheTelekom.de subdivisionOf activity Telecom
Corese Construire une représentation Rechercher des ressources d’un schema RDF et d’énoncés RDF Rechercher des ressources Classer des ressources par inférence de type Compléter la base de ressources par des inférences Serveur Web sémantique
Moteur de recherche Projection d’un graphe requête sur le graphe cible Opérateurs de recherche Projection approchée Groupement des résultats
Requête à la OQL select d.title, p.name from d Document, p Person where d.title like‘XML’ and d.author = p
Requête à la RQL Select ?title, ?pname From ?doc rdf:type ex:Document ?p rdf:type ex:Person Where ?doc ex:title ?title ?title like ‘XML’ ?doc ex:author ?p ?p ex:name ?pname
Requête Corese <c:Document c:Title=‘~XML’> <c:author> <c:Person c:name=‘?x’/> </c:author> </c:Document>
Projection Trouver des occurrences spécialisées : Query : [Document]-(author)-[Creator] Trouver des occurrences spécialisées : Réponse 1 [Paper]-(author)-[Person] Paper < Document Person < Creator Réponse 2 [Report]-(author)-[Team] Report < Document Team < Creator
Résultat Les graphes résultats sont traduits en RDF Et traités par une feuille de style XSLT qui engendre du HTML
Projection approchée Réponse tolère des concepts non spécialisés Query : [TechnicalReport](author)[Person] Target : [ResearchReport] (author) [Team]
Projection approchée Document TechnicalReport ResearchReport Creator Person Team Query : [TechnicalReport](author)[Person]
Distance ontologique Calcule une distance ontologique entre concept requête et concept cible Distance = longueur du plus court chemin le long de la relation de subsomption entre concept requête et cible, passe par le plus précis supertype commun Distance entre réponse et requête = somme des distances des concepts approchés
Distance entre des frères : 2 Entre des cousins germains : 4 Distance ontologique Distance entre des frères : 2 Entre des cousins germains : 4
Distance De plus, la distance diminue avec la profondeur La distance entre un père de profondeur n et un fils est de 1/2n Ainsi Homme est plus proche de Chimpanzé que Vertébré de Invertébré !
Distance
Opérateurs de requête ~ contain ^ startWith < <= = >= > nombre ou string ! negation : != !~ | boolean or : ~XML | ~ RDF <: <=: =: >=: >: type
Opérateurs Trouver un document : ?doc rdf:type ex:Document Le titre contient XML : ?doc ex:title ?title ~XML Le titre contient XML ou RDF : ?doc ex:title ?title ~XML | ~RDF La date est antérieure à 2004 : ?doc ex:date ?date <= 2004-01-01
Opérateurs avec variable Deux auteurs différents : ?doc ex:author ?p1 ?doc ex:author ?p2 != ?p1 Deux personnes de même noms : ?p1 rdf:type ex:Person ?p1 ex:name ?x ?p2 rdf:type ex:Person ?p2 ex:name ?x ?p1 != ?p2
Opérateurs de type Un document de type égal à TechnicalReport ?x rdf:type ex:Document =: ex:TechnicalReport Un document qui ne soit pas un Rapport technique : ?x rdf:type ex:Document !<=: ex:TechnicalReport Documents différents, de même type : ?x rdf:type ex:Document ?y rdf:type ex:Document != ?x =: ?x
Négation Trouver une personne qui n’est pas l’auteur d’un document dont le titre contient XML : ?p rdf:type ex:Person ?doc ex:title ~XML ?p not ex:author ?doc
Chemin de longueur variable Trouver par quel chemin deux personnes sont reliées, chemin de longueur au plus n : ?x rdf:type ex:Person ?y rdf:type ex:Person ?x ex:relation *2 ?y Essaie : ?x ex:relation ?y ?x ex:relation ?t ex:relation ?y
Tous les chemins de longueur variable Trouver par quels chemins deux personnes sont reliées, chemins de longueur au plus n : ?x rdf:type ex:Person ?y rdf:type ex:Person ?x ex:relation all *2 ?y Essaie : ?x ex:relation ?y ?x ex:relation ?t ex:relation ?y
Propriété générique Ressources reliées par n’importe quelle propriété : ?x cos:Property ?y Trouver un document dont le titre contient XML et retourner toutes ses propriétés : ?doc ex:title ~XML ?doc cos:Property ?p
xsd:string xsd:float xsd:integer xsd:date Xsd:boolean XML Schema Datatypes xsd:string xsd:float xsd:integer xsd:date Xsd:boolean
RDF Datatype <!ENTITY xsd ”http://www.w3.org/2001/XMLSchema#” > <c:Person> <c:age rdf:datatype=‘&xsd;integer’>44</c:age> <c:name rdf:datatype=‘&xsd;string’>Laurent </c:name> <c:date rdf:datatype=‘&xsd;date’>1959-10-16 </c:date> </c:Person>
RDF Datatype RDF impose de préciser systématiquement le datatype, même si le range de la propriété est typé sur ce datatype : <rdf:Property rdf:about=‘#speed’> <rdfs:range rdf:resource=‘&xsd;float’/> </rdf:Property> <ex:Car> <ex:speed rdf:datatype=‘&xsd;float>314</ex:speed> </ex:Car>
RDF Datatype Corese permet, en option, de ne pas répéter le datatype et de l’inférer à partir du schema RDFS : <rdf:Property rdf:about=‘#speed’> <rdfs:range rdf:resource=‘&xsd;float’/> </rdf:Property> <ex:Car> <ex:speed>314</ex:speed> </ex:Car> _:1 rdf:type ex:Car _:1 ex:speed 314 ^^ xsd:float
Groupement Une requête a pour réponse G1 .. Gn On peut grouper les graphes G1 .. Gn selon des critères : distinct x1 .. xn group by x1 .. xn group by connex x1 .. xn count x (by y)
Distinct Une requête a pour réponse G1 .. Gn (select) distinct x1 x2 G1 : x1=Jules, x2=Jim G2 : x1=Jim, x2=Jules Ne garder qu’un seul graphe, par exemple G1
Group by Une requête a pour réponse G1 .. Gn group by x1 x2 Joindre les graphes qui ont même x1 et même x2 Ex : grouper les documents par auteur et par année
Group by ?doc rdf:type ex:Document ?doc ex:author ?p ?doc ex:year ?y D1 John 1990 D4 Jack 2000 D2 Jack 2000 D3 John 2004
Group by Ex : grouper les documents par auteur et par année Group by ?p, ?y John 1990 D1 John 2004 D2 Jack 2000 D2 D4
Group by connex Une requête a pour réponse G1 .. Gn group by connex x1 x2 Joindre les graphes qui ont même valeur pour x1 et/ou x2
Group by connex Trouver les compétences similaires et former les classes de compétences similaires ?c1 ex:similar ?c2 Group by connex ?c1 ?c2 c1 similar c2 c4 similar c5 c6 similar c4 c3 similar c1
Group by connex Trouver les compétences similaires et former les classes de compétences similaires Classe 1 {c1 similar c2, c3 similar c1} Classe 2 {c4 similar c5, c6 similar c4}
Count Une requête a pour réponse G1 .. Gn Count x Compter les occurrences différentes de x dans le graphe résultat Ex : compter les ouvrages d’un auteur
Count Ex : compter les ouvrages des auteurs ?doc ex:author ?p Group by ?p Count ?doc John D1 D2 (2) Jack D1 D4 D6 (3)
Extensions OWL owl:TransitiveProperty owl:SymmetricProperty owl:inverseOf owl:intersectionOf owl:disjointWith
Intersection owl:Class Woman owl:intersectionOf owl:Class Human owl:Class Female Définit une équivalence entre Woman et l’intersection de Human et Female Human Female Woman
Inverse p1 owl:inverseOf p2 X p1 Y Y p2 X hasParent owl:inverseOf hasChild John hasParent Jim Jim hasChild John
Symétrie p rdf:type owl:SymmetricProperty X p Y Y p X ex:sibling rdf:type owl:SymmetricProperty John ex:sibling Jack Jack ex:sibling John
Transitivité owl:TransitiveProperty X p Y Y p Z X p Z ex:partOf rdf:type owl:TransitiveProperty ex:axis ex:partOf ex:engine ex:engine ex:partOf ex:car ex:axis ex:partOf ex:car
Règles Si une Personne est membre d’une Equipe qui participe à un Consortium Alors cette Personne est du type Participant et elle participe au Consortium
Règles de graphe CG1 CG2 [Person:?x] -(member)-[Team]- -(participate)- -[Consortium:?c] [Participant:?x] –(participate)- [Consortium:?c]
Inférences 1. Préciser le type d’un concept : [Person: ?x] -> [Participant: ?x] 2. Créer une relation entre concepts : [Participant: ?x]-(participate)-[Consortium :?c]
Inférences Permet de définir des types de concepts Un Patient est une personne qui a une maladie : IF ?x rdf:type ex:Person ?x ex:hasDesease ?d THEN ?x rdf:type ex:Patient
Règle de graphe Pour appliquer une règle C D sur un graphe G : 1. Trouver par projection une occurrence de C dans G : C’ C 2. Joindre la conclusion D au graphe G sur les concepts de C’ trouvés par projection
Syntaxe de règles RDF <cos:rule> <cos:if> <c:Person rdf:about=‘?p’> <c:member> <c:Team> <c:participate> <c:Consortium rdf:about=‘?c’/> </c:participate> </c:Team> </c:member> </c:Person </cos:if>
Syntaxe RDF <cos:then> <c:Participant rdf:about=‘?p’> <c:participate rdf:resource=‘?c’/> </c:Participant> </cos:then> </cos:rule>
Serveur Web sémantique Moteur Corese intégré dans un serveur tomcat, dans une servlet Navigation dans les ontologies RDFS par des feuilles de style
Serveur Web sémantique Interrogation du moteur via des formulaires HTML/JSP Les formulaires sont construits en connexion avec le moteur en consultant l’ontologie
Applications 2000-2001 : Comma 2002 Corese pour Samovar avec Renault 2003-2004 : Corese pour KMP, projet RNRT Cartographie des compétences sur Sophia Antipolis Version de distribution http://www.inria.fr/acacia/soft/corese 2002-2004 : ODL Inria
Comma O’Comma : Corporate Memory Management through Agents Système multi agents (Jade) Ontology en RDF : Document, Entreprise, Domaine, Utilisateur Moteur de recherche Corese : RDF en graphe conceptuels Règles de graphe
Comma Méthode: Recueil, Phase terminologique, Structuration, Validation, Formalisation en RDFS Résultat: 470 concepts, 80 relations, 13 niveaux de profondeur
Comma Haut niveau médian Niveau spécifique Aspects Entreprise Document Utilisateur Domaine
KMP KMP : Knowledge Management Platform Cartographie des compétences en Télécom sur Sophia Antipolis Serveur Web sémantique de compétence Favoriser les partenariats Ontologie en RDF : Compétence, Organisation, Domaine
Projets Futurs WebLearn : Action CNRS, eLearning, mémoire d’entreprise, génie civil, document,
Références http://www.inria.fr/acacia/cours/essi2004/corese.ppt http://www.inria.fr/acacia/soft/corese
Démo