Web sémantique Partie I RDF - SPARQL Cours Document et Web Sémantique Nicol Delestre DF - SPARQL v1.0 1 / 49
Plan... 1 Vers le Web sémantique 2 RDF 3 SPARQL 4 Publication, requêtage 5 Conclusion RDF - SPARQL v1.0 2 / 49
Vers le Web sémantique Les métadonnées de http://i.insa-rouen.fr/~delestre http://i.insarouen.fr/~delestr e/images/photo ND.jpg http://schema. org/person France name http://schema. org/country BP08 Avenue de l'université F-76801 addresscountry postalcode streetaddress itemprop itemtype http://schema.org /PostalAddress INSA de Rouen honorificprefix Dr image colleague jobtitle email MC name familyname memberof nicol.delestre @insa-rouen.fr Nicol Delestre Delestre workfor memberof addresslocality Saint-Etienne du Rouvray address legalname url http://www.insa -rouen.fr http://schema.org /CollegeOrUniver sity name Nicol Malandain http://schema. org/person http://schema.org /EducationalOrga nization http://i.insarouen.fr url name Architecture des Systèmes d'information alternatename http://schema.org /EducationalOrga nization ASI http:/litislab.eu url name alternatename Laboratoire d'informatique, du Traitement de l'information et des Systèmes LITIS RDF - SPARQL v1.0 3 / 49
Vers le Web sémantique Constats Certains éléments ne sont p nommés alors qu ils ont un rôle, ils représentent quelque chose (une personne, un établissement, une organisation pédagogique, etc.) Alors que la page décrit une personne ces métadonnées décrivent plus de chose honorificprefix Dr iamge jobtitle MC http://schema. org/person http://schema. org/person email name familyname nicol.delestre @insa-rouen.fr France memberof http://schema.org /EducationalOrga nization http://i.insarouen.fr/~delestr e/images/photo ND.jpg http://i.insarouen.fr name Nicol Delestre Delestre url http://schema. org/country workfor memberof name Architecture des Systèmes d'information alternatename BP08 Avenue de l'université F-76801 addresscountry postalcode addresslocality Saint-Etienne du Rouvray http://schema.org /EducationalOrga nization ASI streetaddress address http:/litislab.eu legalname url url itemprop itemtype http://schema.org /PostalAddress INSA de Rouen http://www.insa -rouen.fr http://schema.org /CollegeOrUniver sity name Laboratoire d'informatique, du Traitement de l'information et des Systèmes Il y a deux types de liens alors que les deux servent à caractériser une entité Le même fichier, le même URL, rsemble des informations destinées aux humains et aux machines name Nicol Malandain colleague alternatename LITIS RDF - SPARQL v1.0 4 / 49
Vers le Web sémantique Le web sémantique 1 / 3 Définition Le Web des données et le Web Sémantique sont le Web pour les machines : le Web implique l utilisation (et son extension) des technologies du Web (URL, HTTP) et des principes du Web (informations décentralisées et interconnectées) pour les machines implique informations structurées RDF - SPARQL v1.0 5 / 49
Vers le Web sémantique Le web sémantique 2 / 3 Des URL aux URI Les URL permettent d identifier un document sur le Web Les URI (et IRI) permettent de référencer un objet, une resource, un concept, une idée, etc. sur le Web Lorsqu un URI correspondant à un URL, le contenu retourné après une requête HTTP GET dépend du type mime (accept) demandé (cf. [BP08]) : text/html : une page Web est retournée application/rdf+xml : une description Web sémantique est retournée RDF - SPARQL v1.0 6 / 49
Vers le Web sémantique Le web sémantique 3 / 3 Plus exactement WEB des Documents WEB des Données WEB Sémantique Standards et Outils URL HTTP HTML DTD XSD Moteur de recherche URI HTTP RDF SPARQL RDFS Moteur de requêtes URI HTTP RDF SPARQL OWL Moteur de requêtes Techniques Aujourd'hui Recherche d'information bée sur des index de mots Monde des documents Mise en correspondance de graphes Monde des bes de données Logique Monde des bes de connaissances Des milliards de pages Des milliards de triplets RDF Des milliers d'ontologies Inspiré de la présentation de MC Rousset : http://www.college-de-france.fr/media/serge-abiteboul/upl5540483766962034581_rousset20120530.pdf RDF - SPARQL v1.0 7 / 49
RDF RDF 1 / 3 Présentation Langage de représentation de métadonnées proposé par le W3C en 1999 Le document présentant la dernière version (2004) est composé de 6 parties : 1 Primer : connaissances de be du RDF 2 Concepts : syntaxe abstraite définissant le RDF 3 Syntax : représentation XML du RDF 4 Semantics : Interprétation logique du RDF 5 Vocabulary : Définition de nouveau vocabulaire (RDF Schema) 6 Test Ces : Tests unitaires RDF - SPARQL v1.0 8 / 49
RDF RDF 2 / 3 Concepts de be Un triplé composé de : Sujet ou Ressource : Ressource sur laquelle s applique la métadonnée Prédicat ou Propriété : Nom de la métadonnée appliquée à la ressource Objet ou valeur : Valeur de la métadonnée (peut être une resource ou un litéral) http://www.w3c.org/home/lsila creator Ora Lsila [W3C99] RDF - SPARQL v1.0 9 / 49
RDF RDF 3 / 3 Possibilité de structurer l information http://www.w3c.org/home/lsila Creator http://www.w3c.org/home/lsila Creator http://www.w3c.org/staffd/85740 Name Email Name Email Ora Lsila lsila@w3.org Ora Lsila lsila@w3.org [W3C99] RDF - SPARQL v1.0 10 / 49
RDF Introduction au RDF/XML 1 / 4 L élément de be : Description Ressource : Attribut about Prédicat : Élément inclus provenant d un schéma (voir RDFS) Valeur : Spécifiée dans l élément inclus <? xml version =" 1.0 "?> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:exterms =" http: // www. example.org / terms /"> < rdf:description rdf:about =" http: // www. example.org / index.html "> < exterms:creation - date > August 16, 1999 </ exterms:creation - date > </ rdf:description > </ rdf:rdf > Tous les exemples qui suivent sont issus de [W3C04] RDF - SPARQL v1.0 11 / 49
RDF Introduction au RDF/XML 2 / 4 On peut avoir plusieurs descriptions faisant référence à plusieurs schém RDFS <? xml version =" 1.0 "?> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:dc=" http: // purl.org /dc/ elements /1.1/ " xmlns:exterms =" http: // www. example.org / terms /"> < rdf:description rdf:about =" http: // www. example.org / index.html "> < exterms:creation - date > August 16, 1999 </ exterms:creation - date > </ rdf:description > < rdf:description rdf:about =" http: // www. example.org / index.html "> <dc:language >en</ dc:language > </ rdf:description > </ rdf:rdf > RDF - SPARQL v1.0 12 / 49
RDF Introduction au RDF/XML 3 / 4 Les valeurs peuvent être des littéraux ou des ressources L attribut datatype permet de typer les littéraux (possibilité d utiliser les types xsd) Possibilité d utiliser les ENTITY des DTD <? xml version =" 1.0 "?> <!DOCTYPE rdf:rdf [<!ENTITY xsd " http: // www.w3.org /2001/ XMLSchema #">]> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:dc=" http: // purl.org /dc/ elements /1.1/ " xmlns:exterms =" http: // www. example.org / terms /"> < rdf:description rdf:about =" http: // www. example.org / index.html "> < exterms:creation - date rdf:datatype ="& xsd ;# date ">1999-08 -16 </ exterms:creation - date > <dc:language >en</ dc:language > <dc:creator rdf:resource=" http: // www. example.org / staffid /85740 "/> </ rdf:description > </ rdf:rdf > RDF - SPARQL v1.0 13 / 49
RDF Introduction au RDF/XML 4 / 4 Les attributs nodeid et id permettent de créer des nœuds vides <? xml version =" 1.0 "?> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:dc=" http: // purl.org /dc/ elements /1.1/ " xmlns:exterms=" http: // example.org / stuff /1.0/ "> <rdf:description rdf:about=" http: // www.w3.org /TR/rdf -syntax - grammar "> < dc:title >RDF /XML Syntax Specification ( Revised )</ dc:title > < exterms:editor rdf:nodeid =" abc "/> </ rdf:description > < rdf:description rdf:nodeid =" abc "> <exterms:fullname >Dave Beckett</ exterms:fullname > < exterms:homepage rdf:resource =" http: // purl.org /net / dajobe /"/> </ rdf:description > </ rdf:rdf > RDF - SPARQL v1.0 14 / 49
RDF Conteneur 1 / 4 Bag, sequence et alternative Il est fréquent de devoir faire référence à plusieurs ressources (par exemple un livre écrit par plusieurs auteurs ) RDF propose trois conteneurs : bag Liste non ordonnée de resources ou de littéraux (élément bag) sequence Liste ordonnée de resources ou de littéraux (élément seq) alternative Liste de resources ou de littéreaux qui représentent des alternatives pour une valeur unique (élément alt) Les éléments du conteneur sont listés à l aide de l élément li ou i avec (i > 0) Pour alternative il doit y avoir au moins un élément 1 (élément par défaut) RDF - SPARQL v1.0 15 / 49
RDF Conteneur 2 / 4 Bag <? xml version =" 1.0 "?> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:s =" http: // example.org / students / vocab #"> <rdf:description rdf:about=" http: // example.org / courses /6.001 "> < s:students > < rdf:bag > < rdf:li rdf:resource =" http: // example.org / students /Amy "/> < rdf:li rdf:resource =" http: // example.org / students / Mohamed "/> < rdf:li rdf:resource =" http: // example.org / students / Johann "/> < rdf:li rdf:resource =" http: // example.org / students / Maria "/> < rdf:li rdf:resource =" http: // example.org / students / Phuong "/> </ rdf:bag > </ s:students > </ rdf:description > </ rdf:rdf > RDF - SPARQL v1.0 16 / 49
RDF Conteneur 3 / 4 Alternative <? xml version =" 1.0 "?> <rdf:rdf xmlns:rdf=" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:s =" http: // example.org / packages / vocab #"> < rdf:description rdf:about =" http: // example.org / packages /X11 "> <s:distributionsite > < rdf:alt > < rdf:li rdf:resource ="ftp: // ftp. example.org "/> < rdf:li rdf:resource ="ftp: // ftp1. example.org "/> < rdf:li rdf:resource ="ftp: // ftp2. example.org "/> </ rdf:alt > </ s:distributionsite > </ rdf:description > </ rdf:rdf > RDF - SPARQL v1.0 17 / 49
RDF Conteneur 4 / 4 Problème Lorsque la ressource est une collection, la propriété porte sur la collection ou sur les éléments de cette collection Sur la collection si utilisation de l attribut about Sur les éléments de la collection si utilisation de l attribut abouteach < rdf:bag ID=" pages "> < rdf:li resource =" http: // foo.org /foo.html " /> < rdf:li resource =" http: // bar.org /bar.html " /> </ rdf:bag > < rdf:description abouteach ="# pages "> < s:creator >Ora Lsila </ s:creator > </ rdf:description > http: // www. w3. org/ TR/ 1999/ REC-rdf-syntax-19990222/ RDF - SPARQL v1.0 18 / 49
Préfixe RDF Préfixe d URI Lorsque l on veut appliquer une propriété à un ensemble de ressources organisé hiérarchiquement (un début d URI, préfixe, en commun), on peut utiliser la propriété au préfixe grâce à l attribut abouteachprefix < rdf:description abouteachprefix =" http: // foo.org /doc "> <s:copyright >(c) 1998, The Foo Organization </ s:copyright > </ rdf:description > [W3C99] RDF - SPARQL v1.0 19 / 49
RDF Turtle 1 / 2 Une autre méthode de sérialisation La syntaxe XML est verbeuse, peut être difficile à lire (par les humains) Une autre syntaxe Turtle (N3) a été proposée par Tim Berners-Lee pour être encore plus facile à lire Syntaxe simple : @ prefix ns: <URI >.... <ns:sujet > <Predicat1 > <Valeur1 >; <Predicat2 > <Valeur21 >,<Valeur22 >,...;... <Predicatn > <Valeurn >. [ ] <Predicat1 > <Valeur1 >. <Predicat2 > <Valeur21 >,<Valeur22 >,...;... <Predicatn > <Valeurn >. RDF - SPARQL v1.0 20 / 49
RDF Turtle 2 / 2 Comparaison (Wikipédia) < rdf:rdf xmlns:rdf =" http: // www.w3.org /1999/02/22 - rdf -syntax -ns#" xmlns:dc =" http: // purl.org /dc/ elements /1.1/ "> < rdf:description rdf:about =" http: // en. wikipedia.org /wiki / Tony_Benn "> < dc:title >Tony Benn </ dc:title > <dc:publisher >Wikipedia</ dc:publisher > </ rdf:description > </ rdf:rdf > @ prefix dc: <http :// purl.org /dc/ elements /1.1/ >. <http :// en. wikipedia.org /wiki / Tony_Benn > dc: title "Tony Benn "; dc: publisher " Wikipedia ". RDF - SPARQL v1.0 21 / 49
RDF D autres formats http://www.w3.org/tr/rdf11-new/ RDF - SPARQL v1.0 22 / 49
Clse RDF En RDF il est possible d socier à une ressource une ou plusieurs clses : en utilisant la propriété rdf:type en utilisant le nom de la clse pour la balise décrivant la ressource en remplacement rdf:description (sérialisation XML) en utilisant la propriété a (sérialisation N3) Cela permet de connaître l ensemble des propriétés qui sont valides pour cette ressource RDF - SPARQL v1.0 23 / 49
SPARQL SPARQL Deux Langages (SPARQL Query Language et SPARQL Update) et un protocole d interrogation de bes de données RDF Syntaxe ressemblant à SQL Principe de fonctionnement : recherche de sous-graphes dans un graphe (graph matching) Tous les exemples de ce cours sont issus de Learning SPARQL de Bob DuCharme [DuC11] Vous pourrez trouver un tutoriel complet issu de ce livre sur la chaîne YouTube de Noureddin Sadawi https://www.youtube.com/user/drnoureddinsadawi/ RDF - SPARQL v1.0 24 / 49
SPARQL Obtenir la valeur d une propriété [DuC11] Be RDF # filename : ex002. ttl Requête # filename : ex007.rq @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> ab: richard ab: hometel " (229) 276-5135 ". ab: richard ab: email " richard49@hotmail. com ". ab: cindy ab: hometel " (245) 646-5488 ". ab: cindy ab: email " cindym@gmail.com ". ab: craig ab: hometel " (194) 966-1505 ". ab: craig ab: email " craigellis@yahoo.com ". ab: craig ab: email "c. ellis@usairwaysgroup. com ". SELECT? craigemail FROM <ex002.ttl > WHERE { ab: craig ab: email? craigemail. } Résultats -------------------------------- craigemail ================================ "c. ellis@usairwaysgroup.com " " craigellis@yahoo.com " -------------------------------- Le FROM est optionnel RDF - SPARQL v1.0 25 / 49
SPARQL Obtenir l URI d une ressource [DuC11] Be RDF # filename : ex002. ttl Requête # filename : ex008.rq @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> ab: richard ab: hometel " (229) 276-5135 ". ab: richard ab: email " richard49@hotmail. com ". SELECT? person WHERE {? person ab: hometel " (229) 276-5135 ". } ab: cindy ab: hometel " (245) 646-5488 ". ab: cindy ab: email " cindym@gmail.com ". ab: craig ab: hometel " (194) 966-1505 ". ab: craig ab: email " craigellis@yahoo.com ". ab: craig ab: email "c. ellis@usairwaysgroup. com ". Résultats -------------- person ============== ab: richard -------------- RDF - SPARQL v1.0 26 / 49
SPARQL Obtenir toutes les propriétés d une ressource [DuC11] Be RDF # filename : ex002. ttl Requête # filename : ex010.rq @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> ab: richard ab: hometel " (229) 276-5135 ". ab: richard ab: email " richard49@hotmail. com ". ab: cindy ab: hometel " (245) 646-5488 ". ab: cindy ab: email " cindym@gmail.com ". ab: craig ab: hometel " (194) 966-1505 ". ab: craig ab: email " craigellis@yahoo.com ". ab: craig ab: email "c. ellis@usairwaysgroup. com ". SELECT? propertyname? propertyvalue WHERE { ab: cindy? propertyname? propertyvalue. } Résultats ------------------------------------- propertyname propertyvalue ===================================== ab: email " cindym@gmail.com " ab: hometel "(245) 646-5488" ------------------------------------- RDF - SPARQL v1.0 27 / 49
SPARQL Contraindre certaines valeurs [DuC11] Be RDF # filename : ex012. ttl Requête # filename : ex013.rq @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/ data #>. d: i0432 ab: firstname " Richard ". d: i0432 ab: ltname "Mutt ". d: i0432 ab: hometel " (229) 276-5135 ". d: i0432 ab: email " richard49@hotmail. com ". PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? craigemail WHERE {? person ab: firstname " Craig ".? person ab: email? craigemail. } d: i9771 ab: firstname " Cindy ". d: i9771 ab: ltname " Marshall ". d: i9771 ab: hometel " (245) 646-5488 ". d: i9771 ab: email " cindym@gmail.com ". d: i8301 ab: firstname " Craig ". d: i8301 ab: ltname " Ellis ". d: i8301 ab: email " craigellis@yahoo.com ". d: i8301 ab: email "c. ellis@usairwaysgroup. com ". Résultats -------------------------------- craigemail ================================ "c. ellis@usairwaysgroup.com " " craigellis@yahoo.com " -------------------------------- RDF - SPARQL v1.0 28 / 49
SPARQL Filtrer certains résultats [DuC11] 1 / 2 Requête # filename : ex021.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT * WHERE {?s?p?o. FILTER ( regex (?o, " yahoo ","i")) } Résultats --------------------------------------------------------------------------------- s p o ================================================================================= <http :// learningsparql.com /ns/data #i8301 > ab: email " craigellis@yahoo.com " --------------------------------------------------------------------------------- RDF - SPARQL v1.0 29 / 49
SPARQL Filtrer certains résultats [DuC11] 2 / 2 FILTER Ne prend qu un seul argument Opérateurs :!, =,! =, >, <, <=, >=,, &&, IN Fonctions : BOUND, isuri, isiri, isblank, isliteral, STR, LANG, DATATYPE, sameterm, langmatches, REGEX Possibilités d appeler des fonctions externes Exemple fonction externe (W3C) PREFIX ageo : <http :// example.org /geo #> SELECT? neighbor WHERE {?a ageo : placename " Grenoble ".?a ageo : location? axloc.?a ageo : location? ayloc.?b ageo : placename? neighbor.?b ageo : location? bxloc.?b ageo : location? byloc. FILTER ( ageo : distance (? axloc,?ayloc,?bxloc,? byloc ) < 10 ). } RDF - SPARQL v1.0 30 / 49
SPARQL Attention aux requêtes trop contraintes [DuC11] Be RDF # filename : ex054. ttl @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/ data #>. d: i0432 ab: firstname " Richard ". d: i0432 ab: ltname "Mutt ". d: i0432 ab: hometel " (229) 276-5135 ". d: i0432 ab:nick "Dick ". d: i0432 ab: email " richard49@hotmail. com ". Requête # filename : ex055.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t? worktel WHERE {?s ab: firstname? f i r s t ; ab: ltname? l a s t ; ab: worktel? worktel. } d: i9771 ab: firstname " Cindy ". d: i9771 ab: ltname " Marshall ". d: i9771 ab: hometel " (245) 646-5488 ". d: i9771 ab: email " cindym@gmail.com ". d: i8301 ab: firstname " Craig ". d: i8301 ab: ltname " Ellis ". d: i8301 ab: worktel " (245) 315-5486 ". d: i8301 ab: email " craigellis@yahoo.com ". d: i8301 ab: email "c. ellis@usairwaysgroup. com ". Résultats ---------------------------------------- first lt worktel ======================================== " Craig " " Ellis " "(245) 315-5486" ---------------------------------------- RDF - SPARQL v1.0 31 / 49
SPARQL Avoir des contraintes optionnelles [DuC11] 1 / 2 Requête # filename : ex057.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t? worktel WHERE {?s ab: firstname? f i r s t ; ab: ltname? l a s t. OPTIONAL {?s ab: worktel? worktel. } } Résultats --------------------------------------------- first lt worktel ============================================= " Craig " " Ellis " "(245) 315-5486" " Cindy " " Marshall " " Richard " "Mutt " --------------------------------------------- RDF - SPARQL v1.0 32 / 49
SPARQL Avoir des contraintes optionnelles [DuC11] 2 / 2 Requête # filename : ex061.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t? worktel? nick WHERE {?s ab: firstname? f i r s t ; ab: ltname? l a s t. OPTIONAL {?s ab: worktel? worktel. } OPTIONAL {?s ab: nick? nick. } } Résultats ------------------------------------------------------ first lt worktel nick ====================================================== " Craig " " Ellis " "(245) 315-5486" " Cindy " " Marshall " " Richard " "Mutt " "Dick " ------------------------------------------------------ RDF - SPARQL v1.0 33 / 49
SPARQL Filtrer des contraintes optionnelles [DuC11] 1 / 2 Be RDF Requête # filename : ex054. ttl @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/ data #>. d: i0432 ab: firstname " Richard ". d: i0432 ab: ltname "Mutt ". d: i0432 ab: hometel " (229) 276-5135 ". d: i0432 ab:nick "Dick ". d: i0432 ab: email " richard49@hotmail. com ". d: i9771 ab: firstname " Cindy ". d: i9771 ab: ltname " Marshall ". d: i9771 ab: hometel " (245) 646-5488 ". d: i9771 ab: email " cindym@gmail.com ". # filename : ex065.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t WHERE {?s ab: firstname? f i r s t ; ab: ltname? l a s t. OPTIONAL {?s ab: worktel? worknum. } FILTER (! bound (? worknum )) } Résultats d: i8301 ab: firstname " Craig ". d: i8301 ab: ltname " Ellis ". d: i8301 ab: worktel " (245) 315-5486 ". d: i8301 ab: email " craigellis@yahoo.com -------------------------- ". first lt d: i8301 ab: email "c. ========================== ellis@usairwaysgroup. com ". " Cindy " " Marshall " " Richard " "Mutt " -------------------------- RDF - SPARQL v1.0 34 / 49
SPARQL Filtrer des contraintes optionnelles [DuC11] 2 / 2 Be RDF Requête (SPARQL 1.1) # filename : ex054. ttl @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/ data #>. d: i0432 ab: firstname " Richard ". d: i0432 ab: ltname "Mutt ". d: i0432 ab: hometel " (229) 276-5135 ". d: i0432 ab:nick "Dick ". d: i0432 ab: email " richard49@hotmail. com ". d: i9771 ab: firstname " Cindy ". d: i9771 ab: ltname " Marshall ". d: i9771 ab: hometel " (245) 646-5488 ". d: i9771 ab: email " cindym@gmail.com ". # filename : ex067.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t WHERE {?s ab: firstname? f i r s t ; ab: ltname? l a s t. FILTER NOT EXISTS {?s ab: worktel? worknum } } Résultats d: i8301 ab: firstname " Craig ". d: i8301 ab: ltname " Ellis ". d: i8301 ab: worktel " (245) 315-5486 ". d: i8301 ab: email " craigellis@yahoo.com -------------------------- ". first lt d: i8301 ab: email "c. ========================== ellis@usairwaysgroup. com ". " Cindy " " Marshall " " Richard " "Mutt " -------------------------- RDF - SPARQL v1.0 35 / 49
SPARQL Éviter les répétitions [DuC11] Be RDF # filename : ex054. ttl @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/data #>. d: i0432 ab: firstname " Richard ". d: i0432 ab: ltname "Mutt ". d: i0432 ab: hometel " (229) 276-5135 ". d: i0432 ab:nick "Dick ". d: i0432 ab: email " richard49@hotmail.com ". d: i9771 ab: firstname " Cindy ". d: i9771 ab: ltname " Marshall ". d: i9771 ab: hometel " (245) 646-5488 ". d: i9771 ab: email " cindym@gmail.com ".... Requête # filename : ex092.rq SELECT DISTINCT?p WHERE {?s?p?o. } RDF - SPARQL v1.0 36 / 49
SPARQL Combiner des résultats [DuC11] 1 / 4 Be RDF # filename : ex069. ttl # Courses @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns/ data #>. # People d: i0432 ab: firstname " Richard " ; ab: ltname "Mutt " ; ab: email " richard49@hotmail. com ". d: i9771 ab: firstname " Cindy " ; ab: ltname " Marshall " ; ab: email " cindym@gmail.com ". d: i8301 ab: firstname " Craig " ; ab: ltname " Ellis " ; ab: email "c. ellis@usairwaysgroup. com ". d: course34 ab: coursetitle " Modeling Data with OWL ". d: course71 ab: coursetitle " Enhancing Websites with RDFa ". d: course59 ab: coursetitle " Using SPARQL with non - RDF Data ". d: course85 ab: coursetitle " Updating Data with SPARQL ". # Who s taking which courses d: i8301 ab: takingcourse d: course59. d: i9771 ab: takingcourse d: course34. d: i0432 ab: takingcourse d: course85. d: i0432 ab: takingcourse d: course59. d: i9771 ab: takingcourse d: course59. RDF - SPARQL v1.0 37 / 49
SPARQL Combiner des résultats [DuC11] 2 / 4 Requête # filename : ex098.rq PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> PREFIX d: <http :// learningsparql.com /ns/data #> SELECT * WHERE { {? person ab: firstname? f i r s t ; ab: ltname? l a s t. } } UNION {? course ab: coursetitle? coursename. } Résultats ------------------------------------------------------------------------------------ person first lt course coursename ==================================================================================== d: i8301 " Craig " " Ellis " d: i9771 " Cindy " " Marshall " d: i0432 " Richard " "Mutt " d: course85 " Updating Data with SPARQL " RDF - SPARQL v1.0 d: course59 " Using SPARQL with non -RDF Data " 38 / 49
SPARQL Combiner des résultats [DuC11] 3 / 4 Be RDF # filename : ex100. ttl Requête # filename : ex101.rq @ prefix ab: <http :// learningsparql.com /ns/ addressbook #>. @ prefix d: <http :// learningsparql.com /ns / data #>. d: i0432 ab: firstname " Richard " ; ab: ltname "Mutt " ; ab: instrument "sax " ; ab: instrument " clarinet ". d: i9771 ab: firstname " Cindy " ; ab: ltname " Marshall " ; ab: instrument " drums ". PREFIX ab: <http :// learningsparql.com /ns/ addressbook #> SELECT? f i r s t? l a s t? instrument WHERE { {? person ab: firstname? f i r s t ; ab: ltname? l a s t ; ab: instrument " trumpet " ; ab: instrument? instrument. } UNION d: i8301 ab: firstname " Craig " ; ab: ltname " Ellis " ; ab: instrument " trumpet ". } {? person ab: firstname? f i r s t ; ab: ltname? l a s t ; ab: instrument "sax " ; ab: instrument? instrument. } RDF - SPARQL v1.0 39 / 49
SPARQL Combiner des résultats [DuC11] 4 / 4 Résultats ------------------------------------ first lt instrument ==================================== " Craig " " Ellis " " trumpet " " Richard " "Mutt " " clarinet " " Richard " "Mutt " "sax " ------------------------------------ RDF - SPARQL v1.0 40 / 49
SPARQL Et ce n est p fini! 1 / 2 SPARQL Query Language Possibilité d utiliser des fonctions dans le SELECT : MIN, MAX, COUNT,... Possibilité d ordonner les résultats : ORDER BY Possibilité de grouper des résultats (GROUP BY) et d agréger des résultats (HAVING) avec différentes fonctions d aggrégation (MAX, AVG, SUM,...) Possibilité de limiter le nombre de résultats LIMIT (à utiliser sur des grandes be) ou de demander les résultats à partir d un certain rang (OFFSET) Possibilité d utiliser des variables : AS Possibilité de rechercher dans plusieurs be à la fois : SERVICE Possibilité d autres types de requêtes : DESCRIBE, ASK, CONSTRUCT... RDF - SPARQL v1.0 41 / 49
SPARQL Et ce n est p fini! 2 / 2 SPARQL Update Possibilité d ajouter des triplets RDF Possibilité de supprimer (sous conditions ou p) des triplets RDF Possibilité de mettre à jour (par ajout(s) et suppression(s) conditionnel(s)) des triplets RDF RDF - SPARQL v1.0 42 / 49
Publication, requêtage Publication : Outils, API Publication Publication de triplets RDF : format N3 (.ttl) ou XML (.rdf) Utilisation d une be de données (par exemple JENA) proposant une entrée SPARQL (par exemple Fuseki) Requêtage Utilisation de la méthode GET HTTP avec le type mime application/rdf+xml, lorsque l URI est une URL Utilisation d utilitaire de requêtage SPARQL (par exemple arq) Utilisation d une API (par exemple Jena) RDF - SPARQL v1.0 43 / 49
Publication, requêtage Exemple : fr.dbpedia.org RDF - SPARQL v1.0 44 / 49
Conclusion Conclusion 1 / 4 Évolution du web sémantique source : http: // lod-cloud. net/ 2007 RDF - SPARQL v1.0 45 / 49
Conclusion Conclusion 2 / 4 Le web se mantique aujourd hui source : http: // lod-cloud. net/ (2014) RDF - SPARQL v1.0 46 / 49
Conclusion Conclusion 3 / 4 L Open data défini par Tim Berners-Lee en 2006 http://www.w3.org/designissues/linkeddata.html RDF - SPARQL v1.0 47 / 49
Conclusion Conclusion 4 / 4 Ce qui n a p été présenté Les autres méthodes de sérialisation Le conteneur list La réification La notion de graphe et le Global Giant Graph RDF - SPARQL v1.0 48 / 49
Conclusion Références [BP08] [DuC11] [Gen08] Diego Berrueta and Jon Phipps. Best practice recipes for publishing rdf vocabularies. World Wide Web Consortium, Note NOTE-swbp-vocab-pub-20080828, August 2008. B. DuCharme. Learning SPARQL. O Reilly Media, 2011. D. Genest. Cours sur le web sémantique, 2008. http://www.info.univ-angers.fr/pub/genest/enseignement/index.html. [GFZC12] [GFZC15] Fabien Gandon, Catherine Faron-Zucker, and Olivier Corby. Le Web sémantique : comment lier les données et les schém sur le web? InfoPro. Dunod, Paris, 2012. Sommaire et résumé disponibles sur le site de l éditeur à l adresse consulté le 2013-04-09 http ://http ://www.dunod.com/informatique-multimedia/systemes-dinformation-et-reseaux/strategie-etsystemes-dinformation/gestion-/le-web-semantique. Fabien Gandon, Catherine Faron-Zucker, and Olivier Corby. Web sémantique et web de données. https://www.france-universite-numerique-mooc.fr/courses/inria/41002/trimestre_1_2015/info, Mars 2015. [W3C99] Resource description framework, 1999. http://www.w3.org/tr/1999/rec-rdf-syntax-19990222/. [W3C04] Rdf primer, 2004. http://www.w3.org/tr/rdf-primer/. RDF - SPARQL v1.0 49 / 49