logo BnF
logo Api
Découvrez et utilisez les données de la BnF

Vous êtes ici

[Hackathon 2017] Explorer les données des collections de la BnF liées à la musique

Les données de la BnF sont riches et complexes et ouvertes sur d'autres bases de données exposées sur le web. Ces exemples montrent trois démarches différentes pour construire des requêtes qui croisent plusieurs approches ou plusieurs sources de données.

Partitions

Je cherche une partition de musique baroque pour clavier et violon.

Je récupère dans le SRU catalogue général les notices de partitions publiées entre 1600 et 1750.

Au format Intermarc, le critère pour les partitions est bib.doctype all "c" et les critères de dates : bib.publicationdate >= "1600" and bib.publicationdate <= "1750"

http://catalogue.bnf.fr/api/SRU?version=1.2&operation=searchRetrieve&query=bib.doctype%20all%20%22c%22%20and%20bib.publicationdate%20%3E=%20%221600%22%20and%20bib.publicationdate%20%3C=%20%221750%22&recordSchema=intermarcxchange&maximumRecords=200&startRecord=1

La distribution instrumentale est indiquée dans la balise <mxc:datafield tag="048">, de manière codée sur deux lettres selon le référentiel Distribution musicale.

Exemple pour la notice ark:/12148/cb44251427s :

<mxc:datafield tag="048" ind1=" " ind2=" ">
	<mxc:subfield code="a">ka01</mxc:subfield>
	<mxc:subfield code="a">sa01</mxc:subfield> 

Le code=a signifie qu'il s'agit d'un soliste, "ka" signifie piano, "sa" signifie violon, "01" donne le nombre de solistes. Les identifiants ARK de ces notices sont contenus dans les balises <srw:recordidentifier>.

En ajoutant le nom de domaine "http://data.bnf.fr" aux identifiants ARK des notices qui possèdent cette distribution musicale, je récupère le lien vers l'exemplaire numérique Gallica par le SPARQL endpoint de data.bnf.fr. Pour les partitions qui n'ont pas d'exemplaires numérisés, je récupère les alignements avec la Bibliothèque musicale Petrucci.

PREFIX schemaorg: <http://schema.org/>
PREFIX rdarelationships: <http://rdvocab.info/RDARelationshipsWEMI/>
SELECT ?gallica ?imslp
WHERE {
  {
    [] rdarelationships:electronicReproduction ?gallica.
}
UNION
{
    FILTER NOT EXISTS {[] rdarelationships:electronicReproduction ?gallica.}
    [] rdarelationships:workManifested ?oeuvre.
    ?oeuvre schemaorg:sameAs ?imslp.
    FILTER CONTAINS  (str(?imslp), "imslp.org").
    }
}

Réponse en json pour l'exemple ark:/12148/cb44251427s (ne pas oublier de décocher l'option Strict checking of void variables)

Avec les identifiants ARK des documents numérisés, je récupère les documents en noir et blanc, grâce au protocole IIIF :

http://gallica.bnf.fr/iiif/ark:/12148/btv1b10520210t/f1/full/750,1000/0/bitonal.png.

Spectacles

Je cherche les articles de presse qui parlent des opéras créés au XIXe siècle et décrits dans le catalogue.

Je récupère les notices de spectacles dans le SRU (attention à bien préciser "&recordSchema=intermarcXchange" dans la requête) :
http://catalogue.bnf.fr/api/SRU?version=1.2&operation=searchRetrieve&query=bib.doctype%20adj%20%22v%22%20and%20bib.publicationdate%20%3E%20%221800%22%20and%20bib.publicationdate%20%3C%20%221900%22&recordSchema=intermarcXchange

Le type de spectacle est codé dans la balise suivante : <mxc:controlfield tag="009">v1 oz </mxc:controlfield>
En quatrième position, la lettre "v" signifie qu'il s'agit de théâtre musical (opéra, opérette...).
Dans les notices concernées, je peux récupérer le titre du spectacle dans la balise //datafield[@tag='245']/subfield[@code='a'] et le nom des contributeurs dans les balises //datafield[@tag='700']/subfield[@code='a'].
Exemple pour l'ark/12148/cb414927597 :

<mxc:datafield tag="245" ind1="1" ind2=" ">
    <mxc:subfield code="a">Fidélio</mxc:subfield>
<mxc:datafield tag="700" ind1=" " ind2=" ">
    <mxc:subfield code="a">Carvalho</mxc:subfield>

Je peux également récupérer la date de la représentation, dans la balise //datafield[@tag='265']/subfield[@code='d']

<mxc:datafield tag="265" ind1=" " ind2=" ">
    <mxc:subfield code="d">18600505</mxc:subfield>

Une fois le contenu de ces balises récupéré, je peux interroger le mode plein texte de Gallica avec ces chaînes de caractères en le croisant avec le critère de date (qui s'appuie sur la date du fascicule) gallicapublication_date => "1860",  le critère de type de document dc.type = any "fascicule" et le critère ocr.quality all "Texte disponible" :
http://gallica.bnf.fr/SRU?operation=searchRetrieve&exactSearch=false&collapsing=true&version=1.2&query=(gallica%20any%20%22fidelio%22)%20and%20(gallica%20any%20%22carvahlo%22%20or%20gallica%20any%20%22treitschke%22)%20and%20(gallicapublication_date%3E=%221860%22%20and%20dc.type%20=%20any%20%22fascicule%22%20and%20(ocr.quality)%20all%20%22Texte%20disponible%22)
J'élimine les URL contenus dans les balises <dc:identifier> qui portent le suffixe "/date" après l'identifiant ARK ou le préfixe "ISSN".

Collections audiovisuelles disponibles à l'écoute

Dans le SPARQL endpoint de data.bnf.fr, je récupère le nom des personnes qui jouent de la guitare dans les collections de la BnF :

DEFINE input:same-as "yes"
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?nom
WHERE{
?expression <http://data.bnf.fr/vocabulary/roles/r1280> ?auteur.
?auteur foaf:name ?nom.
}

Réponse en JSON

Avec les chaînes de caractères, j'interroge l'API Search de Deezer avec le critère artiste ?q=artist: :

https://api.deezer.com/search?q=artist:%22Django%20Reinhardt%22

45 000 documents appartenant aux collections audiovisuelles ont été numérisés : ils sont disponibles dans Gallica et en écoute intégrale sur Deezer ou Qobuz, après authentification.

Autres référentiels utiles