Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CIDOC-CRM + SPARQL Tutorial sur les données Doremus

203 views

Published on

Introduction aux requêtes SPARQL sur les données du projet Doremus (http://data.doremus.org) qui modélise et diffuse les données de création d'oeuvres musicales sur la base du modèle CIDOC-CRM / FRBRoo.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

CIDOC-CRM + SPARQL Tutorial sur les données Doremus

  1. 1. Tutorial CIDOC-CRM SPARQL sur http://data.doremus.org/sparql Auteur : Thomas Francart – thomas.francart@sparna.fr Date de création : 04/06/2018 Date de dernière modification : 21/06/2018 Version : 2 License : CC-by-nc-sa https://creativecommons.org/licenses/by-nc-sa/4.0/ Attribution- NonCommercial-ShareAlike 4.0 International Table des matières Objectifs....................................................................................1 Documentation...........................................................................1 1.A la recherche de Gabriel Fauré................................................2 2.Recherchez les activités de Production de Gabriel Fauré............3 3.Recherchez les œuvres composées par Fauré............................4 4.Les dates des œuvres..............................................................5 5.Et maintenant… une timeline !..................................................5 6.Pour aller plus loin …...............................................................8 Objectifs Ce tutorial permet d’appréhender les données de Doremus au travers du service SPARQL http://data.doremus.org/sparql. Il a pour objectif d’expliquer : o Comment interagir avec le endpoint et les pages de notices pour retrouver l’information cherchée ; o Comment le modèle CIDOC-CRM et FRBRoo est utilisé pour la modélisation des données, pour les compositeurs, les productions d’œuvre, etc.; o Comment écrire les requêtes SPARQL correspondantes ; A la fin de ce tutorial vous devriez être capable de réutiliser les données de Doremus pour générer une timeline sur un service en ligne. Cela démontre le potentiel de réutilisation des données ouvertes pour des utilisations innovantes. Documentation 1
  2. 2. • Naviguez à http://data.doremus.org et cliquez sur « Ontology ». Consultez les diagrammes de documentation du modèle de données, en particulier le premier sur les compositions d’œuvre. • Depuis http://data.doremus.org regardez également les « Example queries » pour voir quelques requêtes SPARQL d’exemple sur les données. Notez également les préfixes reconnus automatiquement. 1. A la recherche de Gabriel Fauré Sur le web :  Recherchez « Gabriel Fauré » sur le web et consultez sa fiche Wikipedia ; Sur Doremus :  Depuis l’interface Overture de Doremus à http://overture.doremus.org/ , trouvez Gabriel Fauré : http://overture.doremus.org/artist/c2e25a07-7a54-335a-9a9e- e20a47713a7d o Consultez sa liste d’œuvre  Depuis le navigateur de données Doremus « Facet Browser » à http://data.doremus.org/fct/, cherchez « Gabriel Fauré » ; ajoutez un filtre de type sur « E21 Person » pour ne garder que les personnes ; o Consultez la notice de Gabriel Fauré Sur le service SPARQL :  Allez sur le endpoint http://data.doremus.org/sparql  Ecrivez une query qui permet de lister les URIs de tous les types d’objets utilisés, pour prendre connaissance du modèle ; select DISTINCT ?type where { ?x a ?type }  Recherchez n’importe quoi avec une valeur de propriété "Gabriel Fauré"; SELECT DISTINCT ?s ?p WHERE { ?s ?p "Gabriel Fauré" . }  Cliquez sur l’URI pour consulter la notice de cet objet (http://data.doremus.org/artist/c2e25a07-7a54-335a-9a9e-e20a47713a7d) 2
  3. 3. Enrichissez la requête pour ne garder que les personnes, à partir de l’URI de « E21 Person » trouvées dans la requête qui liste tous les types ; SELECT ?s WHERE { ?s ?p "Gabriel Fauré" . ?s a ecrm:E21_Person . }  Passez votre souris sur “is identified by” pour voir son URI ;  Lisez la documentation de la propriété P131 du CIDOC-CRM (http://www.cidoc- crm.org/Property/p131-is-identified-by/version-6.2) pour comprendre sa sémantique ; 2. Recherchez les activités de Production de Gabriel Fauré  Dans la page de notice de Gabriel Fauré, cherchez les liens “ P14 carried out by" ; o Passez votre souris sur “P14 carried out by” pour récupérer son URI ; o Recherchez et lisez sa définition dans la spec du CIDOC-CRM (http://www.cidoc-crm.org/Property/p14-carried-out-by/version-6.2.1) ; o Regardez les diagrammes de documentation de Doremus et repérez ce lien ; o Notez que l’activité de Production qui relie le créateur de l’œuvre se décompose en plusieurs activités ; 3
  4. 4.  Bonus : Pourquoi cette décomposition ?  Dessinez le graphe ;  Enrichissez la query pour sélectionner les URI des activités de Production de Fauré ; SELECT ?production WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel a ecrm:E21_Person . ?production ecrm:P14_carried_out_by ?gabriel . } 3. Recherchez les œuvres composées par Fauré  Pouvez-vous trouver, à partir de la doc et en naviguant dans les notices des évènements, les liens permettant de passer des activités de production de Fauré aux œuvres produites ?  Lisez les documentations des propriétés correspondantes ;  Dessinez le graphe ;  Adaptez la query pour sélectionner les URIs des œuvres composées par Fauré : SELECT DISTINCT ?work WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel a ecrm:E21_Person . ?production ecrm:P14_carried_out_by ?gabriel . ?superProduction ecrm:P9_consists_of ?production . ?superProduction efrbroo:R19_created_a_realisation_of ?work . }  A partir de la notice d’une URI d’œuvre, pouvez-vous trouver la façon de sélectionner son titre ?  Adaptez la query pour sélectionner le titre de toutes les œuvres de Fauré ; SELECT DISTINCT ?work ?titre WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel a ecrm:E21_Person . ?production ecrm:P14_carried_out_by ?gabriel . ?superProduction ecrm:P9_consists_of ?production . ?superProduction efrbroo:R19_created_a_realisation_of ?work . ?work efrbroo:R9_is_realised_in ?expression . ?expression rdfs:label ?titre . } o BONUS 1 : sauriez-vous simplifier la query en utilisant des « Property Path » SPARQL ? 4
  5. 5. SELECT DISTINCT ?titre WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel ^ecrm:P14_carried_out_by/^ecrm:P9_consists_of/efrbroo:R19_created_a_realisatio n_of/efrbroo:R9_is_realised_in/rdfs:label ?titre } o BONUS 2 : sauriez-vous compter le nombre d’œuvres composées ? SELECT (COUNT(DISTINCT ?work) AS ?count) WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel ^ecrm:P14_carried_out_by/^ecrm:P9_consists_of/efrbroo:R19_created_a_realisatio n_of ?work } 4. Les dates des œuvres  Déterminez comment trouver les dates des œuvres ? en arrivant jusqu’à une valeur de date précise ;  Dessinez le graphe ;  Enrichissez la query pour sélectionner la date de création de l’œuvre, en triant les résultats par date SELECT DISTINCT ?titre ?date WHERE { ?gabriel ?p "Gabriel Fauré" . ?gabriel ^ecrm:P14_carried_out_by/^ecrm:P9_consists_of ?expressionCreation . ?expressionCreation ecrm:P4_has_time-span ?timespan . ?expressionCreation efrbroo:R19_created_a_realisation_of/efrbroo:R9_is_realised_in/rdfs:label ?titre . ?timespan time:hasBeginning ?time . ?time time:inXSDDate ?date . } ORDER BY ?date 5. Et maintenant… une timeline ! On va chercher à faire une timeline des compositeurs, avec leur photo.  Allez à https://timeline.knightlab.com. Ce service permet de générer une timeline à partir d’un tableau avec des colonnes prédéfinies ;  Dupliquez le template de Spreadsheet Google Doc ;  Regardez les entêtes des colonnes attendues dans le template ; 5
  6. 6.  Ecrivez une requête qui sélectionne le nom de toutes les personnes étant liées à une activité de production ; SELECT DISTINCT ?nom WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?nom . ?something ecrm:P14_carried_out_by ?personne . }  Sélectionnez leur photo, sachant qu’elles peuvent ne pas avoir de photo ! SELECT DISTINCT ?nom ?photo WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?nom . OPTIONAL { ?personne foaf:depiction ?photo . } ?something ecrm:P14_carried_out_by ?personne . }  Ajoutez leur date de naissance et de décès ; on ne va garder que les personnes pour lesquelles ces dates sont connues ; SELECT DISTINCT ?nom ?dateNaissance ?dateDeces ?photo WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?nom . OPTIONAL { ?personne foaf:depiction ?photo . } ?something ecrm:P14_carried_out_by ?personne . ?personne schema:birthDate ?dateNaissance . ?personne schema:deathDate ?dateDeces . } ORDER BY ?nom  Que constatez-vous ? gardons seulement une seule date de naissance et de décès pour chaque personne, en s’assurant qu’elle a bien année-mois-jour, et pas seulement année ; SELECT DISTINCT ?nom (SAMPLE(?dateNaissance) AS ?uneDateNaissance) (SAMPLE(?dateDeces) AS ?uneDateDeces) ?photo WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?nom . OPTIONAL { ?personne foaf:depiction ?photo . } ?something ecrm:P14_carried_out_by ?personne . ?personne schema:birthDate ?dateNaissance . ?personne schema:deathDate ?dateDeces . 6
  7. 7. FILTER(datatype(?dateNaissance) = xsd:date && datatype(?dateDeces) = xsd:date) } GROUP BY ?nom ?photo ORDER BY ?uneDateNaissance  Sélectionons en plus une petite description, optionnelle SELECT DISTINCT ?nom (SAMPLE(?dateNaissance) AS ?uneDateNaissance) (SAMPLE(?dateDeces) AS ?uneDateDeces) ?photo ?note WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?nom . OPTIONAL { ?personne foaf:depiction ?photo . } ?something ecrm:P14_carried_out_by ?personne . ?personne schema:birthDate ?dateNaissance . ?personne schema:deathDate ?dateDeces . FILTER(datatype(?dateNaissance) = xsd:date && datatype(?dateDeces) = xsd:date) OPTIONAL { ?personne ecrm:P3_has_note ?note . } } GROUP BY ?nom ?photo ?note ORDER BY ?uneDateNaissance  Maintenant adaptez votre query pour qu’elle retourne exactement les entêtes du template de la timeline ; o Utilisez les fonctions SPARQL YEAR( ?x), MONTH( ?x) et DAY( ?x) pour extraire les années/mois/jour d’une valeur de date ; o Utilisez l’opération BIND(…. AS ?variable) pour créer une autre variable à partir du résultat de ces fonctions ; o Il faut donner une valeur à toutes les variables qu’on n’utilise pas, en leur assignant des chaines de caractère vide avec des clauses « BIND("" AS ? type » Voici à quoi doit ressembler la clause SELECT : SELECT ?year ?month ?day ?time ?endYear ?endMonth ?endDay ?endTime ?displayDate ?headline ?text ?media ?mediaCredit ?mediaCaption ? mediaThumbnail ?type ?group ?background Voici la query complète SELECT DISTINCT ?year ?month ?day ?time ?endYear ?endMonth ?endDay ? endTime ?displayDate ?headline ?text ?media ?mediaCredit ?mediaCaption ? mediaThumbnail ?type ?group ?background 7
  8. 8. WHERE { ?personne a ecrm:E21_Person . ?personne rdfs:label ?headline . OPTIONAL { ?personne foaf:depiction ?media . } ?something ecrm:P14_carried_out_by ?personne . OPTIONAL { ?something mus:U31_had_function/skos:prefLabel ?groupLiteral . FILTER(lang(?groupLiteral) = "fr") BIND(STR(?groupLiteral) AS ?group) } ?personne schema:birthDate ?dateNaissance . ?personne schema:deathDate ?dateDeces . FILTER(datatype(?dateNaissance) = xsd:date && datatype(?dateDeces) = xsd:date) OPTIONAL { ?personne ecrm:P3_has_note ?text . } BIND(YEAR(?dateNaissance) AS ?year) BIND(MONTH(?dateNaissance) AS ?month) BIND(DAY(?dateNaissance) AS ?day) BIND(YEAR(?dateDeces) AS ?endYear) BIND(MONTH(?dateDeces) AS ?endMonth) BIND(DAY(?dateDeces) AS ?endDay) BIND(CONCAT(STR(?dateNaissance), " / ", STR(?dateDeces)) AS ?displayDate) BIND("" AS ?mediaCredit) BIND("" AS ?time) BIND("" AS ?endTime) BIND("" AS ?mediaCaption) BIND("" AS ?mediaThumbnail) BIND("" AS ?type) BIND("" AS ?background) } ORDER BY ?displayDate  Téléchargez le résultat en CSV, puis ouvrez-le dans Excel ou Open Office  Faites un copier-coller de tout le contenu du fichier, sauf la première ligne d’entête, dans la Google Spreadsheet ; Copier-coller seulement les 50 ou 100 première lignes ;  Publiez le fichier comme indiqué dans la procédure, puis récupérez le lien d’affichage de la timeline. Voici un exemple de timeline générée : https://cdn.knightlab.com/libs/timeline3/latest/embed/index.html? source=1iWggsmwA7IMZKGRsccdeZZ-yO-- GY3BhrlJoZesGhyM&font=Default&lang=en&initial_zoom=2&height=650 8
  9. 9. 6. Pour aller plus loin … • Où trouver les genres des œuvres ? Pourrait-on arriver à compter le nombre d’oeuvres de Gabriel Fauré par genre ? • Pour quels instruments a composé Fauré ? 9

×