Tutoriel
Création d'une petite ontologie

Guy Lapalme

Ce document décrit pas à pas les étapes (indiquées par ★) pour la création d'une ontologie. Le but du document est la familiarisation avec les principales commandes de l'interface de l'éditeur d'ontologie Protégé.

Le Site de Protégé explique comment explorer une ontologie existante, mais ici vous allez en créer une nouvelle.

Lancement de Protégé

Un conseil: Pour suivre ce tutoriel, il peut être pratique de diviser votre écran en deux parties: une pour Protégé et une autre qui affiche ce document.

Informations à exprimer dans l'ontologie

Cette ontologie est adaptée de l'exemple 3.1 (p 17) d'un texte de Grigoris Antoniou and Frank van Harmelen. Elle était aussi présentée dans la deuxième édition Semantic Web Primer (pages 135 et suivantes).

Dans les énoncés à codifier dans l'ontologie, la convention suivante est utilisée:

Ces choix devraient en principe être effectués suite à une analyse complète des besoins, mais nous les imposons ici pour les besoins de cet exercice.

  1. Un Animal est une classe.
  2. Une Plante est une classe, mais disjointe d'Animal.
  3. Un Arbre est une sous-classe de Plante.
  4. Une Branche est une partie d'un Arbre.
  5. Une Feuille est une partie d'une Branche
  6. Un Herbivore est un Animal qui ne mange qu'une Plante ou une partie d'une Plante.
  7. Un Carnivore est un Animal qui mange aussi un Animal.
  8. Une Girafe est un Herbivore qui ne mange que des Feuilles.
  9. Un Lion est un Carnivore qui ne mange que des Herbivores.
  10. Une PlanteSavoureuse est une Plante qui est mangée par un Herbivore et aussi par un Carnivore.
Étapes de création de l'ontologie
Définir l'Ontology IRI pour un URI qui vous ressemble. et enregistrez l'ontologie.
Enregistrer l'ontologie avec File/Save. Comme format de sauvegarde de l'ontologie, je suggère RDF/XML et l'endroit sur votre disque où sera conservée l'ontologie.
En principe, votre écran devrait ressembler à celui-ci:

Écran initial de lancement

