TP d`initiation aux ontologies

Transcription

TP d`initiation aux ontologies
TP d’initiation aux ontologies
1ère séance : découverte de Protégé
Master Web Intelligence - Philippe Beaune
Mardi 2 novembre 2004 après-midi / 3h30
Résumé
Ce premier T.P. consiste en la découverte du logiciel Protégé. C’est
ce logiciel qui vous servira ensuite à construire vous-même votre propre
ontologie. L’évaluation du cours Web Sémantique portera notamment sur
cette réalisation personnelle, guidée dans les séances suivantes de TP.
Vous n’avez donc rien à rendre à l’issue de cette première séance de TP.
Profitez-en pour être curieux et fouiner autour des concepts qui vous sont
suggérés dans ce TP.
1
Objectif et moyens
À l’issue de ce T.P., vous devrez savoir manipuler l’environnement de construction d’ontologies Protégé et avoir bien intégré les concepts qui se rapportent
aux classes, super-classes, sous-classes, méta-classes et instances d’une
classe ; ainsi que les notions de propriétés (slots) de classes ou d’instances, et
les restrictions applicables à ces propriétés.
Le logiciel Protégé n’a pas été installé, faute de temps, sur les machines des
salles de TP (ni sous Linux, ni sous Windows).
Il se trouve à l’adresse suivante :
http://www.emse.fr/~beaune/protege/
Pour l’installer, sous Linux, copiez le fichier install protege.bin sur votre
disque et lancez ce programme. Aux premier et deuxième écrans, lisez et choisissez Next. Au troisième écran, choisissez Everything puis Next. Sur les écrans
suivants, choisissez le répertoire où vous souhaitez installer Protege, puis la machine virtuelle Java, etc. L’installation ne dure que quelques secondes.
Si vous ne souhaitez pas travailler directement dans les répertoires où est
installé Protege, alors vous devez, dans le répertoire où vous souhaitez travailler,
créer un lien sur le répertoire plugins de Protege :
cd mon-repertoire-ou-je-veux-travailler
ln -s /home/chez-moi/ainsi-de-suite/Protege_2.1/plugins .
Puis vous devez copier localement le fichier Protege.lax, et y ajouter à la fin
la ligne suivante :
1
protege.properties.in.user.home=true
Pour lancer Protege, il vous suffit maintenant d’entrer, depuis votre répertoire de travail, la ligne de commande suivante :
java -jar /home/chez-moi/ainsi-de-suite/Protege_2.1/protege.jar
Pour prolonger ces séances de T.P. chez vous, vous pouvez installer Protégé
sur votre machine personnelle en le téléchargeant à partir de l’url suivante :
http://protege.stanford.edu/
Il existe aussi bien pour Solaris, Linux, Mac OS X, Windows, AIX, HP-UX
qu’Unix. Pour voir (et éventuellement installer) des plugins supplémentaires,
allez à l’url :
http://protege.stanford.edu/plugins.html
2
Obervation presque passive d’un exemple
Vous venez donc de lancer Protégé et vous êtes invité à ouvrir un projet : choisissez l’unique projet proposé dans la zone centrale : newspaper. Vous
pouvez ainsi découvrir cet exemple tout prêt. Vous pouvez aussi consulter une
documentation très sommaire, avec votre navigateur Web préféré, dans le sousrépertoire racine de Protégé : fichier index.html. Parmi ces documentations,
le Guide Utilisateur est installé ici :
http://www.emse.fr/~beaune/protege/UserGuide.pdf
Lorsque vous aurez terminé cette promenade, fermez ce projet et créez un
nouveau projet (choisissez l’option par défaut Standard Text Files).
3
Classes et instances de classes
Vous êtes donc en face d’un projet (presque) vide : les classes présentes sont
indispensables mais nous y reviendrons plus loin. Pour créer une première classe,
sélectionnez la classe :THING et cliquez sur le C juste au dessus.
À droite, dans la rubrique Name, entrez le nom de votre nouvelle classe
(Humains), puis cliquez sur cette même classe dans la zone de gauche afin que
ce nom se fige. Nous conviendrons de nommer les classes au pluriel et avec une
majuscule (convention traditionnellement admise dans la communauté Igénierie
des Connaissances).
Pour ajouter une propriété (slot) aux futures instances de cette classe, sélectionnez cette classe et rendez-vous dans la zone de gauche intitulée Template
slots. Cliquez sur le C de cette zone et entrez le nom de cette nouvelle
propriété : nom. Nous conviendrons de ne pas donner de majuscules aux noms de
propriétés. Fermez cette fenêtre en cliquant sur le x en haut à droite de cette
fenêtre. La nouvelle propriété existe donc désormais, attachée à cette classe.
Créez une autre propriété intitulée aargh. Puisque c’était une erreur, il faut la
supprimer : sélectionnez-la puis cliquez sur - . Elle a en effet disparu. Mais en
fait elle n’a fait que disparaitre de cette classe. La propriété elle-même existe
2
encore. Pour la supprimer du projet, il faut aller dans la feuille Slots, et la
supprimer vraiment ici grace au bouton croix rouge à droite du C . Vous
constatez donc que les propriétés existent au niveau projet et peuvent également
être attachées à une ou plusieurs classes.
Revenez sur la feuille Classes. Entrez de nouvelles propriétés : prénom, a
^ge
et sexe. Chacune de ces propriétés peut avoir un type différent. Vous allez donc
maintenant modifier chacun de ces types : double-cliquez sur la propriété a
^ge
et choisissez View top-level slot, ce qui vous permettra de modifier cette
propriété au viveau projet et pas seulement au niveau de cette classe. Dans le
champ Value type, choisissez Integer. Tant que vous êtes sur les restrictions
de a
^ge, vous pouvez aussi imposer un minimum et un maximum à cette propriété, puisqu’elle est de type entier. De même, imposez à nom d’être présent, à
prénom de pouvoir être multiple, et à sexe d’être de type Symbol (masculin ou
féminin). Créez une nouvelle propriété nationalité qui aura pour valeur par
défaut française.
Si maintenant vous allez sur la feuille Instances, que vous sélectionnez la
classe Humains, puis que vous cliquez sur C de la zone Direct Instances,
un formulaire apparait dans la troisième zone. D’une part vous remarquez que
la zone nom est entourée de rouge : cela signifie qu’une restriction n’est pas
respectée. En effet, une valeur est requise pour cette propriété et pour l’instant
elle est vide. D’autre part vous remarquez que ce formulaire n’est pas forcément
disposé comme que vous l’auriez souhaité. Enfin, si vous entrez quelque chose
dans la zone nom, cela ne modifie pas le nom de l’instance dans la zone centrale.
Rendez-vous donc à la feuille Forms et après avoir sélectionné Humains à
gauche, vous pouvez arranger le formulaire (à droite) comme bon vous semble.
De plus si vous cliquez sur <Display Slot>, vous pouvez choisir quelle sera la
propriété qui donnera, par défaut, son contenu comme nom aux instances sur
la feuille des instances (choisissez nom). Notez qu’ensuite vous pouvez choisir
l’affichage que vous souhaitez lorsque vous êtes sur la feuille des instances.
Entrez de nouvelles instances pour cette classe. Si vous voulez changer une
instance de classe, dans la feuille Instances, faı̂tes glisser l’instance sur la classe
désirée (seules les propriétés communes seront conservées). Vous aurez eu soin,
auparavant, de créer une nouvelle classe.
Vous remarquez que d’autres restrictions sont possibles, comme Template
Values qui permet d’imposer une valeur à une propriété. Vous pouvez aussi
entrer des valeurs hors limites pour a
^ge.
Vous avez aussi remarqué un C et une croix rouge sur fond jaune en haut
et à droite de certaines fenêtres : ces 2 boutons permettent de fixer des pensebêtes (à la mode Post-It) un peu partout dans votre projet et de les détruire
lorsqu’ils sont devenus inutiles.
4
Relations entre instances
Pour créer des relations entre Humains, par exemple est ami de, il faut
créer une nouvelle propriété nommée : est ami de, avec pour Value type :
Instance, et qui a comme classe permise : Humains. Vous pouvez maintenant
relier quelques instances d’Humains.
Si de plus, cette relation est symétrique, alors donnez à cette propriété une
3
propriété inverse (Inverse slot) qui sera elle-même. Mais attention, si plusieurs personnes sont amies d’une même personne, alors vous avez intérêt à
déclarer que la propriété est ami de peut être multiple.
Mais vous pouvez aussi inventer des relations non symétriques, comme par
exemple la parenté et la filiation. Essayez ...
Et pour aller plus loin, créez une classe livres, et un lien possède avec un
lien inverse appartient à.
Il est aussi possible de gérer graphiquement la création d’instances et les
relations entre elles. Pour cela un tutoriel est disponible à cette adresse :
http://protege.stanford.edu/doc/tutorial/graph_widget/
Ne tentez ce tutoriel que si vous pensez en avoir le temps. Sinon vous pourrez
le faire ultérieurement.
5
Super-classes et héritage
Vous allez maintenant créer plusieurs sortes d’humains : des auteurs, des
professeurs, et des étudiants. Tous auront certaines propriétés en commun (nom,
prénom, âge, ...). Vous allez donc créer des sous-classes de la classe Humains.
Pour cela, dans la feuille Classes, vous sélectionnez la classe que vous voulez
dériver et vous cliquez sur le C . Si jamais vous créez une classe avec une
mauvaise super-classe, vous pouvez, tant que cette classe n’a pas d’instances
directes, faire glisser cette classe sur la super-classe voulue.
Vous remarquez que ces 3 nouvelles sous-classes ont toutes hérité des propriétés de leur super-classe Humains (l’icône des propriétés héritées S est sur
fond blanc, au lieu de bleu).
Vous pouvez maintenant modifier ces propriétés héritées pour, par exemple,
imposer à un professeur d’avoir au moins 30 ans, et à un étudiant d’avoir au
plus 28 ans. Pour cela sélectionnez la classe voulue, puis sa propriété à modifier,
et enfin cliquez sur le V entouré d’un carré bleu et d’un rond jaune. L’autre
V , celui qui n’a que le carré bleu, modifie la propriété au niveau projet mais
pas au niveau de la classe. Notez que vous ne pouvez modifier le type (Value
type) d’une propriété que si celle-ci est de type Any dans sa super-classe.
Et puis vous pouvez ajouter des propriétés propres à telle ou telle sousclasse. Par exemple, ajoutez la relation a écrit reliant Auteurs à Livres, qui a
pour relation inverse la propriété auteur de Livres. Si vous entrez de nouvelles
instances de Auteurs, Professeurs ou Etudiants, vous remarquerez que le
masque de saisie (Form) de Humains a été hérité par ses sous-classes.
Une classe peut aussi avoir plusieurs super-classes. Ce sera le cas, par exemple,
si désormais on crée un nouvelle classe Jeunes auteurs devant hériter à la fois
de Auteurs et de Etudiants. Pour cela créez une sous-classe de Auteurs et
dans la zone en bas à gauche ajoutez-lui comme super-classe supplémentaire
Etudiants. En cas de conflit d’héritage, c’est la première super-classe qui prévaut :
testez-le.
En haut à gauche de la feuille Classes, vous avez une liste déroulante qui
vous permet d’afficher les liens entre classes selon plusieurs modes. Par défaut,
sont affichées toutes les classes reliées par le lien de subsomption.
4
6
Classes abstraites et classes concrètes
Si maintenant vous ne souhaitez pas que des humains puissent n’être ni auteur, ni professeur, ni étudiant, alors vous devez empêcher que l’utilisateur puisse
créer des instances directes de la classe Humains. Pour cela, il faut que la classe
Humains soit abstraite (Abstract). Par défaut, lorsque les classes sont créées,
elles sont concrètes (Concrete). Rendez Humains abstraite et notez que vous
ne pouvez plus lui créer d’instances directes. Si cette classe avait des instances
directes, vous êtes averti que cela va les détruire. Dans les anciennes versions de
Protege, cela ne les supprimait pas : vous deviez le faire explicitement.
7
Méta-classes
Les méta-classes sont une sorte de classes dont les instances sont exclusivement des classes. Une méta-classe peut néanmoins avoir une ou plusieurs sousclasses qui sont alors aussi des méta-classes. Les méta-classes sont repérables
dans Protégé par une icône Cjsur fond vert, alors que celle des classes est
sur fond jaune. Toute classe, dans Protégé, est instance d’une méta-classe. Par
défaut, elles sont instances de :STANDARD-CLASS.
En allant voir cette méta-classe :STANDARD-CLASS (c’est une sous-classe
de la méta-classe abstraite :CLASS, elle-même sous-classe de :SYSTEM-CLASS),
vous reconnaı̂trez les différentes propriétés des classes qui vous avez créées :
:NAME, :DOCUMENTATION, :ROLE, . . .
Comme pour les classes, les propriétés génériques des méta-classes (Templates slots) deviennent des propriétés (Slots) de leurs instances. Ainsi, si vous
souhaitez que toutes les classes que vous allez créer aient une propriété créateur
contenant vos nom et prénom, il vous suffit de créer une sous-classe de la métaclasse :STANDARD-CLASS (nommez-la Ma Méta-Classe) à laquelle vous ajoutez une propriété créateur avec comme Template Values vos nom et prénom
(mettez la même chose pour Default). Ensuite lorsque vous créez une nouvelle
sous-classe, faı̂tes-le en sélectionnant la super-classe désirée, puis avec le bouton de droite de la souris choisissez Create sub-class using metaclass... :
vous pouvez maintenant choisir la méta-class pour votre nouvelle classe.
Autre application : vous avez besoin de créer une hiérarchie de classes abstraites. Plutôt que de changer à chaque fois le role des classes à leurs créations,
vous allez créer une méta-classe qui imposera à ses instances d’être des classes
abstraites. Créez une nouvelle méta-classe, sous-classe de :STANDARD-CLASS.
Nommez-la Ma Méta-Classe Abstraite. Modifiez sa propriété :ROLE pour lui
donner comme valeur par défaut la valeur Abstract. Maintenant, si vous créez
une nouvelle classe, instance de Ma Méta-Classe Abstraite, vous obtiendrez
une classe dont le role sera Abstract. Et toute nouvelle sous-classe de cette
classe, ayant par défaut même méta-classe que sa super-classe, sera elle aussi
abstraite par défaut.
Notez que lorsque vous changez la méta-classe d’une classe, cela n’est pas propagé à ses sous-classes. Pour propager ce changement de méta-classe aux sousclasses, il faut sélectionner la classe désirée puis choisir l’item Change metaclass
of subclasses avec le bouton droit de la souris.
5
8
Ma première petite ontologie
Vous participez à un projet de vente en ligne de livres proposés par différents
libraires. Pour permettre aux systèmes d’information de chaque librairies de
communiquer correctement avec l’application centrale, vous êtes chargé de mettre en place une ontologie qui servira à tous les libraires. À partir d’ici, il n’est
plus nécessaire de se jeter a priori sur le clavier : prenez du recul, mobilisez vos
neuronnes, munissez-vous d’un crayon et de feuilles de papier, réfléchissez, . . .,
puis quand vous avez les idées claires sur l’ontologie que vous allez créer, alors
retournez sur le clavier.
Si vous avez le temps, jetez un oeil cette page (notamment à partir de la
page 4) :
http://www.emse.fr/~beaune/protege/ontology101.pdf
Vous allez devoir créer une classe d’auteurs, ayant obligatoirement chacun
un nom et un prénom, puis un éventuel pseudonyme (voire plusieurs), une nationalité (ou plusieurs), une ou plusieurs langues d’écriture. Ces humains pourront
être des écrivains, des essayistes, des romanciers, des journalistes, des traducteurs, et pourront avoir une biographie résumée. Pour certains d’entre eux, on
dispose également de titres (professeur dans tel établissement, ancien ministre,
etc.).
Du côté des maisons d’édition, il vous faudra une classe pouvant contenir un
nom, une adresse, avec un champ particulier pour la ville.
Et puis une classe pour les ouvrages qui seront soit des essais, soit des romans,
soit des nouvelles, soit des poèmes, etc. Ces ouvrages auront un numéro ISBN,
un prix (qui dépendra du libraire), un ou plusieurs auteur(s), un éditeur, un titre
et un éventuel sous-titre, ainsi qu’un délai de livraison dépendant du libraire.
Il faudra donc aussi une classe pour les libraires, désignés par un nom et une
adresse.
Analysez soigneusement ce projet, et réalisez votre première ontologie. Pour
la valider plus facilement, vous génèrerez une version html de cette ontologie
avec l’item Generate html ... du menu File.
Si vous avez le temps d’entrer quelques instances, vous pourrez tester la
feuille Queries. Pour valider les liens entre vos instances, utilisez le plugin
Instance Tree : allez l’item Configure... du menu Project et laissez agir
votre intuition. . .
Vous pouvez aussi tenter d’utiliser Jambalaya, mais ce plugin semble buggué.
FIN
6