Créer des mashups à partir d’Idref

Sortir les données de leurs silos est devenu un enjeu majeur : dans un contexte de web de données où l’interopérabilité par le format (RDF) est un gage d’intégration au web et donc de visibilité, quand la multiplication des applications métiers (SIGB, Sudoc, Hal, annuaire d’établissement…) non seulement cloisonnent mais aussi à la fois doublonnent et morcellent les données, quand les métadonnées bibliographiques jusqu’ici purement descriptives acquièrent une plus-value informative en les croisant les unes aux autres ou avec des données issues d’autres contextes…
Atteindre le sommet de la montagne, l’interopérabilité par un formalisme commun, c’est le top du top, mais en tant que consommateur de données on peut quand même s’affranchir des divers formats natifs en exploitant : en amont le principe d’interopérabilité par les liens et d’alignement des référentiels, en front office la possibilité de produire des interfaces web qui combinent le résultat de requêtes sur diverses sources de données (par des API par exemple…quand elles existent…) au sein de mashups.

Voici donc un petit exemple de ce que l’on peut produire à partir d’Idref et du travail de l’Abes autour de ce référentiel, travail qui consiste à intégrer pour chaque auteur le maximum d’identifiants qui identifient ce même auteur dans d’autres référentiels ou réservoirs bibliographiques (BnF, Hal, wikipedia, Orcid, Viaf). A partir du pivot Idref on peut donc se connecter à différentes sources données , voire naviguer de l’une à l’autre, afin de proposer une vue consolidée des publications d’un auteur.

Pour commencer donc…

On retrouve les différents identifiants d’un même auteur regroupés dans une notice Idref en utilisant le web service idref2id que l’on  requête sur le ppn, par exemple pour un chercheur bien connu chez nous à l’Université de Nice l’url http://www.idref.fr/services/idref2id/052724301, qui renvoie au choix en xml ou json entre autres les identifiants suivants :

Pour poursuivre… : récupération des publications dans le Sudoc, data.bnf et Hal.

Ces 3 réservoirs conviennent parfaitement car on va ensuite récupérer la liste des publications dans ces 3 bases en interrogeant leurs API dédiées, qui présentent chacune leurs structures et formats de réponses spécifiques.

  • Pour Hal : https://api.archives-ouvertes.fr/search/?wt=json&q=authIdHal_s:damon-mayaffre&fl=*_s, c’est-à dire qu’on interroge tous les champs de la notice (fl=*_s) sur l’index authIdHal_s (q=authIdHal_s:damon-mayaffre) en demandant un format de sortie Json (wt=json)
  • Pour le Sudoc : http://www.idref.fr/services/biblio/052724301.xml, c’est-à dire qu’on interroge le web service biblio sur le ppn dans Idref avec un format de sortie xml (c’est fait exprès, j’aurais pu choisir Json mais le but est précisément de montrer que l’on peut s’accomoder des différents formats de données, et puis pour être honnête parser ce flux Json est une vraie galère !)
  • Et enfin c’est plus subtil pour data.bnf : pas d’API mais on va utiliser le Sparql endpoint de Data.bnf avec une requête Sparql et son résultat sérialisé en json comme d’une API. La requête qui produit la liste des expressions (leur titre + leur date) liées à cet auteur :
http://data.bnf.fr/sparql?default-graph-uri=&query=PREFIX+rdarelationships%3A+%3Chttp%3A%2F%2Frdvocab.info%2FRDARelationshipsWEMI%2F%3E%0D%0Aselect+distinct%28%3Fz%29+%3Ftitle+%3Fdate+where+%7B%3Fy+%3Fp+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb13626827q%23about%3E.%0D%0A%3Fz+rdarelationships%3AexpressionManifested+%3Fy.%0D%0A%3Fz+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Ftitle%3E+%3Ftitle.%0D%0A++%3Fz+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fdate%3E+%3Fdate%7D&format=application%2Fsparql-results%2Bjson&timeout=0&should-sponge=&debug=on

Pour conclure…

On utilise le framework Jquery et la technologie des appels Ajax pour envoyer les requêtes http, parser les différents flux de résultats et les afficher en mode asynchrone dans une page web
Cela donne par exemple de manière simplifiée (on n’affiche que le titre des documents dans une <div id= »results-hal-box »>) pour l’appel à l’API Hal

var hal = 'https://api.archives-ouvertes.fr/search/?wt=json&q=authIdHal_s:damon-mayaffre&fl=*_s';
    $.ajax({
        url: hal,
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            result = data;
            for (var i = 0; i <= result.response.numFound; i++) {
                $('#results-hal-box').append('<p>' + result.response.docs[i].title_s + '</p>');
            }
        }
    });

De manière analogue pour exploiter le web service biblio

var idref = 'http://www.idref.fr/services/biblio/52724301.xml';
    $.ajax({
        url: idref,
        type: 'GET',
        dataType: 'xml',
        success: function(xml) {
            $(xml).find('doc').each(function() {
                var citation = $(this).find('citation').text();
                $('#results-idref-box').append('<p>' + citation + '</p>');
            });
        }
    });

Et enfin la même chose pour afficher les documents de data.bnf, mais en changeant de méthode pour le fun et en utilisant la méthode jQuery.getJSON()

$.getJSON("http://data.bnf.fr/sparql?default-graph-uri=&query=PREFIX+rdarelationships%3A+%3Chttp%3A%2F%2Frdvocab.info%2FRDARelationshipsWEMI%2F%3E%0D%0Aselect+distinct%28%3Fz%29+%3Ftitle+%3Fdate+where+%7B%3Fy+%3Fp+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fark%3A%2F12148%2Fcb13626827q%23about%3E.%0D%0A%3Fz+rdarelationships%3AexpressionManifested+%3Fy.%0D%0A%3Fz+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Ftitle%3E+%3Ftitle.%0D%0A++%3Fz+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fdate%3E+%3Fdate%7D&format=application%2Fsparql-results%2Bjson&timeout=0&should-sponge=&debug=on",
        function(data) {
            result = data;
            for (var i = 0; i <= result.results.bindings.length; i++) {
                $('#results-bnf-box').append('<p>' + result.results.bindings[i].title.value + '</p>');
            }
        });

Voici donc ce que cela pourrait donner, avec quelques aménagements :

  •  ajout d’un bloc comprenant les résultats d’une requête sur l’API d’Isidore pour cet auteur
  • un peu de Bootstrap pour (essayer de) faire joli
  • une visualisation également dynamique en timeline des publications recensées dans Hal (avec la librairie vis.js)
  • un graphe des difftant qu’on y est, ajoutérents identifiants et leurs alignements pour cet auteur (toujours avec vis.js)

 

 

 

(Le code complet sur Github ici)

Pour aller plus loin… A quoi ça sert ?

A quoi ça sert, puisque les pages publiques d’Idref proposent déjà cette vue FRBRisée par entité Personne qui regroupe les notices liées dans le Sudoc, Hal, Thèses.fr et Calames ? Et bien…

  • déjà à savoir le faire également, pour être en capacité de proposer et de personnaliser ce genre d’interfaces consolidées (pour ceux que ça intéresse, voici ici des bouts de code ré-utilisables illustrés par cette page minimaliste

  • pourquoi pas à générer un workflow automatisé allant d’une extraction d’un référentiel d’établissement type annuaire au moissonnage d’identifiants liés jusqu’à la génération à la volée de pages web par chercheurs
  • voire à constituer une base de données intégrant le maximum d’identifiants pour redistribution dans Hal, augmentées de données locales ou issues de DBpedia pour production en RDF…

 

Taggé , , .Lien pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *