Skip to content

[fr] Téléchargements par lots : comment récupérer des ensembles de documents au moyen d'un script

Alexis Michaud edited this page Dec 9, 2019 · 4 revisions

Click here for an English version of this page.

COCOON, le réservoir de données qui accueille la Collection Pangloss, met en oeuvre des protocoles et des modèles standards afin de faciliter l'interopérabilité et la ré-utilisabilité des ressources. Cela permet notamment de télécharger les fichiers par lots. Cette page fournit un exemple : elle explique comment télécharger toutes les ressources de la Collection Pangloss qui comportent une transcription au format XML. Cet exemple vise à donner une idée des possibilités ouvertes par ces standards (rdf, sparql, edm...).

Voici des lignes de code qui permettent de récupérer tous les documents assortis de transcriptions au format XML.

PREFIX edm: <http://www.europeana.eu/schemas/edm/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX ebucore: <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#>

SELECT DISTINCT ?audioFile ?textFile ?lg ?cho WHERE {
   ?aggr edm:aggregatedCHO  ?cho .

   ?cho a edm:ProvidedCHO.
   ?cho dc:subject ?lg FILTER regex(str(?lg), "^http://lexvo.org/id/iso639-3/")
   ?cho edm:isGatheredInto <http://cocoon.huma-num.fr/pub/COLLECTION_cocoon-af3bd0fd-2b33-3b0b-a6f1-49a7fc551eb1> .
   ?cho  dcterms:accessRights "Freely available for non-commercial use" .

   ?aggr edm:hasView ?transcript .
   ?transcript  dcterms:conformsTo <http://cocoon.huma-num.fr/pub/CHO_cocoon-49aefa90-8c1f-3ba8-a099-0ebefc6a2aa7> .

   ?transcript foaf:primaryTopic ?textFile .

   ?aggr edm:hasView ?recording .
   ?recording ebucore:sampleRate "22050" .
   ?recording foaf:primaryTopic ?audioFile .
}

Pour commenter un peu bloc par bloc, voilà ce que ça signifie:

SELECT DISTINCT ?audioFile ?textFile ?lg ?cho WHERE {
   ?aggr edm:aggregatedCHO  ?cho .

   ?cho a edm:ProvidedCHO.
   ?cho dc:subject ?lg FILTER regex(str(?lg), "^http://lexvo.org/id/iso639-3/")
   ?cho edm:isGatheredInto <http://cocoon.huma-num.fr/pub/COLLECTION_cocoon-af3bd0fd-2b33-3b0b-a6f1-49a7fc551eb1> .
   ?cho  dcterms:accessRights "Freely available for non-commercial use" .

Sélectionne toutes les ressources de la collection Pangloss qui sont librement accessibles et récupère au passage l'identifiant des documents et la langue étudiée.

   ?aggr edm:hasView ?transcript .
   ?transcript  dcterms:conformsTo <http://cocoon.huma-num.fr/pub/CHO_cocoon-49aefa90-8c1f-3ba8-a099-0ebefc6a2aa7> .

   ?transcript foaf:primaryTopic ?textFile .

Sélectionne les URL des transcriptions qui sont au format Pangloss

?aggr edm:hasView ?recording .
?recording ebucore:sampleRate "22050" .
?recording foaf:primaryTopic ?audioFile .

Sélectionne les URL des enregistrements échantillonnés à 22.05 kHz

SELECT DISTINCT ?audioFile ?textFile ?lg ?cho WHERE {

C'est la ligne qui sélectionne les champs qu'on veut voir apparaître dans les résultats.

Ca donne comme résultat un tableau avec toutes les URLs à télécharger. Colonne audioFile pour le fichier audio, colonne textFile pour la transcription. Les deux autres colonnes sont pour l'identifiant de la langue et l'identifiant de la ressource. L'identifiant de la ressource pourra vous permettre de récupérer l'ensemble des autres métadonnées si vous le souhaitez.

Une fois la requête exécutée avec le sparql-endpoint (https://cocoon.huma-num.fr/sparql), il n'y a plus qu'à donner ces listes en paramètre à un programme comme wget.

Pour venir par la suite rechercher les nouveautés, le plus simple est de limiter la recherche à ce qui est supérieur à la date de la dernière récupération en ajoutant la clause suivante dans n'importe quel bloc (il n'y a pas de notion d'ordre entre les clauses).

?cho  dcterms:available ?date FILTER (str(?date) > "2018-06-01").

[texte de Michel Jacobson, juillet 2018]