SlideShare une entreprise Scribd logo
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
• 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
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
 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
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
 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
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
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
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

Contenu connexe

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

Découverte du SPARQL endpoint de HAL
Découverte du SPARQL endpoint de HALDécouverte du SPARQL endpoint de HAL
Découverte du SPARQL endpoint de HAL
Gautier Poupeau
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant Form
Vladyslav Riabchenko
 
Sudoc, Calames, theses.fr et le Web de données
Sudoc, Calames, theses.fr et le Web de donnéesSudoc, Calames, theses.fr et le Web de données
Sudoc, Calames, theses.fr et le Web de données
Y. Nicolas
 
TalkRendonsDDDauxDevs_AlpesCraft.pdf
TalkRendonsDDDauxDevs_AlpesCraft.pdfTalkRendonsDDDauxDevs_AlpesCraft.pdf
TalkRendonsDDDauxDevs_AlpesCraft.pdf
Arnaud Thiéfaine
 
Premier pas de web scrapping avec R
Premier pas de  web scrapping avec RPremier pas de  web scrapping avec R
Premier pas de web scrapping avec R
Cdiscount
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSA
Frédéric Sagez
 
Livres, périodiques, thèses et manuscrits en réseau
Livres, périodiques, thèses et manuscrits en réseauLivres, périodiques, thèses et manuscrits en réseau
Livres, périodiques, thèses et manuscrits en réseau
Y. Nicolas
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
David Pilato
 
le web sémantique : un web de métadonnées
le web sémantique : un web de métadonnéesle web sémantique : un web de métadonnées
le web sémantique : un web de métadonnées
ABES
 

Similaire à CIDOC-CRM + SPARQL Tutorial sur les données Doremus (10)

Découverte du SPARQL endpoint de HAL
Découverte du SPARQL endpoint de HALDécouverte du SPARQL endpoint de HAL
Découverte du SPARQL endpoint de HAL
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant Form
 
Sudoc, Calames, theses.fr et le Web de données
Sudoc, Calames, theses.fr et le Web de donnéesSudoc, Calames, theses.fr et le Web de données
Sudoc, Calames, theses.fr et le Web de données
 
C2i d4 scd-amu 2016
C2i d4 scd-amu 2016C2i d4 scd-amu 2016
C2i d4 scd-amu 2016
 
TalkRendonsDDDauxDevs_AlpesCraft.pdf
TalkRendonsDDDauxDevs_AlpesCraft.pdfTalkRendonsDDDauxDevs_AlpesCraft.pdf
TalkRendonsDDDauxDevs_AlpesCraft.pdf
 
Premier pas de web scrapping avec R
Premier pas de  web scrapping avec RPremier pas de  web scrapping avec R
Premier pas de web scrapping avec R
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSA
 
Livres, périodiques, thèses et manuscrits en réseau
Livres, périodiques, thèses et manuscrits en réseauLivres, périodiques, thèses et manuscrits en réseau
Livres, périodiques, thèses et manuscrits en réseau
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
le web sémantique : un web de métadonnées
le web sémantique : un web de métadonnéesle web sémantique : un web de métadonnées
le web sémantique : un web de métadonnées
 

Plus de Thomas Francart

SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)
Thomas Francart
 
SPARQL queries on CIDOC-CRM data of BritishMuseum
SPARQL queries on CIDOC-CRM data of BritishMuseumSPARQL queries on CIDOC-CRM data of BritishMuseum
SPARQL queries on CIDOC-CRM data of BritishMuseum
Thomas Francart
 
JSON-LD
JSON-LDJSON-LD
Solr formation Sparna
Solr formation SparnaSolr formation Sparna
Solr formation Sparna
Thomas Francart
 
SKOS Play @ semweb.pro 2014
SKOS Play @ semweb.pro 2014SKOS Play @ semweb.pro 2014
SKOS Play @ semweb.pro 2014
Thomas Francart
 
Web of Data - Introduction (english)
Web of Data - Introduction (english)Web of Data - Introduction (english)
Web of Data - Introduction (english)
Thomas Francart
 
Partager et réutiliser des données sur le web
Partager et réutiliser des données sur le webPartager et réutiliser des données sur le web
Partager et réutiliser des données sur le web
Thomas Francart
 
RDFS : une introduction
RDFS : une introductionRDFS : une introduction
RDFS : une introduction
Thomas Francart
 
Skos play
Skos playSkos play
Skos play
Thomas Francart
 

Plus de Thomas Francart (9)

SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)
 
SPARQL queries on CIDOC-CRM data of BritishMuseum
SPARQL queries on CIDOC-CRM data of BritishMuseumSPARQL queries on CIDOC-CRM data of BritishMuseum
SPARQL queries on CIDOC-CRM data of BritishMuseum
 
JSON-LD
JSON-LDJSON-LD
JSON-LD
 
Solr formation Sparna
Solr formation SparnaSolr formation Sparna
Solr formation Sparna
 
SKOS Play @ semweb.pro 2014
SKOS Play @ semweb.pro 2014SKOS Play @ semweb.pro 2014
SKOS Play @ semweb.pro 2014
 
Web of Data - Introduction (english)
Web of Data - Introduction (english)Web of Data - Introduction (english)
Web of Data - Introduction (english)
 
Partager et réutiliser des données sur le web
Partager et réutiliser des données sur le webPartager et réutiliser des données sur le web
Partager et réutiliser des données sur le web
 
RDFS : une introduction
RDFS : une introductionRDFS : une introduction
RDFS : une introduction
 
Skos play
Skos playSkos play
Skos play
 

Dernier

Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 

Dernier (6)

Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 

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

  • 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. • 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. 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.  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. 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.  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. 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. 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. 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