TPS - 2017§

Préparation

Téléchargez et installez le logiciel Protégé.

On vous rappelle que Protégé utilise une syntaxe différente de celle vue en cours ; une annexe vous donne les correspondance.

Votre travail

Le rendu de ce travail (réalisé individuellement ou en binôme) est attendu pour lundi 30 janvier à 23h59, à déposer sur Tomuss (UE-INF1103M-LD), sous forme d’une archive contenant 1) un rapport en PDF répondant aux questions ci-dessous, et 2) le fichier OWL correspondant à l’ontologie que vous aurez réalisé dans la deuxième partie.

Si vous travaillez en binôme, décidez qui des membres déposera le fichier, puis les deux membres du binôme inscrivent le numéro d’étudiant du “déposant” dans la cellule Déposant1. Ensuite seulement, le déposant déposera le fichier dans Tomuss. L’autre membre du binôme devra alors vérifier que le fichier déposé apparaît également sur son profil.

Partie I§

Lancez Progété, et choisissez l’option « Open OWL ontology from URI », et ouvrez l’ontologie :

Pour les deux premières questions, vous vous concentrerez sur l’onglet Entities. Notez aussi que les termes de l’ontologie, où qu’ils apparaissent, sont des liens vers la définition correspondante. Ceci vous permet de naviguer d’un élément à l’autre, sans avoir à repasser à chaque fois par les panneaux de gauche. Notez enfin que le bouton < en haut à gauche vous permet de revenir en arrière dans votre navigation.

Question 1§

Pour chacun des éléments suivants, retranscrivez ce qu’en dit l’ontologie 1) dans la syntaxe classique des logiques de description (vue en cours) et 2) en français.

  1. la classe Restaurant
  2. la propriété sert
  3. la propriété serviPar
  4. la classe RestaurantJaponnais
  5. la classe Bouchon
  6. la classe Formule
  7. la classe Gastronomique

Important : contentez-vous de transcrire ce qui est explicitement dit par l’ontologie, pas ce que vous en déduisez ni ce que vous « devinez » en fonction des termes choisis.

Question 2§

Réglez les préférences du moteur d’inférence (raisonneur) : dans le menu File > Preferences, onglet Reasoner, cochez toutes les cases et validez ; puis dans le menu Reasoner, assurez-vous que HermiT est coché. Activez ensuite le moteur d’inférence par le menu Reasoner > Start reasoner (CTRL+R).

Notez que de nouvelles connaissances (sur fond jaune pale) apparaissent. Pour chacune des classes et propriétés listées à la question précédente, décrivez les connaissances ajoutées par l’inférence sous les rubriques Subclass of et Disjoint with, et expliquez ces inférences (vous pouvez pour cela vous aider du bouton ? situé à droite de chaque connaissance).

Question 3§

Dans le menu Window > Tabs, cochez DL Query, puis ouvrez l’onglet correspondant. Dans le panneau de droite de cet onglet, assurez-vous que les cases Direct superclasses, Equivalent classes et Direct subclasses sont bien cochées.

Dans l’onglet DL Query, écrivez des requêtes permettant de répondre aux questions suivantes. Pour chaque question, vous donnerez dans votre rapport :

  1. la requête posée dans la syntaxe Protégé,
  2. les réponses données par Protégé pour Direct superclasses, Equivalent classes et Direct subclasses, et
  3. une explication synthétique en français du résultat.

Q3.1 :

Est-il possible d’avoir un dessert et une boisson dans une formule midi ?

Q3.2 :

Est-il possible d’avoir un cappuccino dans un restaurant japonnais ?

Q3.3 :

Est-il possible d’avoir un cappuccino dans une pizzeria ?

Partie II§

Question 4§

On vous demande maintenant de créer une nouvelle ontologie avec Protégé, répondant au cahier des charges suivant :

Notre application porte sur quatre types d’objets distincts : les personnes, les établissements, les formations et les unités d’enseignement (UE). Un établissement dispense des formations. Une formation contient des UEs. Une personne peut être employée par un établissement, être inscrite à une formation, enseigner une UE, suivre une UE.

