{"id":73,"date":"2008-05-28T18:30:44","date_gmt":"2008-05-28T17:30:44","guid":{"rendered":"http:\/\/loicmathieu.free.fr\/wordpress\/?p=73"},"modified":"2012-10-25T13:29:02","modified_gmt":"2012-10-25T11:29:02","slug":"owl-language-rdf-d-ontologie","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/owl-language-rdf-d-ontologie\/","title":{"rendered":"OWL &#8211; language RDF d&#8217;ontologie"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>OWL est vraiment un gros morceau! Et la notion d&#8217;ontologie (ou ontology si on utilise le terme anglais) web aussi. Bien sur il existe de nombreux articles, la plupart r\u00e9dig\u00e9s en anglais, sur ce domaine et la plupart totalement obscure. En fait, quand j&#8217;ai commenc\u00e9 \u00e0 travailler sur OWL, j&#8217;ai trouv\u00e9 que globalement toute la lecture sur ce domaine \u00e9t\u00e9 obscure (et je suis pas loin de toujours trouver la m\u00eame chose), surtout quand on sait que OWL repose sur RDF qui lui peut \u00eatre tr\u00e8s simple, voir mon pr\u00e9c\u00e9dent article:  <a title=\"Permanent Link: RDF et la forme N3\" rel=\"bookmark\" href=\"http:\/\/loicmathieu.free.fr\/wordpress\/\/?p=69\" target=\"_blank\">RDF et la forme N3.<\/a><\/p>\n<p>Bon, je vais essayer de rester simple, mais je ne promet pas d&#8217;\u00eatre toujours compr\u00e9hensible car OWL est vraiment quelques chose de compliqu\u00e9, vous allez me demander &#8220;mais pourquoi OWL est-il si compliqu\u00e9&#8221;. Une des raison essentielle est que OWL repose sur des principes math\u00e9matique ensembliste complexe et que OWL est un monde ouvert &#8220;Open World&#8221; comme on dit. Tout est possible en OWL car rien n&#8217;est fix\u00e9 ce qui en augmente la complexit\u00e9, je reviendrais \u00e0 plusieurs reprise sur cette notion de monde ouvert.<\/p>\n<h2>D\u00e9finitions<\/h2>\n<p>Quelques d\u00e9finitions:<\/p>\n<ul><li>Ontologie: C&#8217;est un mod\u00e8le de donn\u00e9es repr\u00e9sentatif d&#8217;un ensemble de concepts dans un domaine, ainsi que les relations entre ces concepts au sein de ce domaine. Une ontologie mod\u00e9lise un ensemble de connaissance sur un domaine. Une ontologies est constitu\u00e9 d&#8217;un ensemble d&#8217;objet tel que des individus, des classes, des attributs, des relations, des \u00e9v\u00e9nements, &#8230;\n<ul><li>Individus : les objets de base<\/li>\n\n<li>Classes : ensembles, collections, ou types d&#8217;objets<sup id=\"cite_ref-0\" class=\"reference\"><a href=\"http:\/\/fr.wikipedia.org\/wiki\/Ontologie_%28informatique%29#cite_note-0\"><\/a><\/sup><\/li>\n\n<li>Attributs : propri\u00e9t\u00e9s, fonctionnalit\u00e9s, caract\u00e9ristiques ou param\u00e8tres que les objets peuvent poss\u00e9der et partager<\/li>\n\n<li>Relations : les liens que les objets peuvent avoir entre eux<\/li>\n\n<li>\u00c9v\u00e9nements : changements subis par des attributs ou des relations<\/li>\n<\/ul><\/li>\n\n<li>OWL: Ontology Web Language (Language d&#8217;Ontologie Web) est une repr\u00e9sentation en XML bas\u00e9 sur la syntaxe RDF d&#8217;une Ontologie. Il permet de d\u00e9finir des ontologie pour le web s\u00e9mantique. OWL est une extension de RDF et RDFS (RDF Schema). Il existe trois niveau dans OWL: OWL-Lite, <strong>OWL-DL<\/strong> (celui sur lequel je me base ici) et OWL-Full. Les niveau de complexit\u00e9 allant croissant dans les versions. Aucun logiciel\/framework \u00e0 ce jour ne g\u00e8re totalement OWL-Full. Je ne vais pas m&#8217;\u00e9tendre sur les diff\u00e9rences entre les trois, elle se trouve principalement au niveau des capacit\u00e9 d&#8217;inf\u00e9rence. Voir le document du W3C\n<ul><li>RDF: voir la d\u00e9finition dans mon article <a title=\"Permanent Link: RDF et la forme N3\" rel=\"bookmark\" href=\"http:\/\/loicmathieu.free.fr\/wordpress\/\/?p=69\" target=\"_blank\">RDF et la forme N3.<\/a><\/li>\n\n<li>RDFS ou RDF Schema: C&#8217; est un langage extensible de repr\u00e9sentation des connaissances. RDFS fournit des \u00e9l\u00e9ments de base pour la d\u00e9finition d&#8217;ontologies ou vocabulaires destin\u00e9s \u00e0 structurer des ressources RDF.<\/li>\n<\/ul><\/li>\n\n<li>Inf\u00e9rence: &#8220;op\u00e9ration mentale qui consiste \u00e0 tirer une conclusion d&#8217;une s\u00e9rie de propositions reconnues pour vraies&#8221;. Appliqu\u00e9 \u00e0 OWL, inf\u00e9r\u00e9 une ontologie conciste \u00e0 en tirer une s\u00e9rie de nouveau objet qui d\u00e9coule de la d\u00e9finition des objets dans l&#8217;ontologie (par exemple, ajout d&#8217;attribut sur un Individus ou d&#8217;individus dans une classe). On utilise pour ceci un moteur d&#8217;ing\u00e9rence, aussi appel\u00e9 raisonneur (reasonner).<\/li>\n\n<li>Moteur d&#8217;inf\u00e9rence (raisonneur ou reasonner en anglais): Moteur qui permettent de raisonner ou d&#8217;inf\u00e9rer sur une ontologie. Je vais utiliser dans cet exemple <strong>Pellet<\/strong>.<\/li>\n\n<li>OWL-API: framework OWL Java. Ce framework que je vais pr\u00e9senter ici facilite la programmation d&#8217;une ontology. On aurais aussi put par exemple utiliser Jenna que j&#8217;ai pr\u00e9sent\u00e9 dans mon article: <a title=\"Permanent Link: RDF et la forme N3\" rel=\"bookmark\" href=\"http:\/\/loicmathieu.free.fr\/wordpress\/\/?p=69\" target=\"_blank\">RDF et la forme N3.<\/a><\/li>\n\n<li><strong>Prot\u00e9g\u00e9<\/strong>: Logiciel JAVA permettant de facilement \u00e9diter un fichier OWL. En effet, un fichier OWL est quasiment illisible par un humain, il n\u00e9c\u00e9ssite donc un \u00e9diteur. Prot\u00e9g\u00e9 permet aussi d&#8217;utiliser un raisonneur, on peut donc directement v\u00e9rifier et raisonner sur l&#8221;&#8216;ontologie cr\u00e9\u00e9e.<\/li>\n<\/ul>\n<h2>Exemple d&#8217;ontologie OWL en utilisant OWL-API, Pellet, prot\u00e9g\u00e9<\/h2>\n<!--more-->\n<h3>Cr\u00e9ation d&#8217;une ontologie simple avec Prot\u00e9g\u00e9<\/h3>\n<p>Personnellement, j&#8217;utilise Prot\u00e9g\u00e9 en version 3.4 B\u00e9ta car elle permet directement l&#8217;utilisation de Pellet comme raisonneur. Comme j&#8217;utilise aussi Pellet dans mes programmes Java, je pense que le choix est judicieux.<\/p>\n<p>Au lancement de Prot\u00e9g\u00e9, il vous faut cr\u00e9er un nouveau projet de type OWL\/RDF File, lui donner une URI (sur le web, tout est URI), d\u00e9finir le type OWL-DL, lancer la vue Logique puis aller sur la partie \u00e9diteur de classe, et vous voila pr\u00eat \u00e0 cr\u00e9er votre premi\u00e8re ontologie. Ci dessous, quelques screenshot de ces \u00e9tapes.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"330\" class=\"alignnone size-full wp-image-80\" title=\"owl-protege-1\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg?resize=330%2C330\" alt=\"Cr\u00e9ation d'une ontologie OWL avec prot\u00e9g\u00e9 - \u00e9tape 1\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg?w=330&amp;ssl=1 330w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg?resize=300%2C300&amp;ssl=1 300w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a> <a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-2.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"330\" class=\"alignnone size-medium wp-image-81\" title=\"owl-protege-2\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-2.jpg?resize=330%2C330\" alt=\"Cr\u00e9ation d'une ontologie OWL avec prot\u00e9g\u00e9 - \u00e9tape 2\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-2.jpg?w=330&amp;ssl=1 330w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-2.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-2.jpg?resize=300%2C300&amp;ssl=1 300w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-3.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"330\" class=\"alignnone size-medium wp-image-82\" title=\"owl-protege-3\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-3.jpg?resize=330%2C330\" alt=\"Cr\u00e9ation d'une ontologie OWL avec prot\u00e9g\u00e9 - \u00e9tape 3\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-3.jpg?w=330&amp;ssl=1 330w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-3.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-3.jpg?resize=300%2C300&amp;ssl=1 300w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/> <\/a>\n<a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-4.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"330\" class=\"alignnone size-medium wp-image-79\" title=\"owl-protege-4\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-4.jpg?resize=330%2C330\" alt=\"Cr\u00e9ation d'une ontologie OWL avec prot\u00e9g\u00e9 - \u00e9tape 4\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-4.jpg?w=330&amp;ssl=1 330w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-4.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-4.jpg?resize=300%2C300&amp;ssl=1 300w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a><\/p>\n<p>On va maintenant cr\u00e9er une petite ontologie basique pour tester en comprendre les fonctionnalit\u00e9s de base de OWL. Vois allez donc cr\u00e9er une classe &#8220;Category&#8221;, dans laquelle vous allez cr\u00e9er deux sous classes &#8220;ProductCategory&#8221; et &#8220;PriceCategory&#8221;, puis une classe &#8220;Offer&#8221;. Bon, l&#8217;exemple n&#8217;est peut \u00eatre pas id\u00e9al d&#8217;un point de vue fonctionnel, mais vous voyez tout de suite ce que je veut d\u00e9finir, une Offre qui va contenir une category de produit (internet par exemple) et une cat\u00e9gorie de prix (ch\u00e8re par exemple).. Ci dessous, quelques screenshot pour la cr\u00e9ation des classes.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-5.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"568\" class=\"alignnone size-medium wp-image-84\" title=\"owl-protege-5\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-5.jpg?resize=640%2C568\" alt=\"Cr\u00e9ation d'une classe dans l'ontologie - Part 1\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-5.jpg?w=660&amp;ssl=1 660w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-5.jpg?resize=300%2C266&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-6.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"568\" class=\"alignnone size-full wp-image-83\" title=\"owl-protege-6\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-6.jpg?resize=640%2C568\" alt=\"Cr\u00e9ation d'une classe dans l'ontologie - Part 2\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-6.jpg?w=660&amp;ssl=1 660w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-6.jpg?resize=300%2C266&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Maintenant, mettons quelques propri\u00e9t\u00e9s \u00e0 ces classes, comme un nom par exemple, et aussi, lions les entres-elles (donc, lions ProductCategory et PriceCategory \u00e0 Offer).<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-7.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"472\" class=\"alignnone size-medium wp-image-90\" title=\"owl-protege-7\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-7.jpg?resize=620%2C472\" alt=\"Cr\u00e9ation d'un epropri\u00e9t\u00e9 pour une classe OWL dans Prot\u00e9g\u00e9\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-7.jpg?w=620&amp;ssl=1 620w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-7.jpg?resize=300%2C228&amp;ssl=1 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-9.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"567\" class=\"alignnone size-medium wp-image-86\" title=\"owl-protege-9\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-9.jpg?resize=640%2C567\" alt=\"D\u00e9finition d'une propri\u00e9t\u00e9 dans une classe OWL\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-9.jpg?w=670&amp;ssl=1 670w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-9.jpg?resize=300%2C265&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-10.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"567\" class=\"alignnone size-medium wp-image-87\" title=\"owl-protege-10\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-10.jpg?resize=640%2C567\" alt=\"D\u00e9finition d'une propri\u00e9t\u00e9 dans une classe OWL avec Prot\u00e9g\u00e9\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-10.jpg?w=670&amp;ssl=1 670w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-10.jpg?resize=300%2C265&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Cr\u00e9ons maintenant quelques individus pour cr\u00e9er notre ontologie.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-11.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"410\" class=\"alignnone size-medium wp-image-88\" title=\"owl-protege-11\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-11.jpg?resize=640%2C410\" alt=\"Cr\u00e9ation d'individus OWL avec pro\u00e9t\u00e9g\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-11.jpg?w=846&amp;ssl=1 846w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-11.jpg?resize=300%2C192&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Voila notre ontologie cr\u00e9\u00e9, Prot\u00e9g\u00e9 nous permet de la v\u00e9rifier, de la classifi\u00e9 ou d&#8217;inf\u00e9rer dessus. L&#8217;inf\u00e9rence permet de &#8216;raisonner&#8217; sur l&#8217;ontologie pour en d\u00e9duire des propri\u00e9t\u00e9 ou des \u00e9l\u00e9ment non dit. J&#8217;expliquerais plus en d\u00e9tail mais c&#8217;est l\u00e0 que Pellet entre en action. Et voici le dernier screenshot de cet article:\n<a href=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-12.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"391\" class=\"alignnone size-full wp-image-89\" title=\"owl-protege-12\" src=\"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-12.jpg?resize=640%2C391\" alt=\"Prot\u00e9g\u00e9 - menu du raisonneur OWL (ici Pellet)\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-12.jpg?w=852&amp;ssl=1 852w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/owl-protege-12.jpg?resize=300%2C183&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<h3>Utilisation de OWL-API et de Pellet pour interroger cette Ontologie<\/h3>\n<h4>1. Chargement de l&#8217;ontologie<\/h4>\n<p style=\"text-align: left\">Charger une ontologie avec OWL-API est d\u00e9j\u00e0 en soit quelque chose de complexe! Voici un morceau de code JAVA permettant de charger le fichier cr\u00e9er par Pot\u00e9g\u00e9 si il est dans un r\u00e9pertoire owl dans le classpath:\n<code>\n\/\/charge l'ontologie depuis un fichier\nURL ontologyUrl = Thread.currentThread().getContextClassLoader().getResource( &quot;owl\/owl-test.owl&quot; );\nURI ontologyURI = URI.create( ontologyUrl.toExternalForm() );<\/code><\/p>\n<p style=\"text-align: left\"><code>\/\/initialise un manager et un reasonner (on utilise Pellet pour &ccedil;a)\nOWLOntologyManager manager = OWLManager.createOWLOntologyManager();\nOWLReasoner reasoner = new Reasoner( manager );<\/code><\/p>\n<p style=\"text-align: left\"><code>\/\/utilise le manager pour charger ontologie\nOWLOntology ontology = manager.loadOntologyFromPhysicalURI( ontologyURI );<\/code><\/p>\n<p style=\"text-align: left\"><code>\/\/charge l'ontologie dans le reasonner, v&eacute;rifie la consistence et classifie\n\/\/l'ontologie pour pouvoir raisonner dessus.\nreasoner.loadOntologies( manager.getImportsClosure( ontology ) );\nboolean isConsistent = reasoner.isConsistent( ontology );\nreasoner.classify();<\/code><\/p>\n<p style=\"text-align: left\"><code>\/\/instancie une data factory\nOWLDataFactory dataFactory = manager.getOWLDataFactory();<\/code><\/p>\n<p>On remarque ici la cr\u00e9ation des objets suivant permettant d&#8217;acc\u00e9der \u00e0 l&#8217;ontologie:<\/p>\n<ul><li>OWLReasoner: on utilise Pellet comme raisonneur, il nous permettra d&#8217;acc\u00e9der \u00e0 l&#8217;ontologie.<\/li>\n\n<li>OWLDataFactory: un des composant de OWL-API qui permet d&#8217;acc\u00e9der \u00e0 l&#8217;ontologie<\/li>\n\n<li>OWLOntology: elle contient elle-m\u00eame une s\u00e9rie de m\u00e9thode d&#8217;acc\u00e8s<\/li>\n<\/ul>\n<p>Effectivement, plusieurs objets sont n\u00e9cessaire pour interroger l&#8217;ontologie, l&#8217;utilisation de l&#8217;un ou l&#8217;autre d\u00e9pendant de ce que nous cherchons dans l&#8217;ontologie. Des exemples vont suivre.<\/p>\n<h4>2. Interrogation de l&#8217;ontologie<\/h4>\n<h5>2.1 r\u00e9cup\u00e9ration d&#8217;un individu<\/h5>\n<p>Tout d&#8217;abord, nous allons essayer de r\u00e9cup\u00e9rer un Individus de notre ontologie. Par exemple, r\u00e9cup\u00e9rer une Offer pr\u00e9cise. il faut savoir que en OWL, tout identifiant est en fait une URI. Si vous vous rappelez bien, en d\u00e9but d&#8217;article, j&#8217;ai demander \u00e0 Prot\u00e9g\u00e9 de me cr\u00e9er une ontologie ayant l&#8217;URI: <a href=\"http:\/\/www.domain.com\/owltest\">http:\/\/www.domain.com\/owltest<\/a>, un individus a donc comme identifiant l&#8217;URI de base + son nom (\u00e0 ne pas confondre avec la valeur de la propri\u00e9t\u00e9 hasName telle que d\u00e9finie dans nos classes). Ce qui donne donc comme URI pour notre unique individus de la classe Offer: <a href=\"http:\/\/www.domain.com\/owltest#W800i\">http:\/\/www.domain.com\/owltest#W800i<\/a><\/p>\n<p>Voici donc, comment r\u00e9cup\u00e9rer cet individus depuis l&#8217;ontologie:<\/p>\n<p style=\"text-align: left\"><code>\nOWLIndividual individual = dataFactory.getOWLIndividual( URI.create(&quot;http:\/\/www.domain.com\/owltest#W800i&quot;) );<\/code><\/p>\n<h5>2.2 r\u00e9cup\u00e9ration de tout les individus d&#8217;une classe<\/h5>\n<p>On veut maintenant r\u00e9cup\u00e9rer depuis l&#8217;ontologie tout les individus de la classe Offer. Pour cela, on doit utiliser une m\u00e9thode du raisonneur. En effet, le raisonneur pouvant inf\u00e9rer des individus dans une classe, il est n\u00e9cessaire d&#8217;utiliser le raisonneur si on veut pouvoir r\u00e9cup\u00e9rer tout les individus d&#8217;une classes (ceux d\u00e9clar\u00e9 et ceux inf\u00e9r\u00e9). Voici:<\/p>\n<p style=\"text-align: left\"><code>OWLClass clazz = dataFactory.getOWLClass(URI.create(&quot;http:\/\/www.domain.com\/owltest#Offer&quot;) );\nSet&lt;OWLIndividual&gt; individuals = reasoner.getIndividuals( clazz , true );<\/code><\/p>\n<h5>2.3 Recherche de la PriceCategory d&#8217;une Offer<\/h5>\n<p>Lorsque OWL-API nous retourne un objet, il ne contient pas les \u00e9l\u00e9ments qui lui sont associ\u00e9. Pour r\u00e9cup\u00e9rer la PriceCategory qui est li\u00e9 \u00e0 une Offer, il nous faut donc r\u00e9-interroger l&#8217;ontologie. Voici un petit exemple de code:<\/p>\n<p style=\"text-align: left\"><code>OWLObjectProperty property = dataFactory.getOWLObjectProperty(URI.create(&quot;http:\/\/www.domain.com\/owltest#hasPriceCategory&quot;));\nreasoner.getRelatedIndividuals( individual , property );<\/code><\/p>\n<h5>2.4 Pour aller plus loin<\/h5>\n<p>Si vous voulez aller plus loin, il vous faudra fouiller la doc de OWL-API, tester ses tutoriels et regarder sa JavaDoc. Je vais juste revenir ici sur deux point qui \u00e0 mon sens sont un peut compliqu\u00e9:<\/p>\n<p><em><strong>Open World et Inf\u00e9rence<\/strong><\/em> : On dit que OWL est un monde ouvert, au fil de la lecture dans OWL vous verrez peut \u00eatre des choses un peut bizarre. Parfois, pour rechercher pr\u00e9cis\u00e9ment quelque chose dans une ontologie, il faut cr\u00e9er une classes qui contient les sp\u00e9cificit\u00e9 de vos objet rechercher,l&#8217;ajouter \u00e0 l&#8217;ontologie, inf\u00e9rer gr\u00e2ce \u00e0 un raisonneur et ensuite charger les individus de cette classe et vous avez votre r\u00e9ponse. C&#8217;est dans ce sens que OWL est un monde ouvert, tout est possible \u00e0 partir d&#8217;une ontologie &#8230; mais ce qu&#8217;elle ne d\u00e9finie pas. C&#8217;est aussi pour cela que OWL-API ne jette jamais d&#8217;exception du type: &#8220;Class Not Found&#8221; et retourne syst\u00e9matiquement des listes.<\/p>\n<h2>Conclusion, mon avis<\/h2>\n<p>J&#8217;ai dans cet article \u00e0 peine gratter la surface \u00e0 propos de OWL et de l&#8217;utilisation de OWL-API et Pellet. En effet, cette API est tr\u00e8s dense.<\/p>\n<p>Mon avis au sujet de OWL: OWL est tr\u00e8s complexe et ne devrait \u00eatre utilis\u00e9 que si toutes les fonctionnalit\u00e9 d&#8217;une ontologie sont n\u00e9cessaire, sinon, une utilisation simple de RDF (voir RDF dans sa forme N3 comme dans pr\u00e9sent\u00e9 ici: <a title=\"Permanent Link: RDF et la forme N3\" rel=\"bookmark\" href=\"http:\/\/loicmathieu.free.fr\/wordpress\/\/?p=69\" target=\"_blank\">RDF et la forme N3.<\/a><\/p>\n<p>Mon avis au sujet de OWL-API et de Pellet. Pellet comporte quelques limitation (assez complexe, je ne rentrerais pas dans les d\u00e9tails ici) mais fonctionne globalement bien. OWL-API est une API calqu\u00e9 sur la d\u00e9finition de OWL, elle est donc fort complexe et tr\u00e8s dense (il existe des centaines de m\u00e9thodes d&#8217;interrogation d&#8217;une ontology enter celle du raisonneur, de la datafactory ou de l&#8217;ontology elle-m\u00eame). De plus, bien souvent, on ne sait pas trop quel objet utilis\u00e9 pour r\u00e9cup\u00e9rer l&#8217;information n\u00e9cessaire entre les trois objets principaux que sont l&#8217;ontology, la data factory et le raisonneur. La documentation de OWL est pour moi r\u00e9ellement insuffisante: tutoriel fort th\u00e9orique et JavaDoc quasi nulle. La communaut\u00e9 de d\u00e9veloppement de OWL-API est plut\u00f4t r\u00e9duite, j&#8217;ai eu l&#8217;impression que cette API avait \u00e9t\u00e9 cr\u00e9\u00e9e par des universitaire pour des universitaire et l&#8217;utiliser dans un contexte d&#8217;entreprise a \u00e9t\u00e9 assez compliqu\u00e9. Jenna dont j&#8217;ai parl\u00e9 dans mon article <a title=\"Permanent Link: RDF et la forme N3\" rel=\"bookmark\" href=\"http:\/\/loicmathieu.free.fr\/wordpress\/\/?p=69\" target=\"_blank\">RDF et la forme N3<\/a> (je sais, je me r\u00e9p\u00e8te) permet aussi d&#8217;interroger des ontology et je le conseillerais de pr\u00e9f\u00e9rence \u00e0 OWL API.<\/p>\n<p>Voici les sources de cet articles : <a href=\"http:\/\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owltest.java\">OwlTest.java<\/a> et <a href=\"http:\/\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-test.owl\">owl-test.owl<\/a><\/p>\n<p>N&#8217;h\u00e9sitez pas \u00e0 me faire parvenir vos avis et questions sur OWL.<\/p>\n<h2>Liens<\/h2>\n<ul><li>OWL chez le W3C: <a href=\"http:\/\/www.w3.org\/2004\/OWL\/\" target=\"_blank\">http:\/\/www.w3.org\/2004\/OWL\/<\/a><\/li>\n\n<li>Pellet: <a href=\"http:\/\/pellet.owldl.com\/\" target=\"_blank\">http:\/\/pellet.owldl.com\/<\/a><\/li>\n\n<li>Prot\u00e9g\u00e9: <a href=\"http:\/\/protege.stanford.edu\/\" target=\"_blank\">http:\/\/protege.stanford.edu\/<\/a><\/li>\n\n<li>OWL-API: <a href=\"http:\/\/owlapi.sourceforge.net\/\" target=\"_blank\">http:\/\/owlapi.sourceforge.net\/<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Introduction OWL est vraiment un gros morceau! Et la notion d&#8217;ontologie (ou ontology si on utilise le terme anglais) web aussi. Bien sur il existe de nombreux articles, la plupart r\u00e9dig\u00e9s en anglais, sur ce domaine et la plupart totalement obscure. En fait, quand j&#8217;ai commenc\u00e9 \u00e0 travailler sur OWL, j&#8217;ai trouv\u00e9 que globalement toute la lecture sur ce domaine \u00e9t\u00e9 obscure (et je suis pas loin de toujours trouver la m\u00eame chose), surtout quand on sait que OWL repose&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/owl-language-rdf-d-ontologie\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[151,11,63,44,62,43,64,61,65,14],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-informatique","tag-java","tag-ontologie","tag-ontology","tag-ontology-web-language","tag-owl","tag-owl-api","tag-pellet","tag-protege","tag-web"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":69,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/rdf-et-la-forme-n3\/","url_meta":{"origin":73,"position":0},"title":"RDF et la forme N3","author":"admin","date":"Monday April 21st, 2008","format":false,"excerpt":"Bonjour, au menu ajourd'hui: RDF et la forme N3, avec quelques exemples en JAVA avec l'aide du framework Jena. D\u00e9finition Bon, je pense qu'une petite d\u00e9finition de ces termes barbare s'impose: RDF: Resource Description Framework. Difficile d'expliquer en quelque mots ce que veut dire RDF! C'est une repr\u00e9sentation de donn\u00e9es\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":21,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/spams-vont-ils-faire-tomber-le-web\/","url_meta":{"origin":73,"position":1},"title":"SPAMS : vont-ils faire tomber le web?","author":"admin","date":"Tuesday March  6th, 2007","format":false,"excerpt":"Un petit coup de gueule. Il y a peu, certaines pages de mon blog sont entr\u00e9 dans les r\u00e9sultats de google (et peut-\u00eatre d'autres moteurs de recherche) et d'un seul coup, je suis submerg\u00e9 de spam sur les commentaire de mes articles. Quelle ironie, j'ai plus de 10 commentaires par\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/portee-des-blogs\/","url_meta":{"origin":73,"position":2},"title":"Port\u00e9e des blogs","author":"admin","date":"Tuesday December  5th, 2006","format":false,"excerpt":"Je vient de lire plusieurs articles dans plusieurs journaux au sujet des blogs (petites parenth\u00e8ses ici, comme souvent dans la presse fran\u00e7aise, tout les journaux parlent de la m\u00eame chose en m\u00eame temps, m\u00eame quand ce sont des articles de fond d\u00e9tach\u00e9 de l'actualit\u00e9 ... bizarre). Les articles mettait en\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1330,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/devoxx-france-2021-ledition-9-3-4\/","url_meta":{"origin":73,"position":3},"title":"(Fran\u00e7ais) Devoxx France 2021 &#8211; l&#8217;\u00e9dition 9 3\/4","author":"admin","date":"Friday October  1st, 2021","format":false,"excerpt":"Sorry, this entry is only available in Fran\u00e7ais.","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":966,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/1-an-chez-zenika\/","url_meta":{"origin":73,"position":4},"title":"(Fran\u00e7ais) 1 an chez Zenika","author":"admin","date":"Tuesday September  3rd, 2019","format":false,"excerpt":"Sorry, this entry is only available in Fran\u00e7ais.","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":19,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/ruby-on-rails\/","url_meta":{"origin":73,"position":5},"title":"Ruby on Rails","author":"admin","date":"Thursday February 15th, 2007","format":false,"excerpt":"Bonjour, d'habitude au ton bucolique des vacances ou revendicatif des coups de gueules, aujourd'hui le ton de ce post va \u00eatre technophile. En effet, je bosse dans l'informatique qui est donc un de mes centre d'int\u00e9r\u00eat, et je vous livre ici mon premier message sur les nouvelles technologies. J'ai tester\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}