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