OWL-API : Une API Java pour manipuler des ontologies

Ajouter de l’intelligence aux données passe par une étape d’enrichissement de connaissances où l’ontologie joue un rôle très important. Avec des données intelligentes, un système peut faire des déductions qui ne sont pas évidentes pour un être humain (recommandations, détection des conflits, extraction de résumés, etc). Due à la complexité de données, manipuler une ontologie est une opération qui est loin d’être triviale. Dans ce contexte, OWL-API devient un acteur incontournable dans le domaine grâce sa flexibilité et sa richesse en termes de fonctionnalité.

Étant donné que la plupart des tutoriels du domaine se focalisent sur la manipulation des données RDF (gestion des triplestores), dans cet article, nous allons nous concentrer sur la partie “ontologie” et présenter une brève introduction de OWL-API, destinée à manipuler des ontologies.

OWL-API, c’est quoi ?

La nécessité d’avoir un outil fiable pour manipuler des ontologies, notamment dans un environnement dynamique, a poussé les informaticiens à développer OWL-API. Il s’agit d’un ensemble d’interfaces riches en fonctionnalité, permettant une manipulation flexible d’ontologies. De nombreux projets utilisent OWL-API comme outil de développement. A titre d’exemple, on peut citer Protégé-4, Swoop et OntoTrack.

Installation de OWL-API

Afin d’utiliser OWL-API, vous pouvez télécharger le fichier jar sur cette plateforme de téléchargement. Ou utiliser Maven pour la gestion des dépendances.

<dependency>
    <groupId>net.sourceforge.owlapi</groupId>
    <artifactId>owlapi-distribution</artifactId>
    <version>4.1.2</version>
</dependency>

Les éléments de base de OWL-API

La classe OWLOntologyManager est le point central pour la création, le chargement et la mise à jour des ontologies. Une ontologie est une instance de la classe OWLOntology qui fournit plusieurs mécanismes de manipulation pour des ontologies. OWLOntology joue également le rôle d’une interface permettant de manipuler les axiomes et les annotations. La figure ci-dessous montre le diagramme UML contenant les entités de OWLOntologyManager.



         OWL-API

Comment créer une ontologie avec OWL-API

Telle que décrite dans la section précédente, la création d’une ontologies doit forcement passer par la classe OWLOntologyManager. Dans l’exemple ci-dessous, nous avons défini une nouvelle fonction createOntology qui fait appel à l’entité OWLOntologyManager. Cette dernière, assurera la création d’une instance OWLOntology, via l’appel de la fonction createOntology. Une ontologie peut également avoir une IRI (Identificateur de Ressource Internationalisé) unique, spécifiée durant sa création.

	public void createOntology() throws OWLException {
		
		 OWLOntologyManager om = OWLManager.createOWLOntologyManager();
		 IRI pressinnov_iri = IRI.create("https://www.contentside.com/misc/exemple.owl");		 
		 OWLOntology pressInnovOntology = om.createOntology(pressinnov_iri); 
	}

Comment charger une ontologie existante

Dans le cas où vous disposez déjà d’un fichier .owl représentant votre ontologie, OWL-API se charge de l’analyse de fichier, extraction des axiomes puis la création de la classe OWLOntology. Plusieurs syntaxes sont supportées par OWL-API : Manchester syntax, RDF/XML, OWL/XML.

	public void loadOntology() throws OWLException {
		
		 OWLOntologyManager om = OWLManager.createOWLOntologyManager();
		 OWLOntologyDocumentSource source = new StreamDocumentSource(getClass().
		 getResourceAsStream("./exemple.owl"));
		 om.loadOntologyFromOntologyDocument(source);
		 OWLOntology pressInnovOntology = om.createOntology();
	}

Ajouter ou supprimer des axiomes et des classes

L’ontologie est définie comme un ensemble d’axiomes et de contraintes. Avec OWL-API, on peut facilement ajouter ou retirer des axiomes et des classes. L’exemple ci-dessous montre comment ajouter deux classes (Footballeur et Sportif) dans une ontologie existante. Nous avons également le moyen de déclarer une axiome tel que montré dans l’exemple ci-dessous (déclarer que la classe Footballeur est une sous-classe de la classe Sportif).

public void addClass() throws OWLException {
		
		OWLOntologyManager om = OWLManager.createOWLOntologyManager();
		IRI pressinnov_iri = IRI.create("https://www.contentside.com/misc/personne.owl");		 
		OWLOntology pressinnovOntology = om.createOntology(pressinnov_iri); 	
		OWLDataFactory factory = om.getOWLDataFactory();	

		OWLClass Sportif = factory.getOWLClass(IRI.create(pressinnov_iri + "#Sportif"));
		OWLClass Footballeur = factory.getOWLClass(IRI.create(pressinnov_iri  + "#Footballeur"));
			
		OWLAxiom axiom = factory.getOWLSubClassOfAxiom(Footballeur, Sportif);
		
		AddAxiom addAxiom = new AddAxiom(pressinnovOntology, axiom);		
		om.applyChange(addAxiom);		
	   
	}

Raisonnement logique

Le raisonnement est une tâche qui est loin d’être triviale. A partir de faits implicites, un raisonneur est capable de déduire des informations. Et OWL-API intègre plusieurs raisonneurs largement utilisés (ex: HermiT, Pellet, etc). Le code ci-dessous montre une fonction qui fait appel à un raisonneur. Le paramètre d’entrée de cette fonction est une requête logique dont la réponse déductive sera retournée par le raisonneur. Exemple : Retourner les personnes qui jouent régulièrement des matchs. Dans ce cas, la liste des footballeurs est retournée.

	public static void main(String [ ] args){
		String query = "personne and joueRégulièrement some match";
		DLQuery(query);				
	}
	
	
	static  void DLQuery (String query){
		 OWLOntologyManager om= OWLManager.createOWLOntologyManager();
		 IRI pressinnov_iri = IRI.create("https://www.contentside.com/misc/exemple.owl");		 
		 OWLOntology pressInnovOntology = om.createOntology(pressinnov_iri);	 
		 OWLReasoner reasoner = new   
                 Reasoner.ReasonerFactory().createReasoner(pressInnovOntology);		
		 ShortFormProvider shortFormProvider = new SimpleShortFormProvider();
                 DLQueryPrinter dlQueryPrinter = new DLQueryPrinter(new DLQueryEngine(reasoner,
	                shortFormProvider), shortFormProvider);	     
	         dlQueryPrinter.askQuery(query);
		 
	}


La liste complète des fonctionnalités offertes par OWL-API est disponible sur leur page de Documentation.

Ce sujet vous intéresse ?

NOUS CONTACTER