TP Linked Data

La première partie du TP consiste à répondre aux requêtes sur la base linked data appelée DBPedia. La seconde partie consiste à imaginer une (1) requête originale sur l’une des bases listées. Seule cette seconde partie devra faire l’objet de votre compte-rendu.

Voici une référence sur le langage SPARQL. Sinon : SPARQL By Example: The Cheat Sheet.


Travaux pratiques sur DBPedia

Répondez aux 14 requêtes proposées ci-dessous dans le client Yasgui.

Quelques URIs utiles

foaf:Person Classe Classe des personnes
dbo:Country Classe Classe des pays
foaf:name Propriété Nom d’une personne (entre autre)
dbo:birthDate Propriété Date de naissance d’une personne
dbo:birthPlace Propriété Lieu de naissance d’une personne
dbo:deathDate Propriété Date de décès d’une personne
dbo:deathPlace Propriété Lieu de décès d’une personne
dbo:city Propriété Ville
dbo:country Propriété Pays auquel un lieu appartient
dbo:mayor Propriété Maire d’une ville
dbr:Lyon Instance La ville de Lyon
dbr:France Instance La France

Quelques requêtes à programmer

  1. Afficher les URLs des lyonnais (i.e. personnes nées à Lyon). La réponse à cette requête est présentée ci-dessous.
  2. Afficher les URLs et les noms (foaf:name) des lyonnais (i.e. personnes nées à Lyon), dans l’ordre alphabétique. Pourquoi certains lyonnais portent un nom vide ? (TIP : allez voir leur fiche). Il ne vous est pas demander de résoudre ce problème.
  3. Afficher les noms des lyonnais ne contenant pas de virgule (fonction contains).
  4. Afficher les noms (sans virgule) et dates de naissance des lyonnais.
  5. Afficher les noms et dates de naissance des lyonnais nés après 1900 ("1900"^^xsd:gYear).
  6. Afficher les noms et dates de naissance des lyonnais nés après 1900 avec, le cas échéant, leur date de décès.
  7. Afficher les noms de tous les lyonnais morts à Lyon.
  8. Afficher les noms de tous les lyonnais morts hors de France.
  9. Afficher toutes les villes françaises dont le maire est natif.
  10. Afficher tous les maires français (i.e. d’une ville de France) nés hors de France.
  11. Afficher tous les maires nés hors du pays où ils sont maires.
  12. Afficher le nombre de maires français nés hors de France.
  13. Afficher pour 10 villes françaises le nombre de natifs présents dans DBPedia.
  14. Afficher les 10 villes ayant le plus de natifs dans DBPedia, trier dans l’ordre décroissant du nombre de natifs.

Pour bien débuter, voici la réponse à la première requête. Vous pouvez copier-coller ce code SparQL dans le client Yasgui, et observer le résultat.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT ?p 
WHERE {
  ?p         a      foaf:Person;
     dbo:birthPlace dbr:Lyon.
}

Vérifier que le fait de préciser que ?p est une personne ne change pas le résultat (la propriété dbo:birthPlace ne s’applique qu’au personne dans DBP<éedia, il n’est donc pas besoin de préciser qu’on cherche une personne!).


Requêtes originales sur une base linked data (Compte-rendu)

Remarque introductive Le compte-rendu portera uniquement sur cette partie du TP. C’est un travail personnel, et donc le rendu est individuel. Votre CR devra être déposé sur Moodle, en suivant les consignes énoncées ci-dessous.

Enoncé Choisissez une base de données linked data (autre que DBPedia) et inventez une (1) requête sur cette base. Des exemples de bases vous sont proposés ci-dessous.

Consignes pour le rendu

  • Rédigez un petit rapport (rapport de 1.5 pages) comprenant les détails suivants :

    • Préciser le SparQl endpoint permettant d’accéder à la base que vous interrogez. Par exemple, pour la base des prix Nobel, le endpoint est http://data.nobelprize.org/sparql ; pour DBpedia, le endpoint est http://dbpedia.org/sparql. D’autres exemples sont fournis dans les slides du cours et ci-dessous.
    • Le dessin RDF de la requête. Pour cela, vous pouvez utiliser diagram.net.
    • Le code SparQL de la requête (que je puisse rejouer votre requête).
    • Les 3 ou 4 premiers résultats de la requête (copie d’écran).
  • Si votre CR est au format pdf, merci de copier votre requête dans un fichier texte que je puisse la tester (les copier-coller de textes depuis un pdf est problématique !).

