Les établissements utilisateurs des données de Hal peuvent se féliciter de la présence de vocabulaires contrôlés disciplinaires tels que JEL, ACM ou MeSH ✨.
Car malheureusement, on revient de loin : la saisie, des années durant, de mots-clés libres a généré une "dette technique de données" qui rend délicate, par exemple, la caractérisation des profils d'expertise des chercheurs ou des laboratoires à partir des données Hal [ 1 ].
Pour rendre le problème plus parlant, voici la liste des variantes de graphies pour quelques-mots clés, obtenues depuis l'API Hal :
Moyen Âge | Moyen-Âge | Moyen âge | MOYEN AGE | Moyen age | Moyen äge | Moyen Äge | MOyen Âge | Moyen AGe | Moyen âge | Moyen Âge | MOYEN-AGE |
Île-de-France | Ile-de-France | Ile-de-france | Île de France | Ile-de France | Île-de-france | Ile de france | ILE DE FRANCE | Ïle-de-France | Île de france | Ile-De-France | ILE-DE-FRANCE | Île-De-France | Île-de-France |
Partenariat public-privé | Partenariat public privé | Partenariat Public-Privé | Partenariat public/privé | Parténariat public-privé | Partenariat public-Privé | Partenariat Public Privé | Parténariat public-Privé | Partenariat public-privé |
Même si ces exemples n'ont pas été choisis tout à fait au hasard , ils donnent une petite idée, a posteriori et a contrario, de l'importance qu'il y a à fournir des mécanismes de suggestion ("autocomplétion" ) basés sur des vocabulaires reconnus.
Et pas seulement pour limiter les "variantes" orthographiques 🙈 .
Car idéalement, pour gérer les informations sur la recherche selon les canons des "FAIR Data" , il faudrait également disposer pour chaque concept d'un identifiant unique (une URI) se prêtant, si possible, à un « déréférencement » : une opération qui consiste à naviguer sur le web jusqu'à la source de données indiquée par l'URI (qui est aussi, souvent, une URL : c'est pratique 😊 ).
Par exemple, pour "Partenariat public-privé", si on disposait d'une URI telle que https://catalogue.bnf.fr/ark:/12148/cb13755654m ou https://www.idref.fr/061611514, on pourrait en tirer une foule de bénéfices : des traductions, des alignements avec des vocabulaires tiers (Public-private sector cooperation de la Library of congress ), des variantes... Ou tout simplement vérifier qu'on a des données correctes .
En pratique, c'est un peu compliqué
Normalement, ce qui précède vous a motivés 🤓 - si vous ne l'étiez pas déjà - à vouloir tirer tout le parti possible des quelques vocabulaires contrôlés (JEL, MeSH, ACM) proposés au sein des données Hal.
C'est ce que nous avons voulu faire dans le cadre du projet SoVisu+, du consortium CRISalid.
Prenons le cas du vocabulaire JEL (pour «Journal of Economic Literature»). C'est un système de classification des publications 📊 qui émane l'American Economic Association (AEA) et s'applique aux publications ... dans le domaine de l'économie (vous vous en étiez doutés 🤷♂️).
Sur son site web, l'AEA fournit certes le vocabulaire avec ses codes et ses définitions , mais ne pousse pas la gentillesse jusqu'à proposer les fameuses "URI" qui permettraient d'intégrer ces concepts parmi d'autres données "sémantiques" 😞. Par exemple, le code "A14" représente "Sociology of Economics", mais son unicité est loin d'être garantie : bien de choses, sur terre, sont susceptibles de s'appeller A14, par exemple des autoroutes 🛣️ ou des avions ✈️. Le code "A14" ne comporte aucun indice qui permettrait à un système de découvrir l'information associée. On peut parler de vocabulaire « à l'ancienne » 🕰️ en quelque sorte, avec des codes qui étaient peut-être suffisants dans un contexte fermé, mais qui ne font plus sens dans le contexte ouvert du web .
Mais ce sont ces codes 🔢 que l'on retrouve dans les données issues de HAL...
Prenons à titre d'exemple une publication en économie pourvue des fameux domaines JEL : https://hal.science/hal-02169144v1
Et interrogeons à son sujet le endpoint Sparql de Hal. (http://sparql.archives-ouvertes.fr/sparql ) :
Nos classifications JEL figurent bien dans le résultat. Mais comment les exploiter ?
Nous pourrions bien nous donner la peine de "rabouter" les labels et les identifiants en interrogeant l'API JSON de HAL (https://api.archives-ouvertes.fr/search?q=halId_s:hal-02169144&fl=*), à condition de faire confiance à l'ordre des résultats. Mais on est loin de la richesse promise par les vocabulaires contrôlés !
SKOS à la rescousse
À ce stade, on commence à se dire que ce serait quand-même beaucoup plus simple si quelqu'un avait publié le vocabulaire JEL quelque part sur le web dans un format moderne, typiquement SKOS (simple knowledge organization system), qui est le standard du web sémantique pour la représentation des vocabulaires .
Ça tombe bien : quelqu'un l'a fait 👏 ! Le Leibniz-Informationszentrum Wirtschaft (non, n'essayez pas de le prononcer 😅 ). Cette institution a converti le vocabulaire JEL au format SKOS et l'a publié sur l'application Skosmos https://zbw.eu/beta/skosmos/jel/en/. L'information qu'il contient est devenue ainsi accessible aussi bien aux robots 🤖 qu'aux humains 👤.
Une petite «concaténation» plus tard et le tour est joué : quand Hal nous envoie "G.G1.G13", il ne nous reste plus :
- si on est un être humain 👤, à consulter https://zbw.eu/beta/skosmos/jel/en/page/?uri=http%3A%2F%2Fzbw.eu%2Fbeta%2Fexternal_identifiers%2Fjel%23G13
- si on est un robot 🤖 (certains d'entre eux nous lisent), on préférera sans doute https://zbw.eu/beta/skosmos/rest/v1/jel/data?uri=http%3A%2F%2Fzbw.eu%2Fbeta%2Fexternal_identifiers%2Fjel%23G13&format=application/rdf%2Bxml
Mais n'avons nous pas vendu un peu vite la trop vite la peau de l'ours ...
À l'usage, il s'avère que le site https://zbw.eu/beta/skosmos n'est pas en pleine forme 🤒 et qu'il cesse rapidement de répondre lorsque les requêtes arrivent en rafales... Pour couronner le tout , les liens de téléchargement proposés par l’institution sur la page d'accueil du vocabulaire répondent invariablement "404" 😞 .
En serons nous quitte pour pour refaire tout le travail 😓 de formalisation SKOS et republier le vocabulaire dans un nouveau domaine ?
Sauvés par la Wayback Machine
C'est dans ces cas là qu'il faut penser à la fameuse "Wayback Machine" d'Internet Archive (https://web.archive.org/) 🥁 2 Coup de chance , le fichier SKOS contenant l'ensemble du vocabulaire JEL de la ZBW a été régulièrement archivé, et la dernière fois, pas plus tard qu'en janvier 2024 !
Pour nous, voilà qui est suffisant : une fois le vocabulaire récupéré, il suffisait de le charger dans un serveur adapté aux données sémantiques (Apache Jena Fuseki) et d'empaqueter le tout dans un container Docker !
Le vocabulaire JEL du Leibniz-Informationszentrum Wirtschaft sera désormais disponible au sein de notre système "SoVisu+" sous forme d'un microservice, afin d'assister l'intégration des données de Hal au graphe de connaissance institutionnel !
- Le container Docker : https://hub.docker.com/repository/docker/crisalidesr/svp-jel-proxy/general
- Le code qui a permis de le créer : https://github.com/CRISalid-esr/svp-jel-proxy
Pour tester vous-mêmes
À ce stade, vous souhaitez peut-être manipuler vous même ce composant.
Prérequis
On suppose que vous disposez d'un environnement en ligne de commande de type Unix, comme un Mac, le Windows subsystem for linux, ou pourquoi pas - on a tous le droit de rêver - une vraie machine sous Linux, et que vous y avez déjà installé Docker.
Démarrez svp-jel-proxy sur un port de votre choix (dans cet exemple, 8888) :
docker container run --rm -it -p 8888:3030 crisalidesr/svp-jel-proxy
Votre machine héberge désormais un Fuseki chargé avec le vocabulaire Jel et disponible à l'adresse http://localhost:8888/jel/sparql.
Pour la suite, installez un outil tel que Postman qui vous facilitera l'édition de requêtes. Utilisez de préférence le verbe HTTP POST, sans quoi vous aurez du mal avec les sauts de lignes.
Une requête de base :
Pour tester l'affichage de la notice complète de http://zbw.eu/beta/external_identifiers/jel#E24
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX void: <http://rdfs.org/ns/void#>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dc: <http://purl.org/dc/terms/> CONSTRUCT { ?concept rdf:type skos:Concept ; skos:prefLabel ?prefLabel ; skos:altLabel ?altLabel ; skos:notation ?notation ; skos:relatedMatch ?relatedMatch ; skos:narrowMatch ?narrowMatch ; skos:broadMatch ?broadMatch ; skos:inScheme ?scheme ; dc:isPartOf ?dataset ; rdfs:label ?label . ?scheme rdf:type skos:ConceptScheme ; skos:prefLabel ?schemeLabel . ?dataset rdf:type void:Dataset ; rdfs:label ?datasetLabel .} WHERE { BIND(<http://zbw.eu/beta/external_identifiers/jel#E24> AS ?concept) OPTIONAL { ?concept skos:prefLabel ?prefLabel . } OPTIONAL { ?concept skos:altLabel ?altLabel . } OPTIONAL { ?concept skos:notation ?notation . } OPTIONAL { ?concept skos:relatedMatch ?relatedMatch . } OPTIONAL { ?concept skos:narrowMatch ?narrowMatch . } OPTIONAL { ?concept skos:broadMatch ?broadMatch . } OPTIONAL { ?concept skos:inScheme ?scheme . ?scheme skos:prefLabel ?schemeLabel . } OPTIONAL { ?concept dc:isPartOf ?dataset . ?dataset rdfs:label ?datasetLabel . } OPTIONAL { ?concept rdfs:label ?label . FILTER (LANG(?label) = "en" || LANG(?label) = "de" || LANG(?label) = "fr" || LANG(?label) = "es") }}
En guise de conclusion
- On n'oubliera pas toutefois de mentionner ici les louables efforts de l'équipe scanR pour fournir des versions des métadonnées Hal réalignées sur Idref/Rameau et WikiData ! ↩
- Si vous ne connaissez pas ou mal Internet archive, on vous recommande d'écouter la radio . ↩