I. Introduction▲
Pour publier correctement ses données, il faut déjà correctement les modéliser afin que toutes les personnes qui voudront les utiliser puissent comprendre du premier coup d'œil comment s'en servir. Il faudra faire attention à ne pas confondre vocabulaire et ontologie - la différence sera expliquée plus bas dans ce tutoriel. Pour une question de simplicité, on utilisera dans ce tutoriel, le terme vocabulaire, mais il faut savoir que tout ce qui sera décrit pour un vocabulaire correspond tout autant à une ontologie. Un vocabulaire sert à définir des types et des propriétés permettant la modélisation des données, ces types et propriétés correspondent à des objets du monde réel comme une personne ou un lieu décrits par les données. Les données sont décrites en RDF, les vocabulaires sont décrits en OWL ou RDFS et les ontologies en OWL. Bien sélectionner (ou créer) un vocabulaire est une étape cruciale dans la publication de données sur le Web de données, car il va structurer vos données, c'est-à -dire leur donner une sémantique, permettre des inférences et surtout assurer une interopérabilité avec des données extérieures.
Nous ne verrons pas ici tous les critères, car il y en a beaucoup trop, mais seulement les principaux, en gros le minimum à respecter.
II. Différences entre vocabulaire et ontologie▲
Le terme ontologie est utilisé dans le Web sémantique afin de représenter un vocabulaire auquel on aura rajouté un certain nombre d'axiomes sur les classes et les propriétés. Une ontologie est exprimée en OWL qui est une adaptation de la logique de description pour le Web. On appelle axiome une construction logique qui relie souvent une propriété à une classe pour les définir, par exemple tous les livres ont un auteur. Un fait important est de bien savoir nommer les éléments de son vocabulaire pour mieux décrire les données, par exemple si l'on veut décrire un livre, l'utilisateur cherchera les termes « livre », « pages », « auteur », etc. d'où l'importance de donner de bons labels à vos types et propriétés afin que votre lecteur puisse déjà trouver le vocabulaire dont il a besoin et seulement ensuite, il vérifiera si le vocabulaire correspond bien à ses données. On utilise donc le terme ontologie si la construction est faite en structurant les classes et les propriétés avec une sémantique formelle déclarée et dont la principale fonctionnalité est d'en faire du raisonnement logique. Dans la pratique il est vrai que l'on utilise plus souvent le terme vocabulaire que le terme ontologie et principalement quand sa taille n'est pas trop grande. Particulièrement quand RDFS se traduit par « langage de description des vocabulaires ». Plus précisément, dans la pratique on dit qu'un vocabulaire RDFS et une ontologie OWL puisque la frontière n'est pas franche, c'est souvent plus une question de point de vue que de nature, par exemple le vocabulaire FOAF - initialement en RDFS - évolue vers plus d'expressivité en ajoutant quelques principes de OWL, ou même une version entièrement en OWL.
Pour aller encore un peu plus loin, il y a aussi une différence entre les ontologies. On parle souvent d'ontologie légère et d'ontologie lourde, mais encore une fois c'est le plus souvent une question de point de vue. Généralement, on considère une ontologie légère comme une ontologie ne comprenant que des hiérarchies de types ou de propriétés, alors qu'une ontologie lourde est une ontologie plus expressive utilisant des restrictions, des inférences, des constructions de classes, etc.
Parfois certains vocabulaires sont publiés dans un format différent que RDFS ou OWL, ils sont publiés en SKOS. Ces vocabulaires sont ce que l'on appelle des thésaurus, des taxonomies, parfois des listes d'autorité. Ils structurent des concepts hiérarchiquement (« plus générique que »/« plus spécifique que ») ou associativement (« voir aussi »), mais ne permettent pas d'exprimer des axiomes logiques pour définir les concepts. Mais cela ne rentre pas dans le cadre de ce tutoriel.
La dernière petite différence est que pour les débutants le terme ontologie est plutôt rébarbatif donc les personnes expliquant ce concept à des débutants utiliseront le terme vocabulaire plutôt qu'ontologie. C'est pour cette raison que j'ai choisi d'évoquer le terme vocabulaire et non ontologie. Vous l'aurez bien compris cela est plus une question de point de vue que de nature ce qui provoque souvent des mésententes sur le sujet.
III. Indications à respecter▲
Il existe plusieurs conventions lorsque l'on veut créer ou sélectionner un vocabulaire :
- un vocabulaire doit être écrit en utilisant les standards du Web sémantique ;
- un vocabulaire doit être accessible via un espace de noms sur le Web ;
- un vocabulaire doit faire référence à d'autres vocabulaires autant que possible ;
- un vocabulaire doit être bien documenté ;
- un vocabulaire doit comporter diverses métadonnées (auteur, licence, etc.).
Nous allons détailler un par un chacun de ces points.
III-A. Écrit via les standards du Web sémantique▲
Les vocabulaires que vous choisissez ou que vous écrivez doivent impérativement être écrits en utilisant une syntaxe RDF, comme RDF-XML ou N3. Cela permet une meilleure lecture et surtout une meilleure compréhension pour vous ou les autres utilisateurs.
III-B. Accessibilité via un espace de noms▲
L'espace de noms du vocabulaire, donc son URI, doit permettre d'y accéder sur le Web. La meilleure façon de faire est d'instaurer une négociation de contenu, afin d'accéder soit à la documentation HTML soit au vocabulaire formel (le fichier RDF) suivant le client Web. La seconde chose est de mettre en place une cross-référence entre les deux, c'est-à -dire que, peu importe le client, il faut qu'il puisse accéder aux deux versions donc dans le vocabulaire formel mettre le lien vers la documentation HTML et inversement.
La mise en place de ceci est assez simple, pour le lien de la documentation HTML vers le vocabulaire formel un simple lien hypertexte ou une icône suffit. Pour le lien entre le vocabulaire formel et la documentation HTML, il faudra que le vocabulaire utilise la propriété « foaf:isPrimaryTopicOf » sur la classe « owl:Ontology ».
III-C. Faire référence à d'autres vocabulaires▲
Il faut éviter à tout prix de réinventer ce qui existe déjà , beaucoup de vocabulaires bien conçus existent, il est donc inutile de réinventer la roue. Malgré tout, quelquefois les vocabulaires n'ont pas de propriétés ou de classes qui permettent de représenter ce que l'on souhaite, alors il y a deux solutions, ou on redéfinit nous-mêmes ce qui manque ou l'on étend le vocabulaire existant. Dans le premier cas, il faudra par exemple, redéfinir un type « Personne » en faisant référence au type « foaf:Person » via la propriété OWL « owl:equivalentClass », idem pour une propriété. Pour vous aider à trouver les vocabulaires dont vous auriez besoin, il existe un site où ils sont référencés.
III-D. Vocabulaire bien documenté▲
Comme dit plus haut, une documentation HTML est fortement recommandée, néanmoins il ne faut pas la faire n'importe comment. Le minimum étant une liste des classes et propriétés avec leur description, mais ce n'est pas tout. Il est souvent bien vu de rajouter plusieurs autres choses :
- le contexte d'utilisation du vocabulaire ;
- les raisons de son développement ;
- les données l'utilisant ;
- les notifications des différentes mises à jour ou bien des développements futurs ;
- les articles de conférences (s'il y a eu une publication) ;
- une représentation graphique du vocabulaire ;
- un exemple d'utilisation.
Bien entendu les articles ou les données l'utilisant sont optionnels pour ceux qui veulent créer leur vocabulaire, ces indications sont plus conseillées pour la sélection. Néanmoins, n'oubliez pas de les rajouter si vous écrivez un article ou si des jeux de données utilisent votre vocabulaire.
III-E. Métadonnées▲
Il y a différentes métadonnées qu'il faut renseigner sur un vocabulaire :
- auteur(s) et contributeur(s) via les propriétés : dcterms:creator, dcterms:contributor, foaf:maker, sioc:has_creator ;
- éditeur via la propriété : dcterms:publishers (s'il y en a un) ;
- droits et licence via les propriétés : cc:license, dcterms:license ;
- version via la propriété : owl:versionInfo ;
- historique via les propriétés : sioc:earlier_version et sioc:previous_version ;
- date création via la propriété : dcterms:created ;
- date dernière modification via la propriété : dcterms:modified.
Bien entendu, il est possible d'en rajouter d'autres comme le statut pour indiquer que le vocabulaire est en test ou en développement par exemple, cette liste fait juste office d'un minimum. Les propriétés citées ci-dessus ne sont pas les seules pour décrire ces métadonnées il y en a d'autres, mais celles-ci sont les plus utilisées.
IV. Conclusion▲
Nous avons pu voir dans ce tutoriel les principales conditions pour sélectionner ou créer un vocabulaire. Dorénavant vous ferez plus attention lorsque vous effectuerez une de ces tâches et ainsi si vous créez un vocabulaire, il aura toutes les chances d'être choisi par d'autres. Et si vous en sélectionnez un, vous serez certain qu'il est bien conçu et qu'il correspond bien à vos données.
V. Remerciement▲
Merci à Thibaut Cuvelier pour sa relecture technique ainsi qu'à Raymond et Claude Leloup pour leur relecture orthographique.