N’oubliez pas d’inscrire votre nom sur le rapport, et de déposer un seul fichier compressé nommé VotreNom_rendu1.zip (ou rar, ou tgz), sur l’espace Moodle de votre groupe de TP, en respectant la deadline (1 semaine après le TP). Le site de dépôt de la plateforme est programmé pour ne plus accepter de compte-rendu au-delà de cette limite.

Ce rapport sera évalué et comptera dans votre note finale. La note prendra en compte l’originalité de la requête, et la qualité du code bien sûr ! Triche : si je retrouve votre requête sur Internet ou sur un autre rendu, je vous attribue la note de 0/20.

Vous pouvez télécharger avec ce lien un exemple de rendu qui répond aux consignes (dans cet exemple, il y a 2 requêtes, mais je ne vous en demande qu’une seule!).

Bases LoD

Il existe des moteurs de recherche de base sur un thème choisi par l’utilisateur. Mais attention, beaucoup de bases proposées par ces moteurs sont inaccessibles (obsolètes). Il faut donc en essayer plusieurs avant d’en trouver une valide ! Voici une lien qui semble fiable : Mannheim linked data catalog.

Le plus simple est de travailler sur l’une des bases proposées dans la suite ; elles ont été testées récemment.

  1. Prix nobels.

La description de la structure des données se trouve en suivant ce lien.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?n1 ?n2 WHERE {
  ?p1 a         foaf:Person;
     foaf:name  ?n1.
} LIMIT 10
  1. War Sampo.

War sampo (la guerre de Sampo) s’est déroulée en Finlande durant la deuxième guerre mondiale. Les textes dans cette base de données sont en suédois et finnois !

PREFIX prisoners: <http://ldf.fi/schema/warsa/prisoners/>

SELECT ?causeDeath (count(?causeDeath) as ?count)
WHERE {
  ?p prisoners:cause_of_death ?causeDeath;
}
GROUP BY ?causeDeath
ORDER BY DESC(?count)
LIMIT 50

Ce lien vous permet de consulter linked Data Finland - Living Laboratory Data Service for the Semantic Web, qui propose de nombreuses bases LoD à interroger.

  1. WikiData

Je déconseille cette base car les requête sont assez illisibles (tout est sous forme de code, comme wd:Q6256 ). Voici un site avec des exemples de requêtes de Paris-Saclay Centre for Data Science.

PREFIX bd: <http://www.bigdata.com/rdf#> 
PREFIX wikibase: <http://wikiba.se/ontology#> 
PREFIX wd: <http://www.wikidata.org/entity/> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/> 

select  ?object ?objectLabel
where {
  ?object wdt:P31 wd:Q6256.
  ?object wdt:P463 wd:Q458 

  SERVICE wikibase:label {bd:serviceParam wikibase:language "fr,en" .} #Pour avoir les labels en anglais et en français
}
  1. European Patent Ontology

La description de la structure des données se trouve en suivant ce lien.

PREFIX patent: <http://data.epo.org/linked-data/def/patent/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX st3: <http://data.epo.org/linked-data/def/st3/>
PREFIX text: <http://jena.apache.org/text#>
PREFIX vcard: <http://www.w3.org/2006/vcard/ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?application ?appNum ?filingDate ?authority {
  ?application rdf:type patent:Application ;
      patent:applicationNumber ?appNum ;
      patent:filingDate        ?filingDate ; 
      patent:applicationAuthority ?authority.
} LIMIT 10
  1. Bibliothèque Nationale de France
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX bio: <http://vocab.org/bio/0.1/>

SELECT ?auteur ?jour ?date1 ?date2 ?nom
WHERE {
  ?auteur foaf:birthday ?jour.
  ?auteur bio:birth ?date1.
  ?auteur bio:death ?date2.
  OPTIONAL {?auteur foaf:name ?nom.}
}
ORDER BY (?jour)
LIMIT 100

Le lien d’un auteur peut être obtenu en lançant la requête suivante :

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?auteur 
WHERE {
  ?auteur a foaf:Person.
  ?auteur foaf:name "Honoré de Balzac".
}