Retour d'expérience sur l'utilisation des API HAL

_images/liris-presentation-front-page.png
1

Historique du LIRIS

Gestionnaire de publications :

Les chercheurs saisissent leur publications sur le site web et celles-ci sont affichées globalement, sur les pages des équipes et sur les pages personnelles des chercheurs.

Quelques tableaux de bord pour la direction.

Pour le rapport d'activité, les données ont été extraites de la base et gérées par un groupe dédié en charge du rapport (LaTeX).

Comme pour de nombreux laboratoires qui ont développé leur solution, les évolutions successives (changement d'organisation du laboratoire, changement de typologie de publication, besoin de transfert vers hal, ...) rendent ce gestionnaire compliqué à maintenir.

Il y a eu quelques échanges sur le sujet au moment des évaluations HCERES sur la liste "SI de laboratoire".

2

Décision de migration des publications dans HAL

Migration décidée en 2015 : arrêt de la saisie dans notre gestionnaire de publications.

Les publications sont affiliées aux équipes de recherche du laboratoire, c'est la granularité de notre évaluation.

3

Décision de migration des publications dans HAL

http://hal.archives-ouvertes.fr/rss.php?lab=umr5205

4

API HAL

L'API HAL1 est une API REST2 dont la partie recherche est implémentée par Apache Solr et la partie dépôt via le protocole Sword.

  1. https://api.archives-ouvertes.fr/docs
  2. http://devlog.cnrs.fr/jdev2015/t7

L'intérêt, c'est une plus grande simplicité d'accès, un simple navigateur suffit pour explorer l'API. On dispose alors d'un plus grand nombre d'outils et de librairies contrairement au protocole SOAP employé précédemment.

Note

Une API REST est, en simplifiant, une API qui repose sur le protocole HTTP, ses verbes GET, POST, PUT, DELETE et qui est sans état.

Le protocole SWORD définit un ensemble de services Web basé sur Atom Publishing Protocol (APP), RFC5023.

5

Recherche

L'API HAL permet des recherches :

On récupère les données au format JSON par défaut, mais de nombreux autres formats sont disponibles : XML, XML-TEI, BibTeX, CSV, ...

La documentation sur la recherche est très bien faite : https://api.archives-ouvertes.fr/docs/search/

On peut faire de la même façon des recherches dans les différents référentiels :

https://api.archives-ouvertes.fr/docs/ref

Note

  • Référentiel des projets ANR
  • Affiliation des auteurs aux structures dans les ressources de HAL
  • Référentiel des types de documents
  • Référentiel des instances de portail de HAL
  • Référentiel des métadonnées
  • Référentiel des structures de recherche
  • Référentiel des auteurs
  • Référentiel des projets européens
  • Référentiel des domaines
  • Référentiel des revues
  • Référentiel des listes de métadonnées
6

Dépôt sur HAL

Première étape : rechercher via l'API HAL, les publications qui sont déjà dans HAL : recherche de titre similaire, environ 1100 publications.

$searchhal = "http://api.archives-ouvertes.fr/search/";
$args = "fl=docid,halId_s,title_s&wt=json";
$url = $searchhal . "?q=title_st:\"" . rawurlencode(addcslashes($titre, "+-&|!(){}[]^\"~\\*?:")) . "\"&" . $args;

Les publications sont insérées dans une table de notre base de données pour pouvoir faire des requêtes et des tableaux de bord pour gérer le dépôt dans HAL.

mysql> select t.cd_production, count(t.cd_production) as nb, GROUP_CONCAT(hal_docid SEPARATOR ',') as publications_hal, L.titre from tmp_is_lirispublication_in_hal as t join L_PRODUCTION as L on L.cd_production=t.cd_production group by cd_production having nb > 3 and nb < 10 order by nb;
+---------------+----+------------------------------------------------------------------+--------------------------------------+
| cd_production | nb | publications_hal                                                 | titre                                |
+---------------+----+------------------------------------------------------------------+--------------------------------------+
|            11 |  4 | 324566,324652,544144,1101424                                     | Fouille de Données Spatiales         |
|          1721 |  4 | 449749,518526,879356,1133967                                     | Classification automatique d'images  |
|          2110 |  4 | 443664,834116,834127,1125674                                     | Systèmes d'information pervasifs     |
|           394 |  5 | 575576,1065137,190436,252007,414376                              | Functional specifications.           |
|          2507 |  5 | 432167,437918,633533,1093684,1195856                             | Access Control Models                |
|          2727 |  5 | 788861,1060610,1060625,1128888,1165902                           | Forensic Analysis                    |
|          5805 |  5 | 484354,758594,946469,952777,1155057                              | Partitionnement de graphe            |
|          4221 |  6 | 449299,449320,475917,1085255,28045,135021                        | Distributed Databases                |
|          3669 |  7 | 42809,279215,492058,746195,818985,946592,1122393                 | Evolving Networks                    |
|          5481 |  7 | 67996,68014,140361,619091,872048,1004795,1134481                 | Action recognition in videos         |
|           885 |  8 | 113990,308643,316167,361087,377455,954629,1083153,1124872        | Les bases de données relationnelles  |
|          2564 |  8 | 954629,1083153,1124872,113990,308643,316167,361087,377455        | Les bases de données relationnelles  |
|          6231 |  8 | 667583,725593,726254,782188,782204,782207,782215,783066          | 3D Face Recognition                  |
|          4718 |  9 | 89771,297477,332536,622863,864842,980876,1011141,1063446,1181516 | LAD                                  |
+---------------+----+------------------------------------------------------------------+--------------------------------------+
14 rows in set (0.00 sec)
7

Dépôt sur HAL

Voici par exemple le tableau de bord des publications qui n'ont pas été trouvées dans HAL et que l'on peut filtrer par année ou par type.

_images/publications-liris-not-in-hal.png

Le dépôt des publications de notre gestionnaire qui ne sont pas dans HAL est un gros chantier en cours car environ 4800 publications sont concernées (sur 6000).

8

Dépôt sur HAL

La première étape peut donc être schématisée ainsi.

_images/workflow-scripts-publications-not-in-hal.png
9

Dépôt sur HAL

Exemple de requête sur un titre :

$ curl -s -X GET -H "Content-Type:application/json"
  'https://api.archives-ouvertes.fr/search/?q=title_st:"Graph%20Partitioning"&fl=docid,halId_s,title_s&wt=json' | jq '.'
{
  "response": {
    "numFound": 55,
    "start": 0,
    "docs": [
      {
        "docid": 652774,
        "title_s": [
          "Parallelization of Graph Partitioning"
        ],
        "halId_s": "hal-00652774"
      },
      {
        "docid": 676989,
        "title_s": [
          "Bootstrap clustering for graph partitioning"
        ],
        "halId_s": "hal-00676989"
      },
      ...
    ]
  }
}
10

Dépôt sur HAL

Un premier module de dépôt avait été développé pour le protocole Soap, il avait pour but de permettre aux chercheurs d'envoyer leur publication sur HAL via une succession de formulaires pour compléter les données requises (domaine scientifique, ...).

Ce module a du être recyclé / ré-écrit pour générer le XML-TEI attendu pour le dépôt.

Des scripts ont été développés en Python pour automatiser :

11

Dépôt sur HAL

Générer les fichiers XMl-TEI pour les publications à exporter (succession de formulaires web).

_images/workflow-scripts-automatisation-export-tei.png
12

Dépôt sur HAL

Exemple d'informations enregistrées suite à la génération du XML-TEI dans SQLite.

sqlite> select * from liris_export_tei where length(filename) > 0;
             cd_prod = 6996
          type_inist = ARTACL
              statut = PUB
            filename = liris-tei-6996.xml
             fileurl = xxxxxxxxxx/liris-tei-6996.xml
       auteurs_liris = nnnnnnnn (Tabard Aurélien) s
      auteurs_id_hal = aurelientabard
        doublons_hal =
parametres_manquants =
      pb_publication =
           simplifie = 0
      labo_exterieur =
       reference_hal =
       creation_date = 2016-04-11T15:15:34.277238
   modification_date = 2016-04-11T15:15:34.847042
sqlite> select * from liris_export_tei where length(doublons_hal) > 0;
             cd_prod = 5929
          type_inist = ARTACL
              statut = PUB
            filename = liris-tei-5929.xml
             fileurl = xxxxxxxxxx/liris-tei-5929.xml
       auteurs_liris = nnnnnnnn (Tchounikine Anne) s,nnnnnnnn (Ahmed Usman),nnnnnnnn (Miquel Maryvonne)
      auteurs_id_hal = anne-tchounikine,maryvonne-miquel
        doublons_hal = hal-01256137 (https://hal.archives-ouvertes.fr/hal-01256137) Dynamic cubing for hierarchical multidimensional data space,tel-00876624 (https://hal.archives-ouvertes.fr/tel-00876624) Dynamic cubing for hierarchical multidimensional data space
parametres_manquants =
      pb_publication =
           simplifie = 0
      labo_exterieur =
       reference_hal =
       creation_date = 2016-04-11T15:10:44.359391
   modification_date = 2016-04-11T15:10:44.933038
sqlite> select * from liris_export_tei where length(parametres_manquants) > 0;
             cd_prod = 6473
          type_inist = OUV
              statut = PUB
            filename =
             fileurl =
       auteurs_liris = nnnnnnnn (Tougne Laure) s
      auteurs_id_hal = laure-tougne
        doublons_hal =
parametres_manquants = Première et dernière page
      pb_publication =
           simplifie = 0
      labo_exterieur =
       reference_hal =
       creation_date = 2016-04-11T15:11:14.688117
   modification_date = 2016-04-11T15:11:15.264018
sqlite> select * from liris_export_tei where length(erreurs_php) > 0;
             cd_prod = 6888
          type_inist = COLCOM
              statut = PUB
            filename = liris-tei-6888.xml
             fileurl = xxxxxxxxxx/liris-tei-6888.xml
       auteurs_liris = nnnnnnnn (Hassas Salima) s,nnnnnnnn (Armetta Frédéric),nnnnnnnn (Gueriau Maxime)
      auteurs_id_hal = salima-hassas,frederic-armetta,maxime-gueriau
         erreurs_php = (Severity: Warning|Message:  DOMDocument::createElement(): unterminated entity reference            Expo|Filename: models/publi_m.php|Line Number: 1812)
        doublons_hal =
parametres_manquants =
      pb_publication =
           simplifie = 0
      labo_exterieur =
       reference_hal =
       creation_date = 2016-04-13T14:59:26.986086
   modification_date = 2016-04-13T15:12:15.217122
13

Dépôt sur HAL

_images/workflow-scripts-get-check-and-upload-tei.png
14

Dépôt sur HAL

Pages HTML générées pour la comparaison entre la publication sur notre gestionnaire et la publication exportée sur HAL.

Des formulaires similaires sont générés pour la gestion des doublons.

_images/compare-publis-liris-export-hal.png
15

Dépôt sur HAL

Il faut itérer car si une partie des publications passe directement, pour les autres, il faut :

_images/help.gif
16

Dépôt sur HAL

Les pdf ne sont pas déposés car on n'est pas sûr que la version présente sur notre site soit déposable.

On insère dans les métadonnées de HAL, notre identifiant de publication (référence interne).

Ainsi on peut facilement retrouver le PDF qui correspondait à la publication et passer la publication en texte intégral.

Les thèses et HDR ne sont donc pas déposées car le texte intégral est obligatoire, de plus l'ABES dépose les thèses actuelles.

On essaie de transférer la propriété aux membres dont on a les identifiants via l'en-tête On-Behalf-Of au moment du dépôt. Ils sont alors prévenus par mail comme le déposant et peuvent corriger / compléter la publication déposée.

17

Récupération des publications de HAL

Une application de récupération des publications de HAL, inspirée du code ExtractionHAL a été développée et adaptée nos besoins, à notre Système d'Information.

Les données des publications sont récupérées via l'API HAL, http://api.archives-ouvertes.fr/, elles sont analysées, converties en HTML, triées/filtrées (laboratoire / membre / équipe) et affichées.

Les requêtes sont font en deux temps :

Si on ne procède pas ainsi, on obtient N réponses (N étant de 20 ou 30 environ),
et il faut ensuite refaire des requêtes pour avoir la suite des réponses, ce qui
est pénible
18

Récupération des publications de HAL

Il y a des requêtes construites :

``https://api.archives-ouvertes.fr/search/?q=collCode_s:LIRIS``
``https://api.archives-ouvertes.fr/search/?q=collCode_s:LIRIS%20AND%20rteamStructId_i:RTEAM``
``https://api.archives-ouvertes.fr/search/?q=collCode_s:LIRIS%20AND%20authIdHal_s:%22ID-HAL``

Le résultat de la requête, au format JSON, est conservé sur disque et constitue un cache de l'extraction des publications de HAL. En cas de problème ou s'il n'y a pas de résultat, une entrée vide est créée (sauf si le cache n'était pas vide) pour l'homogénéité de traitement.

19

Problèmes rencontrés

20

Outils utilisés

Pour l'interaction avec une API REST, les plugins et / ou les applications suivantes sont intéressants :

Pour reformatter et valider le XML-TEI, utilisation de xmllint 1 avec le schéma XML fourni par le CCSD, https://api.archives-ouvertes.fr/documents/aofr-sword.xsd.

  1. command line XML tool, package Debian libxml2-utils
$ xmllint --format liris-tei-1234.xml > liris-tei-1234-pretty.xml

$ xmllint --schema aofr-sword.xsd liris-tei-1234-pretty.xml

Au démarrage, utilisation de l'application editix 2 pour étudier les contraintes décrites dans le schéma XMl

  1. application gratuite pour une utilisation non commerciale, http://www.editix.com/download.html
21

Liens - ressources

22