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.

Découverte du SPARQL endpoint de HAL

349 views

Published on

Tutoriel sous forme d'exercices pour découvrir le sparql endpoint mis à disposition par la plateforme HAL, archive ouverte d'article scientifiques de toutes disciplines des institutions de recherches françaises. Attention ! Ce tutoriel a pour pré-requis la connaissance du langage de requêtes SPARQL.

Published in: Technology
  • Be the first to comment

Découverte du SPARQL endpoint de HAL

  1. 1. Découverte du SPARQL Endpoint de HAL Gautier Poupeau , gautier.poupeau@gmail.com @lespetitescases http://www.lespetitescases.net
  2. 2. Web sémantique dans HAL • Un sparql endpoint https://data.archives-ouvertes.fr/sparql dont la documentation est disponible à https://data.archives-ouvertes.fr/doc/schema • Des dumps calculés une fois par mois https://data.archives-ouvertes.fr/backup • Pas de négociation de contenu  https://data.archives-ouvertes.fr/
  3. 3. Le modèle des documents (1) Exemple : https://data.archives-ouvertes.fr/document/hal-00000001v2
  4. 4. Le modèle des documents (2) Document versionné document/ hal-00000001v2 Document document/ hal-00000001 Fichier PDF hal- 00000001v2/file/mq- anglais.pdf dcterms:hasVersion ore:aggregates Type de document Fabio URI rdf:type Auteur Nœud blanc dcterms:creator Forme de l’auteur author/63529 hal:person Stringfoaf:name
  5. 5. Astuce 1 trouver l’URI correspondant à un préfixe Vous saisissez le préfixe Le système renvoie une ou plusieurs URIs correspondantes
  6. 6. Astuce 2 Liste des préfixes intéressants pour HAL PREFIX doctype: <https://data.archives-ouvertes.fr/doctype/> PREFIX doc: <https://data.archives-ouvertes.fr/document/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX fabio: <http://purl.org/spar/fabio/> PREFIX ore: <http://www.openarchives.org/ore/terms/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX hal: <http://data.archives-ouvertes.fr/schema/> PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX org: <http://www.w3.org/ns/org#> PREFIX cerif: <http://www.eurocris.org/ontologies/cerif/1.3/>
  7. 7. Rechercher les métadonnées associées à toutes les versions d’un document URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381 Exercice 1 select ?version ?p ?object where { doc:inria-00362381 dcterms:hasVersion ?version. ?version ?p ?object. }
  8. 8. Rechercher l’URI, le titre, le lien vers le PDF et les auteurs des différentes version du document URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381 Exercice 2 select ?version ?title ?pdf ?person ?name where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:title ?title; dcterms:creator ?creator; ore:aggregates ?pdf. ?creator hal:person ?person. ?person foaf:name ?name }
  9. 9. Astuce 3 concaténer les réponses d’une variable select ?version ?title ?pdf GROUP_CONCAT(?name,',') AS ?authors where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:title ?title; dcterms:creator ?creator; ore:aggregates ?pdf. ?creator hal:person ?person. ?person foaf:name ?name } GROUP BY ?version ?title ?pdf On regroupe les résultats par tous les autres éléments de la requête On utilise le mot-clé GROUP_CONCAT(?variable,séparateur)
  10. 10. Type de dépôt et domaine Exemple : https://data.archives-ouvertes.fr/doctype/Article
  11. 11. Rechercher l’URI et l’étiquette préférentielle des types de documents correspondants aux différentes version d’un document URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381 Exercice 3 select ?version ?type ?label where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:type ?type. ?type skos:prefLabel ?label. }
  12. 12. Astuce 4 Afficher uniquement la chaîne en français select ?version ?type ?label where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:type ?type. ?type skos:prefLabel ?label. FILTER (lang(?label)='fr') } Utilisation du mot-clé « FILTER »
  13. 13. Afficher l’étiquette préférentielle de tous les types de documents distincts avec la forme « Fabien Gandon » pour auteur URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 4 select DISTINCT ?label where { ?document dcterms:hasVersion ?version. ?version dcterms:creator ?creator; dcterms:type ?type. ?creator hal:person <https://data.archives-ouvertes.fr/author/827904>. ?type skos:prefLabel ?label. FILTER (lang(?label)='fr') }
  14. 14. Astuce 5 Utiliser les opérateurs d’agrégation count, sum, avg, min, max select count(distinct ?person) AS ?nbPerson where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:creator ?creator. ?creator hal:person ?person } Rechercher le nombre d’auteurs d’un document toutes versions confondues URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381
  15. 15. Astuce 5 Utiliser les opérateurs d’agrégation count, sum, avg, min, max select ?version, count(distinct ?person) AS ?nbperson where { doc:inria-00362381 dcterms:hasVersion ?version. ?version dcterms:creator ?creator. ?creator hal:person ?person } GROUP BY ?version Rechercher le nombre d’auteurs par version d’un document URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381
  16. 16. Afficher le nombre de documents pour chaque types de documents distincts avec la forme « Fabien Gandon » pour auteur URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 5 select ?type ?label count(distinct ?document) where { ?document dcterms:hasVersion ?version. ?version dcterms:creator ?creator; dcterms:type ?type. ?creator hal:person <https://data.archives-ouvertes.fr/author/827904>. ?type skos:prefLabel ?label. FILTER (lang(?label)='fr') } GROUP BY ?type ?label
  17. 17. Astuce 6 Ordonner un résultat select ?type ?label count(distinct ?document) AS ?nbdoc where { ?document dcterms:hasVersion ?version. ?version dcterms:creator ?creator; dcterms:type ?type. ?creator hal:person <https://data.archives-ouvertes.fr/author/827904>. ?type skos:prefLabel ?label. FILTER (lang(?label)='fr') } GROUP BY ?type ?label ORDER BY DESC(?nbdoc) Afficher de manière décroissante le nombre de documents pour chaque types de documents distincts avec la forme « Fabien Gandon » pour auteur URI utile Document : https://data.archives-ouvertes.fr/document/inria-00362381
  18. 18. Astuce 7 Manipuler les dates Afficher le nombre de document associé à la forme « Fabrien Gandon » par an URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 select year(?date) count(distinct ?document) where { ?document dcterms:hasVersion ?version. ?version dcterms:creator ?creator; dcterms:issued ?date. ?creator hal:person <https://data.archives-ouvertes.fr/author/827904>. } GROUP BY year(?date) ORDER BY year(?date)
  19. 19. Afficher le nombre de documents pour chaque types de documents et chaque année avec la forme « Fabien Gandon » pour auteur et ordonnée par année URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 7 select year(?date) ?label count(distinct ?document) where { ?document dcterms:hasVersion ?version. ?version dcterms:creator ?creator; dcterms:issued ?date; dcterms:type ?type. ?creator hal:person <https://data.archives-ouvertes.fr/author/827904>. ?type skos:prefLabel ?label. FILTER (lang(?label)='fr') } GROUP BY year(?date) ?label ORDER BY year(?date)
  20. 20. Modèle pour la forme d’un auteur Exemple : https://data.archives-ouvertes.fr/author/827904
  21. 21. Afficher toutes les métadonnées associées à la forme « Fabien Gandon » URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 8 select ?p ?o where { <https://data.archives-ouvertes.fr/author/827904> ?p ?o }
  22. 22. Afficher les URIs de toutes les formes associées à la forme « Fabien Gandon » via l’IdHAL URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 9 select ?forme where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?o. ?forme ore:isAggregatedBy ?o. }
  23. 23. Afficher le nombre de documents associés à chaque forme associés à l’IdHAL relié à la forme « Fabien Gandon » URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 10 select ?forme count(DISTINCT ?document) where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?o. ?forme ore:isAggregatedBy ?o. ?creator hal:person ?forme. ?version dcterms:creator ?creator. ?document dcterms:hasVersion ?version } GROUP BY ?forme
  24. 24. Afficher le nombre de documents associés à chaque forme associés à l’IdHAL relié à la forme Fabien Gandon par an URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 11 select year(?date) AS ?year count(DISTINCT ?document) AS ?nbdoc where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?o. ?forme ore:isAggregatedBy ?o. ?creator hal:person ?forme. ?version dcterms:creator ?creator; dcterms:issued ?date. ?document dcterms:hasVersion ?version } GROUP BY year(?date)
  25. 25. Astuce 8 Requête et sous requête Afficher la moyenne des documents par an associés à toutes les formes liées à « Fabien Gandon » URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 SELECT avg(?nbdoc) WHERE { select year(?date) AS ?year count(DISTINCT ?document) AS ?nbdoc where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?o. ?forme ore:isAggregatedBy ?o. ?creator hal:person ?forme. ?version dcterms:creator ?creator; dcterms:issued ?date. ?document dcterms:hasVersion ?version } GROUP BY year(?date) }
  26. 26. Afficher tous les identifiants externes liées à Fabien Gandon URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 Exercice 12 select DISTINCT ?idhal ?identifiant where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?idhal. ?forme ore:isAggregatedBy ?idhal. ?forme owl:sameAs ?identifiant }
  27. 27. Astuce 9 Faire une recherche dans une chaîne de caractères Afficher les identifiants ORCID distincts liés à toutes les formes liées à « Fabien Gandon » URI utile Forme auteur : https://data.archives-ouvertes.fr/author/827904 select DISTINCT ?idhal ?orcid where { <https://data.archives-ouvertes.fr/author/827904> ore:isAggregatedBy ?idhal. ?forme ore:isAggregatedBy ?idhal. ?forme owl:sameAs ?orcid. FILTER regex(str(?orcid), 'orcid.org') }
  28. 28. Afficher les identifiants ORCID de tous les membres d’INRIA et pour chaque ORCID, concaténer les différentes URIs des formes associées URI utile INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 13 select ?orcid ?name GROUP_CONCAT(str(?forme),',') where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>; foaf:name ?name; owl:sameAs ?orcid. FILTER regex(str(?orcid),'orcid.org') } GROUP BY ?orcid ?name ORDER BY ?name
  29. 29. Afficher tous les membres d’INRIA et pour chaque membre, éventuellement l’identifiant ORCID et l’identifiant idHal URI utile INRIA : https://data.archives-ouvertes.fr/structure/300009 Astuce 10 OPTIONAL select DISTINCT ?name ?orcid ?idHal where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>; foaf:name ?name. OPTIONAL {?forme owl:sameAs ?orcid. FILTER regex(?orcid,'orcid.org')} OPTIONAL {?forme ore:isAggregatedBy ?idHal} } ORDER BY ?name
  30. 30. Astuce 11 La négation Afficher les membres qui ont un identifiant idHAL mais pas d’ORCID URI utile INRIA : https://data.archives-ouvertes.fr/structure/300009 select DISTINCT ?idHal ?name where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>; foaf:name ?name; ore:isAggregatedBy ?idHal FILTER NOT EXISTS {?forme owl:sameAs ?orcid. FILTER regex(?orcid,'orcid.org')} } ORDER BY ?name
  31. 31. Afficher tous les membres d’INRIA qui n’ont pas d’identifiant idHAL et concaténés par la forme URI utile INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 14 select ?name, GROUP_CONCAT(str(?forme), '|') where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>; foaf:name ?name. FILTER NOT EXISTS {?forme ore:isAggregatedBy ?idHal} } GROUP BY ?name ORDER BY ?name
  32. 32. Afficher tous les domaines des membres d’INRIA et pour chaque domaine le nombre de documents associés ordonné de manière décroissante URI utile INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 15 select ?topic ?prefLabel count(DISTINCT ?document) AS ?nbdoc where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>. ?version hal:topic ?topic; dcterms:creator ?creator. ?creator hal:person ?forme. ?topic skos:prefLabel ?prefLabel. ?document dcterms:hasVersion ?version. FILTER (lang(?prefLabel)='fr') } GROUP BY ?topic ?prefLabel ORDER BY DESC(?nbdoc)
  33. 33. Afficher tous les co-auteurs de Fabien Gandon et le nombre d’articles pour chacun d’entre eux URI utile idHal de Fabien Gandon : https://data.archives-ouvertes.fr/structure/300009 Exercice 16 select ?name count(DISTINCT ?document) AS ?nbdoc where { ?forme ore:isAggregatedBy <https://data.archives-ouvertes.fr/author/fabien- gandon>. ?version hal:topic ?topic; dcterms:creator ?creator. ?creator hal:person ?forme. ?document dcterms:hasVersion ?version. ?version dcterms:creator ?autresCreator. ?autresCreator hal:person ?autresformes. ?autresformes foaf:name ?name. FILTER (?name !='Fabien Gandon') } GROUP BY ?name ORDER BY DESC(?nbdoc)
  34. 34. Astuce 12 Limiter les résultats de comptage Afficher tous les co-auteurs de Fabien Gandon et le nombre d’articles pour chacun d’entre eux et ayant plus de 1 document en commun URI utile idHal de Fabien Gandon : https://data.archives-ouvertes.fr/author/fabien-gandon select ?name count(DISTINCT ?document) AS ?nbdoc where { ?forme ore:isAggregatedBy <https://data.archives-ouvertes.fr/author/fabien- gandon>. ?version hal:topic ?topic; dcterms:creator ?creator. ?creator hal:person ?forme. ?document dcterms:hasVersion ?version. ?version dcterms:creator ?autresCreator. ?autresCreator hal:person ?autresformes. ?autresformes foaf:name ?name. FILTER (?name !='Fabien Gandon') } GROUP BY ?name HAVING (count(DISTINCT ?document) > 1) ORDER BY DESC(?nbdoc)
  35. 35. Modèle pour les personnes IdHAL C’est beau mais malheureusement, ce n’est pas dans le triple store 
  36. 36. Modèle pour les structures Exemple : https://data.archives-ouvertes.fr/structure/300009
  37. 37. Afficher toutes les organisations et leur terme préférentiel URI utile Classe Organisation : http://www.w3.org/ns/org#Organization INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 17 select ?structure ?prefLabel where { ?structure a org:Organization; skos:prefLabel ?prefLabel. }
  38. 38. Modèle pour les revues https://data.archives-ouvertes.fr/revue/109707
  39. 39. Modèles pour les projets Exemple : https://data.archives-ouvertes.fr/anrProject/1001 https://data.archives-ouvertes.fr/europeanProject/129494
  40. 40. Afficher toutes les projets ANR dont sont issues les documents écrits par des membres de l’INRIA URI utile Classe projet : http://www.eurocris.org/ontologies/cerif/1.3/ INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 18 select DISTINCT ?projet ?title ?acronym ?startDate where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>. ?version dcterms:source ?projet; dcterms:creator ?creator. ?creator hal:person ?forme. ?projet a cerif:Project; cerif:title ?title; cerif:startDate ?startDate. OPTIONAL {?projet cerif:acronym ?acronym} FILTER regex(str(?projet),'anrProject') } ORDER BY DESC(?startDate)
  41. 41. Afficher toutes les projets ANR dont sont issues les documents écrits par des membres de l’INRIA et pour chacun le nombre de documents associés URI utile Classe projet : http://www.eurocris.org/ontologies/cerif/1.3/ INRIA : https://data.archives-ouvertes.fr/structure/300009 Exercice 19 select ?projet ?title ?acronym ?startDate count(DISTINCT ?document) AS ?nbdoc where { ?forme foaf:member <https://data.archives-ouvertes.fr/structure/300009>. ?version dcterms:source ?projet; dcterms:creator ?creator. ?creator hal:person ?forme. ?projet a cerif:Project; cerif:title ?title; cerif:startDate ?startDate. OPTIONAL {?projet cerif:acronym ?acronym} FILTER regex(str(?projet),'anrProject') ?document dcterms:hasVersion ?version. } GROUP BY ?projet ?title ?acronym ?startDate ORDER BY DESC(?nbdoc)

×