S PAR QL in a nutshell fabien, gandon, inria
RDF triple model  is the first layer of the semantic web standards
SPARQL on top... an  R D F  query language and data access protocol
SPARQL  stands for S PARQL  P rotocol and  R DF  Q uery  L anguage
SPARQL  in 3 parts part 1:  query  language part 2:  result  format part 3: access  protocol
SPARQL  query SELECT ... FROM ... WHERE { ... }
SELECT  clause to identify the values to be returned
FROM  clause to identify the data sources to query
WHERE  clause the triple/graph pattern to be matched against the triples/graphs of RDF
WHERE  clause a conjunction of triples: {  ?x  rdf:type ex:Person ?x  ex:name  ?name  }
PREFIX to declare the schema used in the query
example persons and their names PREFIX  ex: < http://inria.fr/schema# > SELECT   ?person ?name WHERE  {   ?person  rdf:type ex:Person   ?person  ex:name  ?name  . }
example of result <?xml version=&quot;1.0&quot;?>  <sparql  xmlns=&quot;http://www.w3.org/2005/sparql-results#&quot;  >  <head>   <variable name=&quot; person &quot;/> <variable name=&quot; name &quot;/>   </head>  <results ordered=&quot;false&quot; distinct=&quot;false&quot;>   <result>   <binding name=&quot; person &quot;> <uri>http://inria.fr/schema#fg</uri> </binding> <binding name=&quot; name &quot;> <literal>gandon</literal> </binding>   </result> <result>  ...
FILTER to add constraints  to the graph pattern (e.g., numerical like  X>17  )
example persons at least 18-year old PREFIX  ex: < http://inria.fr/schema# > SELECT  ?person ?name WHERE  {   ?person  rdf:type ex:Person   ?person  ex:name  ?name  . ?person  ex:age  ?age  . FILTER (?age > 17) }
FILTER can use many operators, functions (e.g., regular expressions), and even users' extensions
OPTIONAL to make the matching of a part of the pattern optional
example retrieve the age if available PREFIX  ex: < http://inria.fr/schema# > SELECT  ?person ?name  ?age WHERE  {   ?person  rdf:type ex:Person   ?person  ex:name  ?name  . OPTIONAL {  ?person  ex:age  ?age  } }
UNION to give alternative patterns in a query
example explicit or implicit adults  PREFIX  ex: < http://inria.fr/schema# > SELECT  ?name WHERE  {  ?person ex:name ?name . {   {  ?person  rdf:type ex:Adult   }   UNION   {  ?person  ex:age  ?age    FILTER (?age > 17)  }  } }
Sequence & modify  ORDER BY  to sort LIMIT  result number OFFSET  rank of first result
example results 21 to 40 ordered by name PREFIX  ex: < http://inria.fr/schema# > SELECT   ?person ?name WHERE  {   ?person  rdf:type ex:Person   ?person  ex:name  ?name  . } ORDER BY ?name LIMIT 20 OFFSET 20
UNBOUND test a variable is not bound ; used for negation as failure
example persons who are not known authors PREFIX  ex: < http://inria.fr/schema# > SELECT  ?name WHERE  {  ?person ex:name ?name . OPTIONAL {  ?person  ex:author  ?x  }   FILTER (  ! bound(?x) ) }
negation is tricky and errors can easily be made.
? does this find persons who do not know &quot;java&quot; ? PREFIX  ex: < http://inria.fr/schema# > SELECT  ?name WHERE  {  ?person ex:name ?name . ?person  ex:knows  ?x   FILTER (  ?x  != &quot;Java &quot;  ) }
NO!  also persons who know something else  ! PREFIX  ex: < http://inria.fr/schema# > SELECT  ?name WHERE  {  ?person ex:name ?name . ?person  ex:knows  ?x   FILTER (  ?x  != &quot;Java&quot;  ) }  fabien  ex:knows  &quot;Java&quot; fabien  ex:knows  &quot;C++&quot; fabien is a answer...
YES!  persons who are not known to know &quot;java&quot; ... negation of an option... PREFIX  ex: < http://inria.fr/schema# > SELECT  ?name WHERE  {  ?person ex:name ?name . OPTIONAL { ?person  ex:knows  ?x FILTER ( ?x  = &quot;Java&quot;  )  }   FILTER (  ! bound(?x)   ) }
ASK to check just if there is at least one answer ; result is &quot;true&quot; or &quot;false&quot;
example is there a person older than 17 ? PREFIX  ex: < http://inria.fr/schema# > ASK {   ?person  ex:age  ?age    FILTER (?age > 17)  }
CONSTRUCT return a specific RDF graph for each result
example return instances of adults for persons older than 17 PREFIX  ex: < http://inria.fr/schema# > CONSTRUCT { ?person  rdf:type ex:Adult } WHERE {   ?person  ex:age  ?age    FILTER (?age > 17)  }
SPARQL  protocol sending queries and their results accross the web
example with HTTP Binding GET /sparql/?query= <encoded query>   HTTP/1.1 Host: www.inria.fr User-agent: my-sparql-client/0.1
example with SOAP Binding <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <soapenv:Envelope  xmlns:soapenv=&quot;http://www.w3.org/2003/05/soap-envelope/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; > <soapenv:Body> <query-request  xmlns=&quot;http://www.w3.org/2005/09/sparql-protocol-types/#&quot; > <query>SELECT ?x ?p ?y WHERE {?x ?p ?y}</query> </query-request> </soapenv:Body> </soapenv:Envelope>
Take-away summary of SPARQL
SPARQL is... ... a query language ... ... a result format ... ... an access protocol ... ...  for RDF
SPARQL query language based on the triple model  ?x   ?p   ?y filters to add constraints optional parts and alternative parts
fabien, gandon

