Web des données

Option GCN - Polytech Nantes
08/10/2017


Benjamin Hervy
Stéphane Loret
{prenom}.{nom}@univ-nantes.fr

Programme

  • Introduction au web des données (web sémantique, LinkedOpenData)
  • Modélisation RDF (TD)
  • Introduction au langage SPARQL
  • TP Requêtes SPARQL et Mashup données

SPARQL

1 - définitions

 S-PARQL Protocole And Request Query Language est un langage de requêtes du W3C pour RDF/RDFS
        - recommandation W3C du 15-01-2008 pour le langage SPARQL 1.0
        - recommandation W3C du 21-03-2013 pour le langage SPARQL 1.1    

        - Le langage utilise du pattern matching sur la donnée graphe


On cherche les valuations des variables qui soient des sous-graphes de la donnée.
 

2 - Parcours d'un graphe pas à pas...

2 - Parcours d'un graphe pas à pas...

2 - Parcours d'un graphe pas à pas...

3 - Exemple basique

4 - COMPOSITION D'UNE REQUETE SPARQL

4 - COMPOSITION D'UNE REQUETE SPARQL

  • SELECT permet de sélectionner des résultats à partir de variables (notées avec un $ ou un ?) inclus dans le WHERE
  • La clause DISTINCT permet de supprimer les doublons automatiquement
  • Possibilité de créer des valeurs à partir d'expressions : la clause CONCAT par exemple :

 

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ( CONCAT(?G, " ", ?S) AS ?name )
WHERE { ?P foaf:givenName ?G ; foaf:surname ?S }

Autres requêtes possibles :

ASK -> permet de vérifier la présence de triplets

 

CONSTRUCT -> permet de re-modéliser des nouveaux triplets

 
CONSTRUCT { ?resource dc:title ?label } WHERE { ?resource rdfs:label ?label }
ASK { ?resource dc:title ?label }

Cibler un graphe à fouiller

FROM

PREFIX mit: <http://mit.edu#>

SELECT ?student
FROM <http://mit.edu/data.rdf>
WHERE
{     ?student mit:registeredAt ?y .    
}
PREFIX mit: <http://mit.edu#>

SELECT ?student
FROM <http://mit.edu/data.rdf>
WHERE
{     
    GRAPH <http://mit.edu/data.rdf> { ?student mit:registeredAt ?y . }
}

Triplets et noeuds blancs

Triplets et noeuds blancs

La clause WHERE

permet de définir l'ensemble des contraintes à vérifier

PREFIX dbpedia: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/ >

SELECT ?auteur ?depiction WHERE {
     ?auteur a <http://dbpedia.org/class/yago/FrenchNovelists>.       
     ?auteur foaf:depiction ?depiction.
     ?auteur dbpedia:birthPlace  <http://dbpedia.org/resource/Paris>.    
}

des clauses peuvent être ajoutées :

PREFIX dbpedia: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/ >

SELECT ?auteur ?depiction WHERE {
     ?auteur a <http://dbpedia.org/class/yago/FrenchNovelists>.       
     OPTIONAL {?auteur foaf:depiction ?depiction.}
     ?auteur dbpedia:birthPlace  <http://dbpedia.org/resource/Paris>.    
}

OPTIONAL

Filtrer les résultats

PREFIX ex: <http://msh.univ-nantes.fr/schema#>

SELECT ?personne ?name
WHERE
{     ?personne rdf:type ex:Person ;
      ex:name ?name ;
      ex:age ?age .
    
      FILTER (xsd:integer(?age) >= 18)
}

Opérateurs de test

  • >=, >, =, !=, etc.
  • regex(?x, "A.*")
  • isURI(), isBlank(), isLiteral()
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
SELECT ?name ?birthname WHERE {
?x foaf:name ?name .
?x dbpedia2:birthName ?birthname .
FILTER regex (str(?name), "^Amade*", "i")
FILTER (lang(?name) = 'en')
} LIMIT 100
  • - lang(), datatype(), str()
  • - xsd:integer(?x)
  • - YEAR(date)…
  • - ABS(), MD5()…

