Les petites cases

Définir une ontologie avec OWL

En philosophie, une ontologie désigne un « discous sur l'être en tant qu'être », c'est à dire d'après la définition donnée par wikipedia « l'étude des propriétés générales de ce qui existe ». Les informaticiens ont repris ce terme pour désigner un « ensemble structuré de savoirs dans un domaine particulier de la connaissance »1 ou un ensemble de concepts organisés en graphe dont les relations peuvent être sémantiques ou de composition et d'héritage2. Une ontologie permet donc d'organiser des informations ou concepts pour construire de la connaissance, en ce sens elle a naturellement sa place dans le cadre du web sémantique.

De nombreux langages informatiques sont apparus pour construire et manipuler des ontologies. Dans le but de mettre au point un langage standardisé, le W3C a créé en novembre 2001 un groupe de travail, WebOnt rassemblant les acteurs du domaine dont la DARPA (Defense advanced Research Projects Agency) qui avait mis au point le langage DAML+OIL basé sur XML et RDF. Le travail de ce groupe a abouti à la recommandation OWL en février 2004. OWL définit donc une syntaxe RDF pour décrire et construire des vocabulaires pour créer des ontologies. On pourrait le comparer à XML schéma pour définir des grammaires XML.

Il existe donc deux langages basées sur RDF pour définir des vocabulaires : OWL et RDF schema. Leur différence est la même qu'entre un thésaurus et une ontologie, ce qui, vous allez me dire, est une lapalissade. Concrètement, un thésaurus relie des concepts entre eux selon des relations précises : synonyme, homonyme, hiérarchie, terme associé. L'ontologie ajoute des règles et des outils de comparaison sur et entre les termes, groupes de termes et relations : équivalence, symétrie, contraire, cardinalité, transitivité... Ainsi, l'ontologie est une étape supérieure au thésaurus selon l'ontology spectrum. En définissant ces règles, un logiciel qu'on appelle raisonneur peut faire des inférences et donc créer automatiquement de la connaissance. Par exemple, soit deux personnes et une relation « ami » dite symétrique, si la personne A est ami à la personne B alors le raisonneur peut déduire de lui même que la personne B est ami à la personne A. Ce mécanisme peut vous sembler simple et logique, mais pour une machine, ce n'est pas évident, il faut donc lui apprendre.

Il existe 3 déclinaisons de OWL : OWL Lite, OWL DL et OWL Full. Je ne vais pas rentrer dans les détails des trois déclinaisons et vous renvoie aux articles cités à la fin de ce billet pour plus de renseignements. De même, je ne vais pas aborder la syntaxe, mais plutôt expliquer les différents composants de OWL. OWL est composé de trois parties :

  1. Une classe, c'est à dire un groupe d'individus partageant les mêmes caractéristiques. Les classes peuvent être organisées hiérarchiquement selon une taxonomie. Les classes définies par l'utilisateur sont d'ailleurs toutes des enfants de la « super-classe » OWL:Thing. On pourrait comparer cela à une table dans le domaine des bases de données relationnelles.

  2. Une propriété qui permet de définir des faits ou des relations entre ces classes. Il existe en OWL deux types de propriétés : propriété d'objet (owl:ObjectProperty) qui définit une propriété entre deux individus d'une classe ou de plusieurs classes, c'est à dire une relation et une propriété de type de données (owl:DataTypeProperty), c'est à dire une relation entre une valeur ou donnée et un individu d'une classe, l'équivalent d'un champ d'une table dans une base de données relationnelles. Les propriétés peuvent aussi être organisées hiérarchiquement.

  3. Une instance, c'est à dire un individu d'une classe qui peut prendre les caractéristiques définies par les propriétés.

