Dans le cadre du projet SemBib, j’ai été amené à choisir un identifiant unique pour chaque auteur. Suivant ma stratégie habituelle, j’ai commencé par utiliser des identifiants définis dans notre espace de nommage, avec notre préfixe. Ainsi, il a été possible de produire rapidement des résultats et d’inciter d’autres personnes à participer au projet.
J’applique cette méthode pour les éléments dont j’ai immédiatement besoin, ici les auteurs; je cherche à minimiser les identifiants et le vocabulaire que je définis de façon ad-hoc et à utiliser le plus de vocabulaire connus et courants, mais, dans un esprit d’approche agile, je ne veux pas bloquer de premiers résultats applicatifs par une recherche laborieuse de tous les vocabulaires pré-existants avec lesquels se lier.
Dans un deuxième temps, je cherche si un vocabulaire ou des identifiants existent afin de créer des liens avec d’autres ensembles de données. Le principe de base est de créer de nouvelles versions de mes données -avec une compatibilité ascendante, si les données ont été publiées- notamment avec l’utilisation de owl:sameAs. Je compte consolider cette stratégie dans les prochains mois et je suis preneur d’avis à ce sujet.
Par hasard, j’ai trouvé que je suis identifié par IdRef avec le lien permanent http://www.idref.fr/157248550. Je suis donc allé voir de plus prêt de quoi il s’agit. La page à l’adresse http://www.idref.fr donne peu d’informations. Le sous-titre de IdRef est ‘Le référentiel des autorités Sudoc’, ce qui n’est pas très parlant -sauf si on sait que SuDoc est ‘Le catalogue du Système Universitaire de Documentation’. Le bas de la page contient un bandeau ‘ABES – Agence Bibliographique de l’Enseignement Supérieur’, ce qui suggère déjà un lien plus direct avec le projet SemBib et m’a incité à approfondir.
En fait, la documentation en ligne m’a appris que mon identifiant idref est http://www.idref.fr/157248550/id. Je peux obtenir une représentation XML du contenu de ma notice bibliographique enregistrée par l’ABES à l’adresse http://www.idref.fr/157248550.xml (noter qu’elle est très incomplète). Et pour la notice en JSON: http://www.idref.fr/services/biblio/157248550.json.
En principe, la requête http://www.idref.fr/services/idref2viaf/157248550 devrait trouver mon identifiant VIAF (http://viaf.org/viaf/291343068), mais ne le trouve pas.
Trouver l’identifiant d’un chercheur
Je me suis demandé si j’allais ainsi pouvoir associer un identifiant idref à tous les chercheurs de Telecom ParisTech. Comme il y a environ 200 chercheurs et autant de doctorants à Telecom ParisTech, je voudrais automatiser cela.
Par malchance, le jour où j’ai commencé mes tests les exemples de la section 2.3 ne fonctionnaient pas (le 16/1/2017). J’ai donc posté un message à l’adresse email figurant dans la documentation. Très vite j’ai eu une réponse, avec plusieurs propositions (merci F.M. dont la réponse est largement reprise ci-dessous). Je me borne ici à décrire les solutions publiquement accessibles.
Première méthode
La première consiste à interroger le moteur de recherche Solr d’IdRef avec un Nom/ Prénom de personne (service documenté ici http://documentation.abes.fr/aideidrefdeveloppeur/ch02s01.html). Exemple de requête : http://www.idref.fr/Sru/Solr?q=persname_t:(Moissinac AND Jean-Claude)&fl=ppn_z, affcourt_z&wt=xml
Le paramètre q contient la recherche qui va être effectuée par Solr. Ici, on fait une recherche de type ‘contient les mots’ -indiqué par le suffixe _t- sur le champs persname (nom de personne), suivi de : pour indiquer ses paramètres, ici une liste de chaîne de caractères qui vont être cherchées. Si les mots cherchés sont trouvés -c’est le cas dans l’exemple ci-dessus-, on obtient une réponse telle que:
<?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">1</int> <lst name="params"> <str name="fl">ppn_z</str> <str name="q">persname_t:(Moissinac AND Jean-Claude)</str> </lst> </lst> <result name="response" numFound="1" start="0"> <doc> <str name="ppn_z">157248550</str> </doc> </result> </response>
En remplaçant la fin de la requête wt=xml par wt=json, on obtient une réponse mise en forma en JSON (au 27/1/2017: pas avec le bon MIME type).
La méthode présente un risque de ne rien obtenir si la base IDREF ne contient pas exactement les chaînes cherchées ou la possibilité de récupérer trop de choses si on ouvre trop la recherche. Par exemple, une recherche limitée au mot Moissinac donne 9 réponses qu’il va falloir discriminer. Par exemple, en allant chercher les notices bibliographiques -cf.ci-dessus- et en éliminant les notices inappropriées. Dans les 9 réponses pour ‘Moissinac’, la première est l’id 056874022 associé à la notice http://www.idref.fr/services/biblio/056874022.json où on peut, par exemple, constater que le champ « name » a la valeur « Moissinac, Bernard ». On peut, par exemple, tester les différents champs « name » par rapport à la chaîne de référence « Moissinac, Jean-Claude » avec le distance de Levenshtein. Cela devrait suffire à discriminer correctement la plupart des cas. On peut aussi avoir un contrôle spécifique sur tous les noms pour lesquels on obtient 0 ou plusieurs réponses (en supposant que lorsqu’on a une seule réponse, c’est la bonne). Nous envisagerons plus tard de faire des tests automatisés sur les autres champs de la notice.
Deuxième méthode
La seconde méthode consiste à interroger le moteur Solr de theses.fr avec un nom/prénom et une contrainte supplémentaire de lien de cette personne avec Telecom Paristech (=Paris, ENST) ou son identifiant idref 026375273 :
http://www.theses.fr/?q=personneRAs:jean-claude+moissinac%20AND%20etabSoutenances:Paris%2C+ENST&type=avancee&lng=&lng=&format=xml&fl=directeurTheseNP,directeurThesePpn
On peut obtenir une sortie xml ou json.
Les personnes recherchées doivent avoir été impliquées dans une thèse et pas forcément associées à « Paris, ENST ». La contrainte est forte. De plus, theses.fr ne semble pas connaitre nos différents noms: Telecom Paris, Télécom Paris, Télécom ParisTech… ou, en tout cas, ne pas identifier qu’il s’agit de diverses dénominations d’un même organisme. L’idéal serait de trouver une fois pour toutes l’identifiant idref de notre institution et de l’utiliser dans les critères de recherche. Nous ne traiterons pas cette question aujourd’hui.
S’appuyer sur VIAF
Le billet http://corist-shs.cnrs.fr/IDChercheurs_2016 contient des pistes: au lieu d’utiliser IDREF, s’appuyer sur ORCID ou VIAF avec lesquels IDREF a des accords d’échange.
Un tour sur les API d’ORCID et notamment l’API VIAF (https://platform.worldcat.org/api-explorer/apis/VIAF) me donne le lien suivant:
me permet de trouver mon identifiant VIAF et bien d’autres (SUDOC/IDREF notamment).
Je n’ai plus qu’à décliner cette requête sur l’ensemble des noms de chercheur de Telecom ParisTech en espérant qu’il n’y aura pas trop d’ambiguïtés -qui se traduit avec un champ numberOfRecords supérieur à 1- ou d’absents -qui se traduit avec un champ numberOfRecords supérieur à 0.
Suite: Accès Sparql
Dans un prochain billet, nous explorerons l’accès SPARQL de l’ABES: https://lod.abes.fr/sparql.