opérateurs de tests |accéder aux attributs |transformer/caster les valeurs etc...

Filtrer les résultats

Instruction de test

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

SELECT *
WHERE
{     ?x foaf:name ?name ; foaf:age ?age .    
      FILTER (if (langMatches(lang(?name), "FR")), ?age>=18, ?age>=21)
}

Filtrer les résultats

IN, EXISTS

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

SELECT *
WHERE
{     ?x foaf:name ?name .    
      FILTER ( ?name IN ("benjamin", "stephane") )
}
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *
WHERE
{     ?x foaf:name ?name .    
      FILTER NOT EXISTS { ?x foaf:age -1 }
}

La clause UNION

UNION permet d'exprimer l'opérateur booléen "OU" (inclusif)

SELECT ?auteur WHERE {
?auteur a dbpedia-owl:Person .       
 {
  {?auteur dbpedia-owl:birthPlace dbpedia-fr:Paris .}
  UNION
  {?auteur dbpedia-owl:birthPlace dbpedia-fr:Besançon .}
 }
}

Trier, filtrer, limiter, aggréger

ORDER BY, LIMIT, OFFSET, GROUP BY

PREFIX mit: <http://mit.edu#>

SELECT ?student ?score
FROM <http://mit.edu/data.rdf>
WHERE
{     ?student mit:score ?score .    
}
GROUP BY ?student
HAVING (AVG(?score) >= 10)
LIMIT 100

Négations : Not exists, Minus

Comment récupérer les auteurs qui n'ont pas le prédicat ?depiction

PREFIX dbpedia: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/ >
SELECT ?auteur ?depiction WHERE {
     ?auteur a <http://dbpedia.org/class/yago/FrenchNovelists>.       
     ?auteur foaf:depiction ?depiction.
     ?auteur dbpedia:birthPlace  <http://dbpedia.org/resource/Paris>.    
}
SELECT ?auteur ?depiction WHERE {
     ?auteur a <http://dbpedia.org/class/yago/FrenchNovelists>.       
     FILTER NOT EXISTS { ?auteur foaf:depiction ?depiction. }
     ?auteur dbpedia:birthPlace  <http://dbpedia.org/resource/Paris>.    
}

FILTER NOT EXISTS

SELECT ?auteur ?depiction WHERE {
     ?auteur a <http://dbpedia.org/class/yago/FrenchNovelists>.       
     MINUS { ?auteur foaf:depiction ?depiction. }
     ?auteur dbpedia:birthPlace  <http://dbpedia.org/resource/Paris>.    
}

MINUS

Requête imbriquée

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

SELECT ?name
WHERE
{     
      {
        SELECT (max(?age) as ?max)
        WHERE { ?person foaf:age ?age }
      }
      ?senior foaf:age ?max .
      ?senior foaf:name ?name
}

Modifier un graphe RDF

INSERT, DELETE

PREFIX ex: <http://example.org/>

DELETE { ?x a ex:Musician }
INSERT { ?x a ex:Artist }
WHERE  { ?x a ex:Musician }
PREFIX ex: <http://example.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

INSERT DATA
{     
    ex:Jimmy foaf:name "Jimmy" ;
    foaf:knows ex:John, ex:Robert .
}

METHODOLOGIE : découvrir les données d'un SPARQL Endpoint pas à pas

1 - découvir les types de ressources présentes dans l'entrepôt

SELECT DISTINCT ?Concept WHERE
{
  ?s a ?Concept
}

2 - Explorer les prédicats distincts liés à une ressource d'un type

SELECT DISTINCT ?predicat WHERE
{
  ?sujet a <http://xmlns.com/foaf/0.1/Person> .
  ?sujet ?predicat ?objet.
}

3 - Rechercher les ressources de ce type en associant un des prédicats trouvés.

SELECT DISTINCT ?sujet ?objet WHERE
{
  ?sujet a <http://xmlns.com/foaf/0.1/Person> .
  ?sujet <http://www.w3.org/2000/01/rdf-schema#label> ?objet .
}

4 - Rechercher tous les triplets dont une ressource particulière est sujet

