TP Ingénierie des connaissances et Web sémantique


Nous allons vous donner une application du moteur RDF Corese embarqué dans un serveur tomcat.
L'application concerne la gestion des compétences: elle contient une ontologie formalisée en RDFS permettant en particulier de décrire les compétences des personnes (par exemple pour saisir des CV) et des annotations formalisées en RDF utilisant le vocabulaire de cette ontologie pour décrire quelques personnes.
Le TP consiste dans un premier temps à vous familiariser avec l'application, son architecture et les fonctionnalités disponibles dans cet exemple. Pour cela nous allons vous demander un certain nombre manipulations qui vous amèneront à naviguer et soumettre des requêtes au système.
Dans un deuxième temps nous vous demanderons d'étendre le modèle et les fonctionnalités disponibles afin d'intégrer une description des passe-temps telles celles que l'on trouve classiquement au bas des CV.


Installation

Récupérez une copie du serveur web sémantique basé sur la version 4 de Tomcat:
cp -r /u/invite/corby/jakarta-tomcat-4.1.18-LE-jdk14 .

Assurez vous que la variable JAVA_HOME contient bien le chemin vers le répertoire d'installation de JAVA:
JAVA_HOME=  le chemin de la jdk : /usr/java ?
export JAVA_HOME

Placez vous dans le répertoire bin de tomcat et lancez le serveur web:
cd jakarta-tomcat-4.1.18-LE-jdk14
bin/startup.sh

Accès par un navigateur à l'URL : http://localhost:8080/demo

Application

L'application demo se trouve dans le répertoire webapps/demo

Vous y trouverez les répertoires suivants :

resource : les documents RDF et RDFS et le fichier de configuration corese.properties
xslt : les feuilles de style
xml : des descriptions d'interface
jsp : des pages JSP

L'ontologie en RDFS se trouve dans resource/commarh.rdfs
Le source RDF dans les répertoires data et data2

Navigation

Colonne de gauche en milieu/bas : panel Browse
Concept tree montre la hiérarchie de classes, Relation tree montre celle des propriétés.
Commencez à naviguer dans l'ontologie en cliquant sur une classe.
Dans un éditeur de texte allez ouvrir l'ontologie et comparez son contenu avec ce que vous voyez à l'écran en navigant dans l'ontologie.

Colonne de gauche en haut: panel Search

La boite search vous permet de trouver des notions à partir des termes qui peuvent la dénoter.
Trouvez la classe "book".
Quelles sont les relations pouvant porter sur les objets de cette classe ?
Trouvez  la relation "designation" et regardez ses instances.

Colonne de gauche au milieu/haut :
panel Query

Main (en) donne accès à une interface de requête.

Tester les formulaires ; la soumission se fait par le bouton Search en haut, ou par le bouton More pour une recherche approchée.
Tester différentes feuilles de style.

Rechercher des compétences en Java, en XML, etc.

Dans le panneau Generic Query vous pouvez saisir des requêtes sous forme de triplets RDF comme :

(1) ?x rdf:type c:Researcher


(2)
?x rdf:type c:Researcher
    ?x c:hasCreated ?doc

(3) ?x rdf:type c:Researcher
    ?x c:hasCreated ?doc
    ?doc c:Title ?t

(4) ?x rdf:type c:Researcher
    ?x c:hasCreated ?doc
    ?doc c:Title ?t
    ?t ~ knowledge

(5) ?x rdf:type c:Researcher
    ?x c:hasCreated ?doc
    ?doc c:Title ?t
    ?t ~ knowledge
    ?x ?p ?y

En regardant des exemples d'annotations dans un éditeur de texte, construisez votre propre requête en triplets.

Extension du modèle

Vous allez maintenant commencer à étendre le modèle.
  1. Munissez vous d'un crayon et d'un papier et réfléchissez à un domaine (ou plus) de loisirs / passe-temps (ex: art, sport, etc.).
  2. Concevez une ontologie de ce domaine avec au moins trois niveaux de profondeur dans les classes, quelques relations, les définitions et les termes, le tout devant être bilingue.
  3. Naviguez dans l'ontologie pour trouver les points d'accroche où vous allez faire vos extensions i.e. les classes et relations pour lesquelles vous allez créer de nouvelles sous-classes et sous-relations.
  4. Utilisez votre éditeur de texte pour ajouter vos nouvelles classes et nouvelles relations dans l'ontologie.
  5. Créer au moins de nouvelles annotations vous décrivant à la fois du point de vue professionnel et du point de vue de vos loisirs.
  6. Relancez votre application: bin/shutdown.sh puis bin/startup.sh
  7. Naviguez dans l'ontologie pour retrouver vos classes et relations et vérifiez que les instances que vous avez créées existent bien
  8. Ecrivez une requête pour extraire vos profils

Extension des interfaces

Les formulaires sont décrits dans un "langage maison" ayant une syntaxe XML.
Ouvrez le fichier xml/demo.xml dans un éditeur de texte; appelez nous pour une visite guidée.
A titre d'exemple le code suivant en ligne 91 permet de créer la combo box "Profession" du Panel "Person" que vous avez utilisez précédemment (Requête dans le formulaire Main (en)):

    <select name='type' title='Profession' group='true' count='true'>
        <!--class>c:Person</class-->
        <option value='c:Person'>any</option>
        <query xslt='extract.xsl'>
            ?c rdfs:subClassOf c:Person
            ?c rdfs:label ?l
        </query>
    </select>

Ce code demande à créer une liste des sous classes de c:Person avec leur label et à en faire une combo box.

Le fichier demo.xml est transformé en JSP en lui appliquant la feuille de style xml/form.xsl

Modifiés le fichier demo.xml pour inclure dans le panel "Skill" la possibilité de poser une requête sur les loisirs.
Ecrivez en Java le petit programme permettant d'appliquer la feuille de style form.xsl à demo.xsl.
Le résultat de la transformation est un nouveau fichier demo.jsp avec lequel vous remplacerez l'ancien fichier jsp/demo.jsp.
Testez votre nouveau formulaire.

Règles

En utilisant le formulaire de requêtes trouvez-vous des experts en EJB Programming ?
Et après avoir fait tourner le moteur de règles (bouton Rule à côté de Search et More) ?
  1. Ouvrez le ficher resource\commarh.rul dans un éditeur.
  2. En ligne 167 vous trouverez une règle d'inférence; pouvez-vous deviner sa fonction et en quoi elle est responsable de la réponse obtenue précédemment.
  3. Ecrivez une règle permettant de déduire que si vous avez écrit un document sur un loisir alors ce loisir fait partie de vos passe-temps.
  4. Ajoutez une annotation permettant de tester la règle.
  5. Relancez votre application et faites une requête avant et après application des règles pour vérifier le bon fonctionnement.