Revenir à l'exercice 2

Requête dans les données de la Bibliothèque nationale

La Bibliothèque nationale de France (BNF) a retranscrit une partie des informations que contiennent ses notices d'autorité sous forme de données publiées sur le web avec des technologies dites du web des données ou web sémantique. Voir la documentation de ce projet et une présentation du modèle de données adopté par la BNF.

A titre d'exemple, on peut comparer la notice 'Nicolas Copernic' du catalogue général et celle mise à disposition dans le cadre du projet web des données.

Pour les intéressés, une présentation des concepts du web sémantique, dans le contexte du mouvement Open Data, se trouve sur cette page.

Il est donc désormais possible d'interroger avec le langage SPARQL le point d'accès des données de la BNF pour créer un ensemble de données tirées des notices d'autorité.

Pour ce faire, il faudra ouvrir l'Editeur SPARQL de data.bnf.fr et coller dans l'espace 'Rêquete' la requête qui suit, tout en laissant le format de sortie par défaut: HTML.

Le résultat de la requête est ainsi présenté sous forme de table et peut être parcouru.

PREFIX egr: <http://rdvocab.info/ElementsGr2/>
SELECT DISTINCT ?s ?na ?fn ?annee ?pb ?gd ?bio
WHERE
{ { { SELECT DISTINCT ?s ?bio
WHERE
{ { ?s egr:biographicalInformation ?bio
FILTER ( CONTAINS(?bio, "mathém") || CONTAINS(?bio, "Mathém") )
}
UNION
{ ?s egr:biographicalInformation ?bio
FILTER ( CONTAINS(?bio, "astrono") || CONTAINS(?bio, "Astrono") )
}
}
}
?s egr:dateOfBirth ?bd
OPTIONAL
{ ?s <http://xmlns.com/foaf/0.1/name> ?na }
OPTIONAL
{ ?s <http://xmlns.com/foaf/0.1/familyName> ?fn }
OPTIONAL
{ ?s egr:placeOfBirth ?pb }
OPTIONAL
{ ?s <http://xmlns.com/foaf/0.1/gender> ?gd }
}
BIND(STRBEFORE(STRAFTER(STR(?bd), "http://data.bnf.fr/date/"), "/") AS ?annee)
FILTER ( ( ?annee > "1100" ) && ( ?annee < "1761" ) )
}
ORDER BY ?annee

Avec cette requête nous créons d'abord une population d'acteurs dont les notices biographiques de la BNF parlent de mathématiques ou d'astronomie, puis nous ajoutons quelques propriétés de manière optionnelle, c'est-à-dire qu'elles peuvent être renseignées ou pas, concernant le nom, l'année et le lieu de naissance.

Grâce au filtre sur les années de naissance, la période étudiée va du début du 12e siècle jusqu'à la deuxième moitié du 18e siècle.

D'ailleurs, sous le champs 'Requête' de l'éditeur SPARQL de data.bnf.fr vous trouverez des exemples d'autres requêtes qu'on peut effectuer.

Création et nettoyage du fichier à encoder

Revenez à la page de la 'Requête' et changer le 'Format du résultat' à CSV (comma-separated values)

Re-exécutez la requête. En fonction du navigateur utilisé et de son paramétrage, deux cas de figure sont possibles:

le texte séparé par virgule s'affiche:

dans ce cas, sélectionnez toute la page du résultat et copiez-la copier dans le presse-papier

ouvrez une nouvelle feuille de calcul dans le logiciel de tableur (Calc pour LibreOffice/OpenOffice; Excel dans la suite Microsoft)

collez avec collage spécial dans la première cellule de la feuille de calcul: A1 et choisir 'Texte non formaté'.

le texte du document au format CSV est proposé en téléchargement

dans ce cas, enregistrez-le sur votre disque dur, dans un dossier du TD histoire numérique consacré à l'exercice 2, en ajoutant au nom le suffixe '.csv'. Par exemple, appelez le fichier 'liste_notices_BNF.csv'.

démarrez le logiciel Calc de la suite LibreOffice (ou eXcel de la suite Microsoft Office) et ouvrez le fichier que vous venez d'enregistrer

Dans la boîte de dialogue qui s'ouvre au moment de coller le contenu du presse-parier, ou lors de l'ouverture du fichier enregistré:

mettre le jeu de caractères à UTF-8

mettre 'Virgule' comme séparateur

pour la colonne 'annee', mettre le 'Type de colonne' à 'Texte'

importer et vérifier le résultat

Sauvegarder le nouveau fichier avec le nom 'liste_notices_BNF' au format .ods ou .xls

Ajouter une colonne avant la colonne 'annee' qu'on va appeler 'nom'

Dans la première cellule qui contient les données insérer la formule:

=SI(ESTVIDE(B2);C2;B2)

Copier-coller cette formule dans toutes les cellules de la colonne sauf la première ligne:

sélectionner toutes les cellules de la colonne = sélectionner la première, appuyer sur la touche majuscule, sélectionner la dernière cellule

exécuter la commande: 'Collage spécial' et cocher uniquement la case 'formule'

Ajouter une colonne annee_mediane après la colonne année

Insérer dans toutes les cellules de cette colonne la formule

=SI(ESTERREUR(CHERCHE("-";E2)) ; E2; CONCATENER(GAUCHE(E2;2);"51"))

Ajouter une colonne 'naissance' avant la colonne 'gd' (gender) et mettre cette formule dans toutes les cellules:

=SI(ESTVIDE(G2);F2;CONCATENER(G2;", ";F2))

Ajouter une colonne 'notice' après la colonne 'bio' et mettre dans toutes les cellules cette formule:

=CONCATENER(D2;" (";H2;") ";J2;" [";A2;"]")

Trier les données d'après les colonnes 'annee_mediane' et 'nom'

On obtient ce résultat: liste_notices_BNF