SPARQL in a nutshell

  • 1.
    S PAR QLin a nutshell fabien, gandon, inria
  • 2.
    RDF triple model is the first layer of the semantic web standards
  • 3.
    SPARQL on top...an R D F query language and data access protocol
  • 4.
    SPARQL standsfor S PARQL P rotocol and R DF Q uery L anguage
  • 5.
    SPARQL in3 parts part 1: query language part 2: result format part 3: access protocol
  • 6.
    SPARQL querySELECT ... FROM ... WHERE { ... }
  • 7.
    SELECT clauseto identify the values to be returned
  • 8.
    FROM clauseto identify the data sources to query
  • 9.
    WHERE clausethe triple/graph pattern to be matched against the triples/graphs of RDF
  • 10.
    WHERE clausea conjunction of triples: { ?x rdf:type ex:Person ?x ex:name ?name }
  • 11.
    PREFIX to declarethe schema used in the query
  • 12.
    example persons andtheir names PREFIX ex: < http://inria.fr/schema# > SELECT ?person ?name WHERE { ?person rdf:type ex:Person ?person ex:name ?name . }
  • 13.
    example of result<?xml version=&quot;1.0&quot;?> <sparql xmlns=&quot;http://www.w3.org/2005/sparql-results#&quot; > <head> <variable name=&quot; person &quot;/> <variable name=&quot; name &quot;/> </head> <results ordered=&quot;false&quot; distinct=&quot;false&quot;> <result> <binding name=&quot; person &quot;> <uri>http://inria.fr/schema#fg</uri> </binding> <binding name=&quot; name &quot;> <literal>gandon</literal> </binding> </result> <result> ...
  • 14.
    FILTER to addconstraints to the graph pattern (e.g., numerical like X>17 )
  • 15.
    example persons atleast 18-year old PREFIX ex: < http://inria.fr/schema# > SELECT ?person ?name WHERE { ?person rdf:type ex:Person ?person ex:name ?name . ?person ex:age ?age . FILTER (?age > 17) }
  • 16.
    FILTER can usemany operators, functions (e.g., regular expressions), and even users' extensions
  • 17.
    OPTIONAL to makethe matching of a part of the pattern optional
  • 18.
    example retrieve theage if available PREFIX ex: < http://inria.fr/schema# > SELECT ?person ?name ?age WHERE { ?person rdf:type ex:Person ?person ex:name ?name . OPTIONAL { ?person ex:age ?age } }
  • 19.
    UNION to givealternative patterns in a query
  • 20.
    example explicit orimplicit adults PREFIX ex: < http://inria.fr/schema# > SELECT ?name WHERE { ?person ex:name ?name . { { ?person rdf:type ex:Adult } UNION { ?person ex:age ?age FILTER (?age > 17) } } }
  • 21.
    Sequence & modify ORDER BY to sort LIMIT result number OFFSET rank of first result
  • 22.
    example results 21to 40 ordered by name PREFIX ex: < http://inria.fr/schema# > SELECT ?person ?name WHERE { ?person rdf:type ex:Person ?person ex:name ?name . } ORDER BY ?name LIMIT 20 OFFSET 20
  • 23.
    UNBOUND test avariable is not bound ; used for negation as failure
  • 24.
    example persons whoare not known authors PREFIX ex: < http://inria.fr/schema# > SELECT ?name WHERE { ?person ex:name ?name . OPTIONAL { ?person ex:author ?x } FILTER ( ! bound(?x) ) }
  • 25.
    negation is trickyand errors can easily be made.
  • 26.
    ? does thisfind persons who do not know &quot;java&quot; ? PREFIX ex: < http://inria.fr/schema# > SELECT ?name WHERE { ?person ex:name ?name . ?person ex:knows ?x FILTER ( ?x != &quot;Java &quot; ) }
  • 27.
    NO! alsopersons who know something else ! PREFIX ex: < http://inria.fr/schema# > SELECT ?name WHERE { ?person ex:name ?name . ?person ex:knows ?x FILTER ( ?x != &quot;Java&quot; ) } fabien ex:knows &quot;Java&quot; fabien ex:knows &quot;C++&quot; fabien is a answer...
  • 28.
    YES! personswho are not known to know &quot;java&quot; ... negation of an option... PREFIX ex: < http://inria.fr/schema# > SELECT ?name WHERE { ?person ex:name ?name . OPTIONAL { ?person ex:knows ?x FILTER ( ?x = &quot;Java&quot; ) } FILTER ( ! bound(?x) ) }
  • 29.
    ASK to checkjust if there is at least one answer ; result is &quot;true&quot; or &quot;false&quot;
  • 30.
    example is therea person older than 17 ? PREFIX ex: < http://inria.fr/schema# > ASK { ?person ex:age ?age FILTER (?age > 17) }
  • 31.
    CONSTRUCT return aspecific RDF graph for each result
  • 32.
    example return instancesof adults for persons older than 17 PREFIX ex: < http://inria.fr/schema# > CONSTRUCT { ?person rdf:type ex:Adult } WHERE { ?person ex:age ?age FILTER (?age > 17) }
  • 33.
    SPARQL protocolsending queries and their results accross the web
  • 34.
    example with HTTPBinding GET /sparql/?query= <encoded query> HTTP/1.1 Host: www.inria.fr User-agent: my-sparql-client/0.1
  • 35.
    example with SOAPBinding <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <soapenv:Envelope xmlns:soapenv=&quot;http://www.w3.org/2003/05/soap-envelope/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; > <soapenv:Body> <query-request xmlns=&quot;http://www.w3.org/2005/09/sparql-protocol-types/#&quot; > <query>SELECT ?x ?p ?y WHERE {?x ?p ?y}</query> </query-request> </soapenv:Body> </soapenv:Envelope>
  • 36.
  • 37.
    SPARQL is... ...a query language ... ... a result format ... ... an access protocol ... ... for RDF
  • 38.
    SPARQL query languagebased on the triple model ?x ?p ?y filters to add constraints optional parts and alternative parts
  • 39.