Les établissements peuvent être de plusieurs types distincts : École d’Ingénieur, IUT, Université. Les formations peuvent être de plusieurs types distincts : DUT, License, Master, Diplôme d’Ingénieur. Les écoles d’ingénieur ne dispensent que des diplômes d’ingénieur. Les IUT ne dispensent que des DUT. Les universités ne dispensent que des licenses et des master.

Les UEs peuvent être mutualisées entre plusieurs formations, mais uniquement entre DUT et License d’une part, et entre Master et Diplôme d’ingénieur d’autre part.

Bonus : un étudiant inscrit à une formation suit nécessairement les UEs de cette formation.

Question 5§

Activez le moteur d’inférence, et décrivez (en les expliquant) 2 nouvelles connaissances apparues dans votre ontologies, qui vous semblent particulièrement intéressantes.

Vous pouvez également choisir de décrire des connaissances que vous auriez souhaité voire ajoutées par le moteur d’inférence mais qui ne l’ont pas été, en expliquant pourquoi et ce qu’il faudrait ajouter (où retirer) pour qu’elles le soient.

Partie III§

Nous allons maintenant manipuler les ontologies programatiquement (en Java), en utilisant la bibliothèque OWL API, et le raisonneur Hermit.

Pour installer les dépendances avec Maven, ajoutez ces lignes à votre pom.xml :

<dependency>
    <groupId>net.sourceforge.owlapi</groupId>
    <artifactId>owlapi-distribution</artifactId>
    <version>5.0.5</version>
</dependency>
<dependency>
    <groupId>net.sourceforge.owlapi</groupId>
    <artifactId>org.semanticweb.hermit</artifactId>
    <version>1.3.8.500</version>
</dependency>

Votre travail§

  1. Écrivez un programme qui charge l’ontologie Restaurants vue à dans la partie I, qui vérifie si elle est consistante, puis qui répond aux questions 3-1, 3-2 et 3-3 ci-dessus.
  2. Écrivez un programme qui charge l’ontologie Restaurants,
    • ajoutez-y une classe représentant spécialité de votre choix,
    • puis créez une instance de restaurant servant cette spécialité.
    • Vérifiez que l’ontologie est toujours consistante,
    • puis écrivez (sauvegardez) le code de l’ontologie sur la sortie standard.

Quelques indications§

Vous aurez besoin de créer les objets suivants :

  • un manager, créé par la méthode statique org.semanticweb.owlapi.apibinding.OWLManager.createOWLOntologyManager,
  • une data factory, créée par la méthode getOWLDataFactory de votre manager.

Pour charger une ontologie, utilisez la méthode loadOntologyFromOntologyDocument de votre manager. Cette méthode produit une instance de org.semanticweb.owlapi.model.OWLOntology.

La data factory vous permet de créer des éléments OWL :

  • éléments atomiques (getOWLClass, getOWLObjectProperty...),
  • éléments complexes (getOWLObjectUnionOf, getOWLObjectAllValuesFrom...),
  • axiomes (getOWLSubClassOfAxiom, getOWLObjectPropertyAssertionAxiom...).

Notez que les méthodes de la data factory évoquées ci-dessus créent un objet indépendamment du fait qu’il est présent ou non dans l’ontologie. Pour vérifier si l’ontologie contient bien un élément donné, la classe OWLOntology fournit un certain nombre de méthodes (containsClassInSignature, containsAxiom...).

Pour raisonner sur l’ontologie, vous devez créer un raisonneur pour cette ontologie avec l’instruction new org.semanticweb.HermiT.ReasonerFactory().createReasoner(ontology). Ce raisonneur permet notamment de savoir

  • si son ontologie est consistante,
  • si une classe est satisfiable,
  • si un axiome est une conséquence logique de l’ontologie (entailed),
  • ou de répondre à des questions plus spécifiques (liste des sous-classes d’une classe donnée, liste des instances d’une classe, etc...).

Pour en savoir plus, consultez la Javadoc de OWLReasoner.

Pour modifier l’ontologie, vous devez créer un objet OWLOntologyChange et le passer à la méthode applyChange du manager. Par exemple, pour ajouter un axiome, vous devez créer une instance de org.semanticweb.owlapi.model.AddAxiom.

Pour plus d’information, n’hésitez pas à vous référer à la Javadoc de OWL-API.