select distinct ?predicat ?objet
where 
{
  <http://dbpedia.org/resource/Bill_Clinton> ?predicat ?objet.
}

5 - Compliquer la requête pour commencer à parcourir le graphe

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dbpr: <http://dbpedia.org/property/>
select distinct ?label
where 
{
  <http://dbpedia.org/resource/Bill_Clinton> dbpr:placeOfBirth ?objet.
  ?objet rdfs:label ?label
}

Protocole d'échange

Communication via HTTP :

  • GET /sparql?query=<encoded query>
  • Host: fr.dbpedia.org
  • User-agent : my-sparql-client/0.1

Protocole d'échange

Service web via SOAP :

POST /services/sparql-query HTTP/1.1
Content-Type: application/soap+xml
Accept: application/soap+xml, multipart/related, text/*
User-Agent: Axis/1.2.1
Host: www.example
SOAPAction: ""
Content-Length: 438

<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope 
        xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
         <query-request
             xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
            <query>
                SELECT ?z {?x ?y ?z . FILTER regex(?z, 'Harry')}
            </query>
         </query-request>
      </soapenv:Body>
   </soapenv:Envelope>

Exercice

À partir de http://fr.dbpedia.org/page/Victor_Hugo

Chercher la liste des écrivains

  1. nés à Paris
  2. nés entre 1850 et 1920
  3. avec leur nom en chinois

 

 

Exercice

Quelles sont les communes de la région Ile de France ?

data.insee.fr

Exercice

Que retourne cette requête ?

prefix foaf: <http://xmlns.com/foaf/0.1/>
select distinct ?x ?z where {
  ?x foaf:knows ?y .
  ?z foaf:knows ?y
  filter (?x != ?z)
}
ex:John foaf:knows ex:Jack, ex:James .
ex:Jim  foaf:knows ex:James, ex:Jack .

Exercice

Que fait cette requête ?

(traduire la requête en question)

prefix ex: <http://example.org/>
delete { ?x ex:age ?a }
insert { ?x ex:age ?i }
where  {
  select ?x (xsd:integer(?a) as ?i)
  where {
    ?x ex:age ?a
    filter(datatype(?a) = xsd:string)
  }
}

Exercice

Trouver les noms des présidents américains sur wikidata

Présentation Wikidata et exemple de projet

Boîte à outils

Boîte à outils

Linked data frameworks

Boîte à outils

Conception d'une ontologie

​Protégé : protege.stanford.edu

Boîte à outils

SPARQL Editors

Twinkle : http://www.ldodds.com/projects/twinkle/

 

Et plein d'autres sur le web :

http://yasqe.yasgui.org/, http://sparql.carsten.io/

 

data.bnf.fr/sparql/

fr.dbpedia.org/sparql

 

Boîte à outils

Visualisation de données

Gephi : https://gephi.org/

Semantic Web Import Plugin

Aussi : Sigma.js, D3.js, etc.

http://blog.sparna.fr/

Travaux pratiques

Quelques exemples de mashup

Chronoisidore

http://www.stephanepouyllau.org/labs/isidore/chronosidore/

Musées de France

OpenCat

Flybase

data.gov.uk

Exercice

L'entreprise X, spécialisée dans le tourisme en France, vous demande d'établir un rapport sur l'intégration des données liées ouvertes dans le site web dédiée à son activité. La direction souhaite en effet développer l'agrégation de contenu et la sérendipité pour les utilisateurs du site. Dans ce cadre, il est demandé :

  1. un champ de recherche avec auto-complétion des noms de commune liés à la base GeoNames
  2. à partir d'une requête sur un nom de commune, que la page de résultats retourne, outre les données essentielles de la commune, des connaissances sur :
  • des lieux à visiter (haut-lieu, musée, etc.), des écrivains célèbres, etc.
  • des idées d'ouvrage sur le lieu en question...
  • des idées d'hôtel dans la mesure du possible.
  • toute autre information qui participe de l'objectif initial dans la limite des contraintes techniques.

Le rapport comprendra une partie brève sur les avantages et les inconvénients de la techno.

Web des données - SPARQL

By benjaminh

Web des données - SPARQL

  • 2,067