Transformer un fichier tabulé en SKOS avec OpenRefine

Cette documentation « pas à pas » vous montre comment utiliser OpenRefine pour transformer un vocabulaire au format tabulé en une ressource représentée à l’aide du modèle standard SKOS. Il permet d’aborder quelques fonctionnalités de base d’OpenRefine, d’expérimenter l’extension RDF et de se familiariser avec le modèle SKOS. 

Cette page est un des résultats du test comparatif de 3 outils pour transformer un vocabulaire au format tabulé vers SKOS (projet FooSIN). Toutes les données sont publiées sur l’entrepôt ouvert recherche.data.gouv. 

OpenRefine est un outil open source pour travailler à partir de jeux de données mal ou peu structurées pour les nettoyer, les ordonner et aussi les transformer d’un format à un autre (beaucoup de possibilités). Vous pouvez le télécharger et l’installer sur votre poste. Il s’agit d’un outil générique, pas spécifique au modèle SKOS ni même au langage RDF. Pour ce test, nous avons utilisé la Version 3.5.2 d’OpenRefine. Il vous faudra d’ailleurs installer l’extension RDF extension suivant les instructions disponibles ici

Présentation du jeu de test 

Le fichier source est un fichier tabulé au format .xlsx (lien vers le fichier Jeu de données – entree OpenRefine.xlsx). D’autres formats tabulés .xls, .csv ou .ods sont possibles. Aucune structure particulière n’est attendue par OpenRefine, c’est vous qui allez déclarer les correspondances entre vos colonnes et les propriétés du modèle SKOS. Nous vous conseillons de garder une structure simple avec une colonne par propriété (URI, label, etc.) et une ligne par concept. Il est possible de traiter des cellules multivaluées à condition qu’il y ait un séparateur fixe entre les différentes valeurs. Bien nommer vos colonnes rendra la définition des correspondances vers SKOS plus facile. La ligne 1 dans la Figure ci-dessous est donc une ligne facultative mais recommandée.  

Chargez le fichier

Le chargement du fichier se fait depuis l’onglet « Create Project » (encadré jaune dans la figure ci-dessous). Dans la plupart des cas, OpenRefine détecte automatiquement le format du fichier en entrée (encadré rouge). Il vous présente ensuite une prévisualisation du jeu de données (encadré vert). Vous pouvez vérifier que le chargement a été fait correctement, ajuster les options si besoin, notamment pour l’encodage du fichier. Cliquez sur « Create Project » en haut à droite pour créer votre projet. 

Dans un premier temps, l’interface vous permet de vérifier, corriger et filtrer vos données si vous en avez besoin. OpenRefine offre de nombreuses fonctionnalités, voir la documentation en ligne. Une fois la visualisation de votre jeu de données conforme à vos attentes, vous allez définir la correspondance entre vos colonnes et les éléments du modèle SKOS.Accédez au module de correspondances

Cliquez sur le bouton « RDF » (cadre rouge ci-dessus) et choisissez « Edit RDF skeleton » qui ouvre la fenêtre appelée RDF Schema alignment. A l’aide de cette interface, vous allez déclarer les règles de construction des triplets RDF qui constitueront votre ressource en SKOS. Pendant tout le travail, pensez à sauvegarder régulièrement votre “skeleton” (bouton Save en bas à droite). Pensez à utiliser la fonctionnalité “Preview” disponible à différents endroits pour contrôler le résultat de vos actions.

Déclarez l’URI de base et les préfixes

La première chose à faire est de renseigner l’URI de base de votre ressource (encadré rouge de la figure ci-dessus), dans notre exemple http://opendata.inrae.fr/Thesaurus/. L’URI de base peut se terminer par / ou bien #. Elle servira à construire les URI pour votre vocabulaire.

Ensuite, vous devez déclarer les schémas RDF que vous souhaitez utiliser (encadré vert), ainsi qu’un préfixe pour chacun. Les schémas les plus courants sont présents par défaut. Pour ajouter un nouveau préfixe, cliquez sur +Add (encadré vert ci-dessus). Pour notre cas, nous avons besoin en plus de déclarer SKOS avec les valeurs suivantes: 