Comme je l'expliquais plus haut, vous pouvez définir des règles ou des restrictions sur les classes et les propriétés pour pouvoir faire des inférences. Je ne vais pas lister l'ensemble de ces règles que vous pouvez retrouver dans le synopsis du langage OWL dans la recommandation du W3C. Mais, à titre d'exemple, on peut citer la symétrie (owl:SymmetricProperty) à laquelle j'ai déjà fait allusion plus haut, les propriétés inverses (owl:inverseOf) : la propriété enfant_de qui unit deux individus d'une classe « humain » est l'inverse de la propriété parent_de qui unit aussi deux individus d'une classe « humain », les règles d'égalité ou d'inégalité comme owl:sameAs qui permet d'indiquer que deux individus d'une même classe sont en fait le même individu : L'individu « Louis XIV » est le même que l'individu « Roi soleil ». Comme vous le voyez, cela dépasse largement le principe des bases de données relationnelles, même si les concepts sont finalement assez proches.

Si vous n'avez pas envie d'écrire une ontologie directement avec la syntaxe XML/RDF, il existe un formidable outil en java pour créer des ontologies en OWL : Protege. Mis au point au sein du laboratoire Stanford Medical informatics dans le cadre du programme National Center for Biomedical Ontology, Protege est gratuit et open-source selon les termes de la Mozila Public licence. Elle offre, avec une interface graphique très agréable et facile à prendre en main, tous les outils pour créer et manipuler facilement votre ontologie. Elle intègre par défaut un plugin qui permet de générer votre ontologie au format OWL. Vous pourrez aussi ajouter de nombreux plugins, comme OntoViz pour visualiser graphiquement votre ontologie.

Quelques ressources sur OWL (tutoriel, article...) :

  1. Tom Gruber, What is an Ontology ?, très bonne définition de l'ontologie en repartant de l'utilisation des philosopes.

  2. Christine Porquet, une introduction au Web sémantique, bonne entrée en matière, qui ne rentre pas dans les détails.

  3. Christophe Jacquet, Langages de communication et échanges d'information sémantisée entre agents, bonne introduction générale aux différents concepts du Web sémantique pour arriver à l'explication de OWL

  4. Xavier Lacot, Introduction à OWL, un langage XML d'ontologies Web, excellent article en français dont je me suis abondamment servi pour ce billet, qui donne toutes les bases de OWL et qui propose un exemple complet

  5. Grigoris Antoniou et Frank van Harmelen, Web Ontology Langage : OWL, diaporama extrait du chapitre 4 du livre A semantic Web primer.

  6. La traduction française des recommandations du W3C, attention relecture inachevée.

  7. OWL, experiences and directions, site Web d'une conférence qui a lieu en ce moment même en Irlande et dont les communications vous donneront une idée de l'avenir de OWL

  8. Introduction to RDF schema and OWL, dans un document du W3C intitulé « A semantic Web primer for Oriented-object Software developpers

  9. Sean Bechhofer, Ian Horrocks and Peter F. Patel-Schneider, Tutorial on OWL, en anglais.

  10. Validateur de fichiers OWL

  11. Liste des ontologies en OWL sur le site de Protege

  12. OWL API, une API java pour manipuler des ontologies en OWL Full et OWL DL

  13. pOWL, un outil en PHP qui permet de créer une ontologie en OWL

  14. Kaon2, un outil en java pour manipuler des ontologies au format OWL-DL et qui peut se greffer à Protege

Cette liste est loin d'être exhaustive, vous pouvez y ajouter les ressources que j'ai déjà cité dans mes précédents billets et vous trouverez sur le Web beaucoup d'autres ressources sur OWL. Si vous êtes intéressé par la question, vous pouvez aussi consulter la partie dédiée à OWL dans mon delicious.

Quelques notes en passant

1 Xavier Lacot, Introduction à OWL, « un langage XML d'ontologies Web », http://www.lacot.org/public/introduction_a_owl.pdf, p. 12.

2 Ontologie (Informatique), définition de wikipedia, http://fr.wikipedia.org/wiki/Ontologie_(informatique)

OWL Geekeries — 

Commentaires

trés claire et bref, les références également merci
je veut construire une ontologie livre
merci les references sont tres intressants ;... j'ai recherche sur l'apport des agent sur les ontologie(construction,alignement ,...)
merci bien pout toutes ces explications