Open Data 
& 
Linked Data 
Vincent Brouté 
@VincentBroute
La démarche de l’Open Data 
=> Publier des données libres d’accès et de réutilisation en ligne <= 
Comment ? 
Jeux de données (CSV, XLS, PDF, XML, etc) 
Codes postaux des villes (CSV), bulletins meteo mensuels (PDF), Impôts locaux par ville (XLS) 
APIs 
APIs géographiques Geonames, Données sur les bus et vélo STAR de Rennes , horaires des trains TER en France 
Datasets RDF & Endpoints SPARQL (= Linked Open Data) 
data.gov, data.gov.uk, DBPedia, INSEE, IGN, Bibliothèque Nationale de France (depuis août 2014)
La démarche de l’Open Data 
Les acteurs de l’Open Data : 
Les gouvernements 
France, USA, UK, Australie, Union Européenne 
Annuaires des portails Open Data par Pays 
Les entreprises/organismes publics 
SNCF, La Poste, INSEE, Meteo France 
Les villes 
Rennes, Nantes, Paris, New York
Open Data => Linked Data 
Open Data Linked Data 
Linked Data : Technologies développées par le W3C 
Objectif : publier sur le web des données structurées et reliées entre elles
Linked Data 
1994 : Création du W3C & début des réflexions sur le web sémantique 
2001 : Premier article dans une revue scientifique 
2004 : Premiers drafts des recommandations W3C : RDFS, OWL, RDF 
2006 : Semantic Web => Linked Data 
Plenary at WWW Geneva 94 
Ambiguïté sur le nom + erreur stratégique avec l’introduction de notions complexes liées à l’IA : 
“En fait, nous aurions dû l'appeler dès le départ « Web de données ». 
Mais il est trop tard pour changer de nom. ” (Tim-Berners-Lee, 2007) 
2008 : Premier draft pour SPARQL 1.0 
2013 : SPARQL 1.1 publié en tant que “recommandation” 
2014 : RDF 1.1 (JSON-LD + minor fixes) , Sept. 2014 : Working Draft “Linked Data Platform best practices ” 
Ex : “Rennes” sur DBPedia
Organiser les données : RDF 
RDF = Modèle de données, en graph 
Les entités sont décrites par des triplets : 
Sujet : la ressource à décrire. Identifié par une URI HTTP ( = un noeud) 
Prédicat : la relation entre le sujet et l’objet. Identifié par une URI HTTP ( = un arc) 
Objet : litéral ou une autre ressource ( = un autre noeud ou une feuille) 
(+) : le type et la langue de l’objet 
Un graph est composé d’un ensemble de triplets 
/! RDF = le modèle des données => définit l’organisation théorique des données (// modèle relationnel, clé-valeurs, arbre …)
Organiser les données : RDF 
207 178 “Rennes” @fr 
Rennes 
http://fr.dbpedia.org/resource/Rennes 
Nathalie Appéré 
http://fr.dbpedia.org/resource/Nathalie_Appéré 
Ille-et-Vilaine 
http://fr.dbpedia.org/resource/Ille-et-Vilaine 
1975-07-08 
populationTotal 
http://fr.dbpedia.org/ontology/populationTot 
al 
department 
http://fr.dbpedia.org/ontology/department 
maire 
http://fr.dbpedia.org/property/maire 
birthDate 
http://fr.dbpedia.org/ontology/birthDate 
label 
http://www.w3.org/2000/01/rdf-schema# 
label
Organiser les données : RDF 
Sérialisation RDF/XML : 
<?xml version="1.0" encoding="UTF-8"?> 
<rdf:RDF 
xmlns:dbp-ont="http://fr.dbpedia.org/ontology/" 
xmlns:dbp-prop="http://fr.dbpedia.org/property/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
xmlns:owl="http://www.w3.org/2002/07/owl#" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
<rdf:Description rdf:about="http://fr.dbpedia.org/resource/Rennes"> 
<rdfs:label>Rennes</rdfs:label> 
<dbp-ont:department rdf:resource="http://fr.dbpedia.org/resource/Ille-et-Vilaine" /> 
<dbp-ont:populationTotal rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">207178</dbp-ont: 
populationTotal> 
<dbp-prop:maire rdf:resource="http://fr.dbpedia.org/resource/Nathalie_Appéré" /> 
</rdf:Description> 
<rdf:Description rdf:about="http://fr.dbpedia.org/resource/Nathalie_Appéré"> 
<rdfs:label>Nathalie Appéré</rdfs:label> 
<dbp-ont:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1975-07-08</dbp-ont:birthDate> 
</rdf:Description> 
</rdf:RDF>
Organiser les données : RDF 
Plus lisible, la sérialisation Turtle : 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix dbp-prop: <http://fr.dbpedia.org/property/> . 
@prefix dbp-ont: <http://fr.dbpedia.org/ontology/> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
<http://fr.dbpedia.org/resource/Rennes> 
rdfs:label "Rennes" ; 
dbp-ont:department <http://fr.dbpedia.org/resource/Ille-et-Vilaine> ; 
dbp-ont:populationTotal 207178^^xsd:integer ; 
dbp-prop:maire <http://fr.dbpedia.org/resource/Nathalie_Appéré> . 
<http://fr.dbpedia.org/resource/Nathalie_Appéré> 
rdfs:label “Nathalie Appéré” ; 
dbp-ont:birthDate “1975-07-08”^^xsd:date . 
Sérialisations RDF : RDF-XML, N-Triples, Turtle, Trig, N-Quads, JSON-LD
Organiser les données : RDF 
3 vocabulaires (ontologies) = 3 niveaux d’expressivité 
Concepts RDF de base : 
rdf:Statement, rdf:subject, rdf:predicate, rdf:object + rdf:type 
http://www.w3.org/1999/02/22-rdf-syntax-ns, Concepts and Abstract Syntax, RDF 1.1 XML Syntax 
Fournit les éléments de base pour construire des ontologies 
rdfs:Class, rdfs:subClassOf, rdfs:domain, rdfs:range, rdfs:label, rdfs:comment 
http://www.w3.org/2000/01/rdf-schema, RDF Schema 1.1 
Niveau le plus expressif, complément à RDFS 
Ex: owl:ReflexiveProperty, owl:TransitiveProperty, etc 
http://www.w3.org/2002/07/owl, OWL 2 Web Ontology Language 
RDF 
RDFS 
OWL 
Objectif : décrire les ressources et créer de nouvelles ontologies
Créer des ontologies avec RDF, RDFS et OWL 
Ontologie Données 
@prefix test: <http://test.com/myontology#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 
test:PopulatedPlace rdf:type owl:Class; 
rdfs:label “Lieu peuplé” . 
test:Town rdf:type owl:Class; 
rdfs:label “Ville”; 
rdfs:subClassOf :PopulatedPlace . 
test:postalCode rdf:type owl:DatatypeProperty ; 
rdfs:label “Code postal”; 
rdfs:domain test:Town ; 
rdfs:range xsd:string . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix test: <http://test.com/myontology#> . 
<http://test.com/rennes> rdf:type test:Town; 
rdfs:label “Rennes”; 
test:postalCode “35000” . 
<http://test.com/boulogne-billancourt> rdf:type test:Town; 
rdfs:label “Boulogne-Billancourt”; 
test:postalCode “92100” . 
(...)
Créer des ontologies avec RDF, RDFS et OWL 
Inférence 
Créer des règles pour découvrir de nouvelles relations entre les ressources 
Données : 
John estPereDe Mary 
John estFrereDe Jack 
Règle : 
Si (?x estPereDe ?y ET ?x estFrereDe ?z) alors (?z estOncleDe ?y) 
Inférence : 
Jack estOncleDe Mary 
Reasonners : Cwm, Jena, etc 
?x 
John 
?y 
Mary 
?y 
Jack 
estFrereDe 
estPereDe 
estOncleDe
Stocker les données : triplestores 
> Stocker et requêter RDF 
> Pas de créations de tables, schemas, etc. 
> Langage d’interrogation : SPARQL. 
> Endpoint pour interroger les données via HTTP en SPARQL. (Ex : DBPedia) 
> Quelques triplestores du marché : Sesame, Jena (Apache), Virtuoso
Interroger les données : SPARQL 
● Récupérer le libellé et la population de Rennes sur DBPedia : 
Pattern matching 
prefix dbp-ont: <http://dbpedia.org/ontology/> 
select ?libelle ?pop WHERE { 
<http://fr.dbpedia.org/resource/Rennes> rdfs:label ?libelle ; 
dbp-ont:populationTotal ?pop 
FILTER(lang(?libelle) = 'fr') . 
} 
● Récupérer le libellé et la population de toutes les villes d’Ille-et-Vilaine : 
prefix dbp-ont: <http://dbpedia.org/ontology/> 
select * WHERE { 
?ville dbp-ont:department <http://fr.dbpedia.org/resource/Ille-et-Vilaine> ; 
rdfs:label ?libelle ; 
dbp-ont:populationTotal ?pop 
FILTER(lang(?libelle) = 'fr') . 
}
Interroger les données : SPARQL 
Récupérer sur le SPARQL endpoint de l’INSEE le nombre d’habitants par région en 2010 : 
Rennes 
population PopulationTotale 
populationLegale/commune/35238/2010 207178 
2010-01-01 subdivisionDe 
Arrondissement de Rennes 
Ille-Et-Vilaine 
subdivisionDe 
date 
Ex. pour Rennes :
Interroger les données : SPARQL 
Récupérer sur le SPARQL endpoint de l’INSEE le nombre d’habitants par région en 2010 : 
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX igeo:<http://rdf.insee.fr/def/geo#> 
PREFIX idemo:<http://rdf.insee.fr/def/demo#> 
SELECT ?nomRegion (SUM(?popTotale) as ?pop) where { 
?ville rdf:type igeo:Commune ; 
idemo:population ?population ; 
igeo:subdivisionDe ?arrondissement . 
?arrondissement igeo:subdivisionDe ?dpt . 
?dpt igeo:subdivisionDe ?region . 
?region igeo:nom ?nomRegion . 
?population idemo:date "2010-01-01"^^<http://www.w3.org/2001/XMLSchema#date> ; 
idemo:populationTotale ?popTotale . 
} 
GROUP BY ?nomRegion
Acteurs du Linked Data en France et dans le monde 
● En France 
○ Dbpedia-fr : data RDF + Endpoint SPARQL (Virtuoso) 
○ INSEE : data RDF + Endpoint SPARQL (DataLift) 
○ Bibliothèque Nationale de France : data RDF + Endpoint SPARQL (Virtuoso) 
● Dans le monde 
○ DBPedia : data RDF + Endpoint SPARQL (Virtuoso) 
○ data.gov : data RDF 
○ data.gov.uk : data RDF
Bonus : Freebase 
● Projet collaboratif 
● Données en licence Creative Commons 
● “Rassembler les connaissances du web” 
● Format graph propriétaire (graphd) 
● Langage d’interrogation en JSON : MQL 
● APIs (100 000 requêtes / jour / token) 
Recherches, sélections, écritures, images 
● Dumps RDF disponibles : 
- 1.9 milliards de triplets 
- 250Gb de données 
- Mis à jour 1 fois / semaine 
Exemples : 
Données sur Batman Begins 
Récupérer les enfants de Madonna sur le Endpoint MQL: 
{ 
"type":"/people/person", 
"id":"/en/madonna","children":[] 
}
Questions ?

Open data & linked data

  • 1.
    Open Data & Linked Data Vincent Brouté @VincentBroute
  • 2.
    La démarche del’Open Data => Publier des données libres d’accès et de réutilisation en ligne <= Comment ? Jeux de données (CSV, XLS, PDF, XML, etc) Codes postaux des villes (CSV), bulletins meteo mensuels (PDF), Impôts locaux par ville (XLS) APIs APIs géographiques Geonames, Données sur les bus et vélo STAR de Rennes , horaires des trains TER en France Datasets RDF & Endpoints SPARQL (= Linked Open Data) data.gov, data.gov.uk, DBPedia, INSEE, IGN, Bibliothèque Nationale de France (depuis août 2014)
  • 3.
    La démarche del’Open Data Les acteurs de l’Open Data : Les gouvernements France, USA, UK, Australie, Union Européenne Annuaires des portails Open Data par Pays Les entreprises/organismes publics SNCF, La Poste, INSEE, Meteo France Les villes Rennes, Nantes, Paris, New York
  • 4.
    Open Data =>Linked Data Open Data Linked Data Linked Data : Technologies développées par le W3C Objectif : publier sur le web des données structurées et reliées entre elles
  • 5.
    Linked Data 1994: Création du W3C & début des réflexions sur le web sémantique 2001 : Premier article dans une revue scientifique 2004 : Premiers drafts des recommandations W3C : RDFS, OWL, RDF 2006 : Semantic Web => Linked Data Plenary at WWW Geneva 94 Ambiguïté sur le nom + erreur stratégique avec l’introduction de notions complexes liées à l’IA : “En fait, nous aurions dû l'appeler dès le départ « Web de données ». Mais il est trop tard pour changer de nom. ” (Tim-Berners-Lee, 2007) 2008 : Premier draft pour SPARQL 1.0 2013 : SPARQL 1.1 publié en tant que “recommandation” 2014 : RDF 1.1 (JSON-LD + minor fixes) , Sept. 2014 : Working Draft “Linked Data Platform best practices ” Ex : “Rennes” sur DBPedia
  • 6.
    Organiser les données: RDF RDF = Modèle de données, en graph Les entités sont décrites par des triplets : Sujet : la ressource à décrire. Identifié par une URI HTTP ( = un noeud) Prédicat : la relation entre le sujet et l’objet. Identifié par une URI HTTP ( = un arc) Objet : litéral ou une autre ressource ( = un autre noeud ou une feuille) (+) : le type et la langue de l’objet Un graph est composé d’un ensemble de triplets /! RDF = le modèle des données => définit l’organisation théorique des données (// modèle relationnel, clé-valeurs, arbre …)
  • 7.
    Organiser les données: RDF 207 178 “Rennes” @fr Rennes http://fr.dbpedia.org/resource/Rennes Nathalie Appéré http://fr.dbpedia.org/resource/Nathalie_Appéré Ille-et-Vilaine http://fr.dbpedia.org/resource/Ille-et-Vilaine 1975-07-08 populationTotal http://fr.dbpedia.org/ontology/populationTot al department http://fr.dbpedia.org/ontology/department maire http://fr.dbpedia.org/property/maire birthDate http://fr.dbpedia.org/ontology/birthDate label http://www.w3.org/2000/01/rdf-schema# label
  • 8.
    Organiser les données: RDF Sérialisation RDF/XML : <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:dbp-ont="http://fr.dbpedia.org/ontology/" xmlns:dbp-prop="http://fr.dbpedia.org/property/" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="http://fr.dbpedia.org/resource/Rennes"> <rdfs:label>Rennes</rdfs:label> <dbp-ont:department rdf:resource="http://fr.dbpedia.org/resource/Ille-et-Vilaine" /> <dbp-ont:populationTotal rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">207178</dbp-ont: populationTotal> <dbp-prop:maire rdf:resource="http://fr.dbpedia.org/resource/Nathalie_Appéré" /> </rdf:Description> <rdf:Description rdf:about="http://fr.dbpedia.org/resource/Nathalie_Appéré"> <rdfs:label>Nathalie Appéré</rdfs:label> <dbp-ont:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1975-07-08</dbp-ont:birthDate> </rdf:Description> </rdf:RDF>
  • 9.
    Organiser les données: RDF Plus lisible, la sérialisation Turtle : @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix dbp-prop: <http://fr.dbpedia.org/property/> . @prefix dbp-ont: <http://fr.dbpedia.org/ontology/> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <http://fr.dbpedia.org/resource/Rennes> rdfs:label "Rennes" ; dbp-ont:department <http://fr.dbpedia.org/resource/Ille-et-Vilaine> ; dbp-ont:populationTotal 207178^^xsd:integer ; dbp-prop:maire <http://fr.dbpedia.org/resource/Nathalie_Appéré> . <http://fr.dbpedia.org/resource/Nathalie_Appéré> rdfs:label “Nathalie Appéré” ; dbp-ont:birthDate “1975-07-08”^^xsd:date . Sérialisations RDF : RDF-XML, N-Triples, Turtle, Trig, N-Quads, JSON-LD
  • 10.
    Organiser les données: RDF 3 vocabulaires (ontologies) = 3 niveaux d’expressivité Concepts RDF de base : rdf:Statement, rdf:subject, rdf:predicate, rdf:object + rdf:type http://www.w3.org/1999/02/22-rdf-syntax-ns, Concepts and Abstract Syntax, RDF 1.1 XML Syntax Fournit les éléments de base pour construire des ontologies rdfs:Class, rdfs:subClassOf, rdfs:domain, rdfs:range, rdfs:label, rdfs:comment http://www.w3.org/2000/01/rdf-schema, RDF Schema 1.1 Niveau le plus expressif, complément à RDFS Ex: owl:ReflexiveProperty, owl:TransitiveProperty, etc http://www.w3.org/2002/07/owl, OWL 2 Web Ontology Language RDF RDFS OWL Objectif : décrire les ressources et créer de nouvelles ontologies
  • 11.
    Créer des ontologiesavec RDF, RDFS et OWL Ontologie Données @prefix test: <http://test.com/myontology#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . test:PopulatedPlace rdf:type owl:Class; rdfs:label “Lieu peuplé” . test:Town rdf:type owl:Class; rdfs:label “Ville”; rdfs:subClassOf :PopulatedPlace . test:postalCode rdf:type owl:DatatypeProperty ; rdfs:label “Code postal”; rdfs:domain test:Town ; rdfs:range xsd:string . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix test: <http://test.com/myontology#> . <http://test.com/rennes> rdf:type test:Town; rdfs:label “Rennes”; test:postalCode “35000” . <http://test.com/boulogne-billancourt> rdf:type test:Town; rdfs:label “Boulogne-Billancourt”; test:postalCode “92100” . (...)
  • 12.
    Créer des ontologiesavec RDF, RDFS et OWL Inférence Créer des règles pour découvrir de nouvelles relations entre les ressources Données : John estPereDe Mary John estFrereDe Jack Règle : Si (?x estPereDe ?y ET ?x estFrereDe ?z) alors (?z estOncleDe ?y) Inférence : Jack estOncleDe Mary Reasonners : Cwm, Jena, etc ?x John ?y Mary ?y Jack estFrereDe estPereDe estOncleDe
  • 13.
    Stocker les données: triplestores > Stocker et requêter RDF > Pas de créations de tables, schemas, etc. > Langage d’interrogation : SPARQL. > Endpoint pour interroger les données via HTTP en SPARQL. (Ex : DBPedia) > Quelques triplestores du marché : Sesame, Jena (Apache), Virtuoso
  • 14.
    Interroger les données: SPARQL ● Récupérer le libellé et la population de Rennes sur DBPedia : Pattern matching prefix dbp-ont: <http://dbpedia.org/ontology/> select ?libelle ?pop WHERE { <http://fr.dbpedia.org/resource/Rennes> rdfs:label ?libelle ; dbp-ont:populationTotal ?pop FILTER(lang(?libelle) = 'fr') . } ● Récupérer le libellé et la population de toutes les villes d’Ille-et-Vilaine : prefix dbp-ont: <http://dbpedia.org/ontology/> select * WHERE { ?ville dbp-ont:department <http://fr.dbpedia.org/resource/Ille-et-Vilaine> ; rdfs:label ?libelle ; dbp-ont:populationTotal ?pop FILTER(lang(?libelle) = 'fr') . }
  • 15.
    Interroger les données: SPARQL Récupérer sur le SPARQL endpoint de l’INSEE le nombre d’habitants par région en 2010 : Rennes population PopulationTotale populationLegale/commune/35238/2010 207178 2010-01-01 subdivisionDe Arrondissement de Rennes Ille-Et-Vilaine subdivisionDe date Ex. pour Rennes :
  • 16.
    Interroger les données: SPARQL Récupérer sur le SPARQL endpoint de l’INSEE le nombre d’habitants par région en 2010 : PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX igeo:<http://rdf.insee.fr/def/geo#> PREFIX idemo:<http://rdf.insee.fr/def/demo#> SELECT ?nomRegion (SUM(?popTotale) as ?pop) where { ?ville rdf:type igeo:Commune ; idemo:population ?population ; igeo:subdivisionDe ?arrondissement . ?arrondissement igeo:subdivisionDe ?dpt . ?dpt igeo:subdivisionDe ?region . ?region igeo:nom ?nomRegion . ?population idemo:date "2010-01-01"^^<http://www.w3.org/2001/XMLSchema#date> ; idemo:populationTotale ?popTotale . } GROUP BY ?nomRegion
  • 17.
    Acteurs du LinkedData en France et dans le monde ● En France ○ Dbpedia-fr : data RDF + Endpoint SPARQL (Virtuoso) ○ INSEE : data RDF + Endpoint SPARQL (DataLift) ○ Bibliothèque Nationale de France : data RDF + Endpoint SPARQL (Virtuoso) ● Dans le monde ○ DBPedia : data RDF + Endpoint SPARQL (Virtuoso) ○ data.gov : data RDF ○ data.gov.uk : data RDF
  • 18.
    Bonus : Freebase ● Projet collaboratif ● Données en licence Creative Commons ● “Rassembler les connaissances du web” ● Format graph propriétaire (graphd) ● Langage d’interrogation en JSON : MQL ● APIs (100 000 requêtes / jour / token) Recherches, sélections, écritures, images ● Dumps RDF disponibles : - 1.9 milliards de triplets - 250Gb de données - Mis à jour 1 fois / semaine Exemples : Données sur Batman Begins Récupérer les enfants de Madonna sur le Endpoint MQL: { "type":"/people/person", "id":"/en/madonna","children":[] }
  • 19.