Si vous utilisez des éléments d’autres schémas, pensez à les déclarer également. Par exemple, dans notre jeu de données, on crée le préfixe th associé à l’URI http://opendata.inrae.fr/Thesaurus/ pour pouvoir créer une propriété adhoc (idéalement, cette propriété doit être définie dans une ontologie). Si le schéma n’est pas accessible en ligne, sélectionnez l’option “Add prefix only” dans le menu “Vocabulary import”.

Ci-dessous, le résultat du paramétrage pour notre exemple :

Déclarez les patrons de correspondance 

Vient ensuite le moment de créer les correspondances entre la structure de votre fichier en colonnes et les éléments du modèle SKOS. Pour chaque patron de triplet à générer, vous allez indiquer où trouver le sujet (1), la propriété SKOS à utiliser (2) et où trouver l’objet du prédicat (3). Notez que les intitulés de vos colonnes n’apparaissent plus dans la partie “objet” du prédicat comme précédemment. Il s’agit de toute évidence d’un bug. Vous devrez donc aller les sélectionner un à un. 

Déclarez le sujet des triplets (concept)

Commençons par définir le sujet du triplet. Il doit être un identifiant de concept. Cliquez sur  (Row index) URI (repère 1 dans la figure ci-dessus) pour ouvrir la fenêtre de paramétrage du sujet (Fenêtre RDF node ci-contre). Par défaut, l’outil propose que ce soit le numéro de ligne mais comme notre fichier contient déjà des identifiants (colonne A), c’est cette valeur qu’il faut récupérer. Dans la boîte Use content…, cochez alors ID (intitulé de la colonne A) au lieu de (Row index). 

Dans la boîte Content used…, indiquez qu’il s’agit d’un URI. L’URI sera construit en utilisant la “Base URI” que vous avez définie auparavant : [Base URI + valeur de la colonne ID]. Cliquez sur ok pour retourner à la fenêtre RDF Schema alignment.

Ensuite, utilisez la fonction qui permet de donner un « rdf:type » à l’URI en cours de création. Pour cela, il faut cliquer sur Add type et ajouter le type que l’on veut, dans notre cas, ce sera skos:Concept. Vous pouvez voir un premier résultat de transformation de vos données dans l’onglet RDF Preview.

Déclarez les prédicats et les objets

Maintenant que le sujet est paramétré, il faut déclarer l’objet du triplet ainsi que le prédicat. 

L’objet peut être une valeur littérale avec ou sans langue, un entier, une date… pour les propriétés de type “data property” ou l’URI d’une autre ressources RDF pour les propriétés de type “object property” (voir l’introduction à RDF). 

Toujours dans la fenêtre RDF schema alignment, cliquez sur Add property? (repère 2). Un nouveau champ, Configure?, apparaît à droite (repère 3). Cliquez dessus pour paramétrer l’objet de votre triplet. La fenêtre de paramétrage (RDF Node) est la même que pour le sujet. Dans la boîte Use content, sélectionnez une colonne de votre fichier. Déclarons par exemple Libellé FR. Ici, pour indiquer qu’il s’agit d’une valeur littérale en français, il faut sélectionner Language et indiquer “fr” dans le champ libre. Si vos cellules sont multivaluées, voir le paragraphe suivant. Cliquez sur Ok pour revenir à la fenêtre RDF Schema alignment.  

Pour paramétrer le prédicat, cliquez sur Add property?. Saisissez le préfixe skos et choisissez la propriété SKOS adéquate (skos:prefLabel dans notre exemple). Pour la propriété adhoc th:utiliserPour, indiquez simplement le préfixe th et le nom de propriété. 

Répétez ces opérations pour chaque propriété à construire à partir des colonnes de votre fichier. Vous devez obtenir un ensemble de correspondances comme celui montré ci-dessous.

Cas particulier des cellules multivaluées 