L'écran est divisé en vues (views en anglais) qui dépendent des onglets (tabs en anglais) accessibles en cliquant sur un des éléments d'une liste de titres Active Ontology, Entities, .... Appuyer sur chacun de ses onglets pour constater les changements d'affichage des vues. Certaines vues (par exemple Entities) possèdent eux-mêmes des sous-onglets qui ont eux-mêmes plusieurs vues. On peut configurer l'écran en ajoutant des vues et des onglets (tabs) dans les menus Window>View et Window>Tabs. Voir ce document pour plus de détails sur la manipulation de l'interface. Il y a des vidéos expliquant comment manipuler les vues et les onglets.
Définition de classes simples
Dans l'onglet Entities, choisir le sous-onglet Classes. Cliquer sur le mot owl:Thing dans la vue Class hierarchy qui est la racine de toutes les classes que nous allons créer. En appuyant sur le premier bouton en haut à gauche de cette vue, un dialogue apparait qui permet de créer une classe qui sera un enfant de la classe sélectionnée. On peut ainsi définir des sous-classes. Le deuxième bouton permet de créer une classe soeur de la classe sélectionnée. Le troisième bouton détruit la classe sélectionnée ainsi que ses sous-classes.
Faire de même pour créer la hiérarchie des classes dont les noms sont en gras dans la liste des énoncés ci-haut pour obtenir une figure semblable à celle-ci (ne pas tenir compte de l'ordre des classes et sous-classes). Ne définir ici que les noms des classes et leur hiérarchie, sans tenir des autres types de contraintes pour le moment.

Attention: Ne pas oublier d'indiquer que les classes Plante et Animal sont disjointes en choisissant une de celles-ci et en indiquant l'autre dans Disjoint With de la vue Description.

Après la création initiale des classes

La partie droite de l'écran permet de voir des informations sur les classes et d'en changer les caractéristiques.

Définition des propriétés
Appuyer sur l'onglet Object Properties et, en utilisant le bouton en haut à gauche, créer les 3 propriétés suivantes: Vous devriez obtenir une figure semblable à celle-ci:

Après la définition des propriétés

Sauver l'ontologie avec l'item Save du menu système File. Ceci créera un fichier dans le format RDF/XML qu'il peut être instructif d'ouvrir avec un éditeur de texte ou XML pour voir le code généré par Protégé.
Définition de classes complexes
Revenir dans l'onglet Classes pour compléter les descriptions de classes complexes. Pour l'énoncé IV

«Une Branche est une partie d'un Arbre»

il faut choisir la classe Branche dans la vue Class hierarchy et cliquer sur SubClass Of dans la vue Description pour faire apparaître une fenêtre permettant de définir une expression définissant la superclasse. Dans cette fenêtre, choisir l'onglet Object restriction creator et sélectionner la propriété partieDe à gauche, Arbre à droite et Only (universal) dans le menu en bas comme dans cette figure:

Définition d'une première classe complexe (énoncé IV)

Ceci permet d'exprimer qu'une branche fait toujours partie d'un arbre et lorsqu'on clique OK, on obtient sous la rubrique SubClass Of de la vue Description l'expression correspondante en syntaxe de Manchester: partieDe only Arbre [plus de détails sur la syntaxe des expressions de classe].

Effectuer une manipulation similaire pour l'énoncé V

«Une Feuille est une partie d'une Branche»

de façon à obtenir l'expression partieDe only Branche comme SubClass Of de Feuille.
Pour l'énoncé VI

«Un Herbivore est un Animal qui ne mange qu'une Plante ou une partie d'une Plante»

choisir Herbivore dans la vue Class hierarchy et, dans la vue Description à l'item SubClass Of, cliquer sur le dernier bouton à droite (Edit) pour écrire Animal and mange only (Plante or partieDe only Plante) directement l'expression en syntaxe de Manchester dans l'onglet Class expression editor de la fenêtre qui apparaît, comme dans la figure suivante:

Définition d'une autre classe complexe (énoncé VI)

Au lieu de taper les noms des classes ou propriétés, on peut les glisser à partir d'autres vues et ainsi éviter des erreurs de frappe. L'éditeur effectue une vérification syntaxique de l'expression à mesure de la frappe. Il est possible d'obtenir une liste de suggestions en tapant sur CTRL-espace ou TAB en tout temps.

Pour l'énoncé VII

«Un Carnivore est un Animal qui mange aussi un Animal

modifier la définition de la superclasse (à l'item SubClass Of!) pour indiquer qu'un carnivore peut aussi manger un autre carnivore pour obtenir la figure suivante:

Définition associée à l'énoncé VII

Pour VIII

«Une Girafe est un Herbivore qui ne mange que des Feuilles.»

ajouter une superclasse pour obtenir la figure suivante:

Définition associée à l'énoncé VIII

Pour IX

«Un Lion est un Animal qui ne mange que des Herbivores.»

Ajouter une superclasse pour obtenir la figure suivante:

Définition associée à l'énoncé IX

Pour X

«Une PlanteSavoureuse est une Plante qui est mangée par un Herbivore et aussi par un Carnivore»

ajouter deux superclasses à PlanteSavoureuse pour obtenir la figure suivante:

Définition associée à l'énoncé X

Lorsque les expressions de classe deviennent complexes, il est utile d'ajouter une annotation de type comment en appuyant sur le signe + à côté de Annotations dans la vue Annotations ce qui fait apparaître une fenêtre semblable à la suivante:

Annotation associée à l'énoncé X

Il peut être intéressant d'explorer la hiérarchie à l'onglet global DL Query. L'interrogation de l'ontologie est effectuée avec un langage spécial inspiré de la syntaxe de Manchester décrit dans ce document.

Il est aussi possible d'avoir une visualisation de l'ontologie avec la vue OntoGraf. Si cette vue n'apparaît pas, choisissez l'item de menu système Window>Views>Class views>Ontograf et placer le point qui apparaît dans une vue existante et cliquer pour y ajouter cette nouvelle vue comme onglet à cette vue.

Ajout d'individus
Ajouter des instances des classes dans l'onglet Individuals by class en sélectionnant une classe dans la vue en haut à gauche et en ajoutant un individu comme membre dans la vue Direct instances.

Ajouter les individus suivants:

Pour indiquer que ces individus sont tous différents, il suffit d'en choisir un et d'appuyer sur le + à côté de Different individuals dans la vue Description et de sélectionner les autres individus dans la fenêtre qui apparaîtra. Tous les individus seront alors considérés comme distincts comme on peut le constater en les sélectionnant dans la vue Individuals.

Une figure équivalente à la suivante devrait alors apparaître:

Ajout des individus

Vérification de la cohérence de l'ontologie

Le grand intérêt de l'utilisation de Protégé est la possibilité de vérifier si l'ontologie créée ne contient pas des définitions contradictoires. Avec une ontologie aussi simpliste que celle que nous avons construite dans ce document, il est facile de vérifier à la main la cohérence du tout, mais ceci est pratiquement impossible pour des cas plus complexes. Nous allons illustrer le processus de vérification en créant une classe qui serait à la fois une plante et un animal.

Ajouter une nouvelle classe AnimalPlante sous owl:Thing et définir à SubClass Of l'expression Animal and Plante. La classe AnimalPlante sera alors placée à la fois sous Animal et Plante comme dans la figure suivante:

Classe héritant de Plante et Animal

Dans le menu Reasoner, sélectionner HermiT, s'il n'y a pas déjà un crochet dans l'item de menu; sélectionner ensuite Start Reasoner. Dans la vue Class hierarchy en choisissant l'item de menu Inferred les classes inconsistantes devraient apparaître en rouge, comme dans cette figure:

Présentation des classes inconsistantes

La classe AnimalPlante apparaît comme inconsistante car nous avons déclaré (à l'énoncé II) que les classes Animal et Plante doivent être disjointes. Cette explication est d'ailleurs fournie par Protégé si on clique sur le point d'interrogation à côté de owl:Nothing dans la vue Description.

Pour revenir à une ontologie consistante, il suffit d'éliminer la définition des superclasses de AnimalPlante. Il faut choisir l'item de menu Asserted, choisir la classe à éliminer et cliquer sur le troisième bouton. Pour s'assurer que tout est maintenant cohérent, choisir à nouveau Synchronize reasoner dans le menu système Reasoner. Il ne devrait plus y avoir d'item Nothing en rouge dans la vue Class hierarchy lorsqu'on choisit l'item Inferred.
Pour aller plus loin...

Ce petit exemple ne fait pas ressortir toutes les possibilités de Protégé, en particulier nous n'avons pas expliqué comment modifier les vues et leur position, ou créer plusieurs classes en spécifiant leur hiérarchie, ni toutes les subtilités de la modélisation d'ontologie.

La prochaine étape pourrait être maintenant de lire et d'expérimenter avec cet autre tutoriel qui développe un exemple du domaine de la pizza en utilisant d'autres éléments de l'interface.

Une alternative à Protégé est WebProtégé qui offre sensiblement les mêmes possibilités que la version desktop sans nécessiter d'installation locale. Toutefois, l'interface est un peu moins intuitive (il faut utiliser la syntaxe Manchester pour créer des classes complexes) et il n'intègre pas la possibilité d'appeler un reasoner. WebProtégé facilite toutefois le travail en équipe en coordonnant les opérations d'éditions sur une même ontologie et en journalisant les opérations d'édition.