============================== Interroger le Web de données ============================== UDOS_ - 10 juillet 2015 `Pierre-Antoine Champin`_ (UCBL_/LIRIS_) .. _Pierre-Antoine Champin: http://champin.net/ .. _UCBL: http://www.univ-lyon1.fr/ .. _LIRIS: http://liris.cnrs.fr/ .. _UDOS: http://www.udos.fr/ `(revenir à la présentation) `_ Introduction ------------ Pour ce tutoriel, nous allons utiliser le point d'accès SPARQL de DBPedia_, et pour y accéder, nous utiliserons le client en ligne Yasgui_. Par défaut, Yasgui est configuré pour requêter DBPedia, ce qui convient à notre tutoriel, mais gardez bien à l'esprit que: * Yasgui n'est pas lié à DBpedia, il peut être utilisé avec n'importe quel point d'accès SPARQL; * DBPedia n'est pas lié à Yasgui, elle peut-être requêtée avec n'importe quel client conforme au `protocole SPARQL`_ (en fait n'importe quel client HTTP un tant soit peu configurable). .. _DBPedia: http://dbpedia.org/ .. _Yasgui: http://yasgui.org/ .. _protocole SPARQL: http://www.w3.org/TR/sparql11-protocol/ Vocabulaire ----------- Le vocabulaire de DBPedia est très volumineux, mais dans ce tutoriel, nous n'aurons besoin que des IRIs ci-dessous. (`exemple de jeu de données`__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice1 fr [label="dbr:France"] lyon [label="dbr:Lyon"] gc [label="dbr:Gérard_Collomb"] gcn1 [label="\"Gérard Collomb\"" shape=rect] gcn2 [label="\"Collomb, Gérard\"" shape=rect] gcbd [label="1947-06-20" shape=rect] chalon [label="dbr:Chalon-sur-Saône"] nn [label="dbr:Nicéphore_Niépce"] nnn [label="\"Joseph Nicéphore Niépce\"" shape=rect] nndd [label="1833-07-05" shape=rect] saintloup [label="dbr:Saint-Loup-de-Varennes"] fr -> lyon [label="dbo:country" dir=back] fr -> chalon [label="dbo:country" dir=back] fr -> saintloup [label="dbo:country" dir=back] lyon -> gc [label="dbo:mayor"] gc -> gcn1 [label="foaf:name"] gc -> gcn2 [label="foaf:name"] gc -> gcbd [label="dbo:birthDate"] chalon -> gc [label="dbo:birthPlace" dir=back] chalon -> nn [label="dbo:birthPlace" dir=back] nn -> nnn [label="foaf:name"] nn -> nndd [label="dbo:deathDate"] saintloup -> nn [label="dbo:deathPlace" dir=back] .. list-table:: * - `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:country `_ - Propriété - Pays auquel un lieu appartient * - `dbo:mayor `_ - Propriété - Maire d'une ville * - `dbr:Digne-les-Bains `_ - Instance - La ville de Digne les bains * - `dbr:France `_ - Instance - La France .. warning:: Les IRIs sont sensibles à la casse. Exercices --------- #. Afficher les IRIs de tous les Dignois d'origine (personnes nées à Digne) (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice1 p [label="?p" fillcolor="lightblue"] dignes [label="dbr:Dignes-les-bains"] p -> dignes [label="dbo:birthPlace"] .. __: .. csv-table:: :class: clue :header-rows: 2 "11 résultats" "p" "http://dbpedia.org/resource/Paul_Duqueylar" "http://dbpedia.org/resource/Mickaël_Maschio" "http://dbpedia.org/resource/Louis_Botinelly" "http://dbpedia.org/resource/Alain_Boghossian" "http://dbpedia.org/resource/Louis_Alexis_Desmichels" "http://dbpedia.org/resource/Alphonse_Beau_de_Rochas" "http://dbpedia.org/resource/Cyril_Féraud" "http://dbpedia.org/resource/Micka%C3%ABl_Maschio" "http://dbpedia.org/resource/Hippolyte_Fortoul" "http://dbpedia.org/resource/Tristan_Louis" "http://dbpedia.org/resource/Cyril_F%C3%A9raud" #. Afficher les noms des Dignois d'origine (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice2 p [label="?p"] dignes [label="dbr:Dignes-les-bains"] n [label="?n" fillcolor="lightblue"] p -> dignes [label="dbo:birthPlace"] p -> n [label="foaf:name"] .. __: .. csv-table:: :class: clue :header-rows: 2 "20 résultats" "n" "Boghossian, Alain" "Feraud, Cyril" "Tristan Louis" "Cyril Feraud" "Mickaël Maschio" "Louis Botinelly" "Paul Duqueylar" "Duqueylar, Paul" "Louis Alexis Desmichels" "Desmichels, Louis Alexis" "Cyril Féraud" "Louis, Tristan" "Maschio, Mickaël" "Fortoul, Hippolyte" "Alain Boghossian" "Alphonse Eugène Beau de Rochas" "Beau de Rochas, Alphonse Eugène" "Jules Cantini" "Cantini, Jules" "Hippolyte Fortoul" #. Afficher les noms (sans virgule) des Dignois (vous aurez besoin d'un `filtre `_ et de la fonction `contains `_) (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice3 filter1 [label="!CONTAINS(?n, \",\")" shape=note] p [label="?p"] dignes [label="dbr:Dignes-les-bains"] n [label="?n" fillcolor="lightblue"] p -> dignes [label="dbo:birthPlace"] p -> n [label="foaf:name"] .. __: .. csv-table:: :class: clue :header-rows: 2 "11 résultats" "n" "Tristan Louis" "Cyril Feraud" "Mickaël Maschio" "Louis Botinelly" "Paul Duqueylar" "Louis Alexis Desmichels" "Cyril Féraud" "Alain Boghossian" "Alphonse Eugène Beau de Rochas" "Jules Cantini" "Hippolyte Fortoul" #. Afficher les noms (sans virgule) des Dignois avec leur date de naissance (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice4 filter1 [label="!CONTAINS(?n, \",\")" shape=note] p [label="?p"] dignes [label="dbr:Dignes-les-bains"] n [label="?n" fillcolor="lightblue"] d [label="?d" fillcolor="lightblue"] p -> dignes [label="dbo:birthPlace"] p -> n [label="foaf:name"] p -> d [label="dbo:birthDate"] .. __: .. csv-table:: :class: clue :header-rows: 2 :widths: 10,5 "11 résultats" "n", "d" "Paul Duqueylar", "1771-01-01" "Louis Alexis Desmichels", "1779-03-15" "Alphonse Eugène Beau de Rochas", "1815-04-09" "Tristan Louis", "1971-02-28" "Cyril Feraud", "1985-03-15" "Mickaël Maschio", "1973-05-19" "Louis Botinelly", "1883-01-02" "Jules Cantini", "1883-01-02" "Cyril Féraud", "1985-03-15" "Hippolyte Fortoul", "1811-08-04" "Alain Boghossian", "1970-10-27" #. Afficher les noms (sans virgule) des Dignois avec leur date de naissance, et `le cas échéant `_, leur date de décès (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice5 graph [ labeljust=r color=black style=rounded penwidth=.33 ] filter1 [label="!CONTAINS(?n, \",\")" shape=note] subgraph cluster_opt1 { label=optional margin=10 p1 [label="?p"] dd [label="?dd" fillcolor="lightblue"] p1 -> dd [label="dbo:deathDate"] } p [label="?p"] dignes [label="dbr:Dignes-les-bains"] n [label="?n" fillcolor="lightblue"] dn [label="?dn" fillcolor="lightblue"] p -> dignes [label="dbo:birthPlace"] p -> n [label="foaf:name"] p -> dn [label="dbo:birthDate"] p -> p1 [style=dotted dir=none constraint=false] .. __: .. csv-table:: :class: clue :header-rows: 2 :widths: 10,5,5 "11 résultats" "n","dn","dd" "Cyril Féraud","1985-03-15", "Louis Alexis Desmichels","1779-03-15","1845-06-07" "Tristan Louis","1971-02-28", "Paul Duqueylar","1771-01-01","1845-01-01" "Hippolyte Fortoul","1811-08-04","1856-07-04" "Louis Botinelly","1883-01-02","1962-03-26" "Jules Cantini","1883-01-02","1962-03-26" "Alain Boghossian","1970-10-27", "Cyril Feraud","1985-03-15", "Alphonse Eugène Beau de Rochas","1815-04-09","1893-03-27" "Mickaël Maschio","1973-05-19", #. Afficher les noms (sans virgule) des Dignois avec leur date de naissance, et le cas échéant, leur date et leur lieu de décès (**attention** à Paul Duqueylar) (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice6 graph [ labeljust=r color=black style=rounded penwidth=.33 ] filter1 [label="!CONTAINS(?n, \",\")" shape=note] subgraph cluster_opt2 { label=optional margin=10 p2 [label="?p"] ld [label="?ld" fillcolor="lightblue"] p2 -> ld [label="dbo:deathPlace"] } subgraph cluster_opt1 { label=optional margin=10 p1 [label="?p"] dd [label="?dd" fillcolor="lightblue"] p1 -> dd [label="dbo:deathDate"] } p [label="?p"] dignes [label="dbr:Dignes-les-bains"] n [label="?n" fillcolor="lightblue"] dn [label="?dn" fillcolor="lightblue"] p -> dignes [label="dbo:birthPlace"] p -> n [label="foaf:name"] p -> dn [label="dbo:birthDate"] p -> p1 [style=dotted dir=none constraint=false] p1 -> p2 [style=dotted dir=none constraint=false] .. __: .. csv-table:: :class: clue :header-rows: 2 :widths: 10,5,5,15 "15 résultats" "n","dn","dd","ld" "Hippolyte Fortoul","1811-08-04","1856-07-04","http://dbpedia.org/resource/Bad_Ems" "Mickaël Maschio","1973-05-19",, "Jules Cantini","1883-01-02","1962-03-26","http://dbpedia.org/resource/Bouches-du-Rh%C3%B4ne" "Cyril Féraud","1985-03-15",, "Jules Cantini","1883-01-02","1962-03-26","http://dbpedia.org/resource/Marseille" "Alphonse Eugène Beau de Rochas","1815-04-09","1893-03-27", "Louis Alexis Desmichels","1779-03-15","1845-06-07","http://dbpedia.org/resource/Paris" "Jules Cantini","1883-01-02","1962-03-26","http://dbpedia.org/resource/Bouches-du-Rhône" "Louis Botinelly","1883-01-02","1962-03-26","http://dbpedia.org/resource/Bouches-du-Rh%C3%B4ne" "Alain Boghossian","1970-10-27",, "Tristan Louis","1971-02-28",, "Cyril Feraud","1985-03-15",, "Louis Botinelly","1883-01-02","1962-03-26","http://dbpedia.org/resource/Bouches-du-Rhône" "Paul Duqueylar","1771-01-01","1845-01-01", "Louis Botinelly","1883-01-02","1962-03-26","http://dbpedia.org/resource/Marseille" #. Afficher les IRIs de toutes les villes françaises dont le maire est natif (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice7 france [label="dbr:France"] v [label="?p" fillcolor="lightblue"] m [label="?m"] v -> france [label="dbo:country"] v -> m [label="dbo:mayor"] m -> v [label="dbo:birthPlace"] .. __: .. csv-table:: :class: clue :header-rows: 2 "7 résultats" "v" "http://dbpedia.org/resource/Saint-Laurent-du-Maroni" "http://dbpedia.org/resource/Faaa" "http://dbpedia.org/resource/Bora_Bora" "http://dbpedia.org/resource/Marseille" "http://dbpedia.org/resource/Boulogne-sur-Mer" "http://dbpedia.org/resource/Nice" "http://dbpedia.org/resource/Poitiers" #. Afficher les IRIs de toutes les villes ayant deux maires (au moins), et les IRIs de leurs maires. (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice7 filter1 [label="?m1 < ?m2\n#?m1 évite les doublons" shape=note] v [label="?v"] m1 [label="?m1"] m2 [label="?m2"] v -> m1 [label="dbo:mayor"] v -> m2 [label="dbo:mayor"] .. __: .. csv-table:: :class: clue :header-rows: 2 "3 résultats" "v","m1","m2" "http://dbpedia.org/resource/Dendermonde","http://dbpedia.org/resource/Christen-Democratisch_en_Vlaams","http://dbpedia.org/resource/New_Flemish_Alliance" "http://dbpedia.org/resource/Tongeren","http://dbpedia.org/resource/Patrick_Dewael","http://dbpedia.org/resource/Carmen_Willems" "http://dbpedia.org/resource/Evergreen_Cemetery_(Adams_County,_Pennsylvania)","http://dbpedia.org/resource/John_Augustus_Swope","http://dbpedia.org/resource/David_McConaughy" #. Afficher les IRIs des personnes nés dans une ville française, ainsi que l'IRI de la ville, en `limitant `_ le nombre de résultats à 100. (indice__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice9 graph [ labeljust=l color=black style=rounded penwidth=.33 ] limit [label="LIMIT 100" shape=note] subgraph cluster_sel { label=select margin=10 france [label="dbr:France"] p [label="?p" fillcolor="lightblue"] v [label="?v" fillcolor="lightblue"] v -> france [label="dbo:country"] p -> v [label="dbo:birthPlace"] } #. Afficher les IRIs des villes française `triées `_ par la date de naissance de leur maire (on exclut de fait les villes dont le maire, ou sa date de naissance, ne sont pas renseignés dans DBPedia). Affichez aussi l'IRI du maire et sa date de naissance. (indice__) (résultats__) (`cacher <#hide>`_) .. __: .. rst-class:: clue .. digraph:: indice8 graph [ labeljust=l color=black style=rounded penwidth=.33 ] order [label="ORDER BY ?d" shape=note] subgraph cluster_sel { label=select margin=10 france [label="dbr:France"] v [label="?v" fillcolor="lightblue"] m [label="?m" fillcolor="lightblue"] d [label="?d" fillcolor="lightblue"] v -> france [label="dbo:country"] v -> m [label="dbo:mayor"] m -> d [label="dbo:birthDate"] } .. __: .. csv-table:: :class: clue :header-rows: 2 :widths: 15,15,5 "145 résultats" "v","m","d" "http://dbpedia.org/resource/Entrammes","http://dbpedia.org/resource/Jean_Bodin","1530-01-01" "http://dbpedia.org/resource/Marville,_Meuse","http://dbpedia.org/resource/Claude_Biwer","1936-05-15" "http://dbpedia.org/resource/Saint-Saulve","http://dbpedia.org/resource/Cécile_Gallez","1936-05-16" "http://dbpedia.org/resource/Sournia","http://dbpedia.org/resource/Paul_Blanc","1937-01-29" "http://dbpedia.org/resource/Seignosse","http://dbpedia.org/resource/Ladislas_de_Hoyos","1939-03-27" "...","...","..." #. Afficher les IRIs des villes française `triées `_ par la date de naissance de leur maire en commençant par les plus jeunes. #. Afficher pour chaque ville française son IRI, et le nombre de natifs de cette ville répertoriés dans DBPedia. On utilisera pour cela la `fonction d'aggrégation `_ COUNT. (indice__) (`cacher <#hide>`_) .. __: .. code:: :class: clue SELECT ?ville (COUNT(?personne) as ?nb_personnes) { ... } GROUP BY ?ville #. Afficher pour 10 villes françaises le nombre de natifs présents dans DBPedia (indice__) (`cacher <#hide>`_) .. __: .. rst-class:: clue Il faut pour cela combiner astucieusement la réponse à la question précédente avec un ``ORDER BY`` et un ``LIMIT``.