Si votre fichier présente des cellules multivaluées (les Synonymes FR séparés par une virgule dans notre exemple), utilisez la boîte Use expression comme dans la figure ci-dessous. Le module contient une fenêtre d’édition (A), une prévisualisation du résultat (B), un historique (C) et de la documentation des fonctions disponibles (D). En insérant la commande value.split(« , ») OpenRefine créera autant de triplets RDF (ici skos:altLabel) qu’il y a de valeurs dans chaque cellule de cette colonne.

Déclarez le schème

Les concepts qui seront créés doivent être attachés à un objet de type skos:ConceptScheme, qui représente l’ensemble de votre schème. Il faut donc leur ajouter une propriété de type skos:inScheme avec comme objet l’URI de votre vocabulaire (dans notre exemple http://opendata.inrae.fr/Thesaurus/ThesaurusExemple (cadre rouge dans la figure ci-dessous). 

Déclarez ce schème dans une nouvelle ligne du RDF skeleton en utilisant la valeur constante http://opendata.inrae.fr/Thesaurus/ThesaurusExemple et en indiquant type (propriété rdf:type) avec comme valeur skos:ConceptScheme (cadre vert) ainsi qu’une propriété skos:prefLabel pour lui donner un nom. 

Déclarez les Top Concepts

La dernière étape consiste à déclarer les concepts de 1er rang. Cette information est utile aux outils qui afficheront le schème. Dans le cas d’une simple liste, tous les concepts doivent être déclarés comme “top concept”. Dans le cas d’une hiérarchie,  cela concerne uniquement les concepts qui n’ont pas de parent. Avec OpenRefine, c’est possible mais nécessite de connaître quelques fonctions.

Dans notre exemple, il faut d’abord récupérer l’identifiant du concept pour construire le triplet [URI du scheme – skos:hasTopConcept – URI de concept]. Pour cela, créer la propriété skos:hasTopConcept ayant comme sujet le ConceptScheme. Ensuite, pour ne sélectionner que les concepts qui n’ont pas de parent, on utilise la colonne Hiérarchie (parents) pour laquelle on teste l’absence de valeur avec la combinaison de fonctions suivante : 

if(isNull(value), »http://opendata.inrae.fr/Thesaurus/ »+cells.ID.value,null) 

et comme indiqué ci-dessous. Attention à bien sélectionner “Text” pour la partie Content used (car on construit l’URI manuellement).

Exportez la ressource en SKOS

Vous avez fini de déclarer les étapes de transformation de votre fichier tabulé vers SKOS, félicitations. Vous pouvez maintenant exporter votre schème représenté à l’aide du modèle de données SKOS en cliquant sur export comme indiqué ci-dessous. Vous avez alors le choix de télécharger la ressource en RDF/XML ou Turtle.

 

Exportez la procédure de correspondance pour la réutiliser

Il est possible de récupérer le “skeleton” qui contient toutes les déclarations et opérations associées (pour les rejouer sur un fichier similaire ou les partager) à partir de l’onglet d’historique Undo/Redo (1) et le bouton Extract (2). Sélectionnez la dernière ligne intitulée “Save RDF schema skeleton” (3) pour récupérer la dernière version. Recopiez le contenu de la fenêtre de droite (4) et sauvegardez-le dans un fichier texte.

Pour reproduire les étapes de notre test d’OpenRefine, vous pouvez récupérer le code du skeleton et l’appliquer sur le jeu de données en l’insérant dans la fenêtre accessible par le bouton “Apply”.

Pour aller plus loin

Liens utiles

Cas d’utilisation d’OpenRefine pour transformer des vocabulaires

OpenRefine a été utilisé lors du travail de transformation des données issues du dictionnaire de la Viande pour construire le Thésaurus de la Viande. Ce travail est décrit dans un article en français et un article en anglais.  Lire le billet sur le blog du projet FooSIN. 


Cette ressource a été développée dans le cadre du projet ANR FooSIN (ANR-19-DATA-0019-01). Accéder au comparatif des 3 outils pour transformer un vocabulaire au format tabulé vers SKOS. Lire l’introduction à SKOS.

  
Auteurs (INRAE): Jérémy Yon, Sophie Aubin
Relecteurs (INRAE) : Catherine Roussey