Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

From SQL to SPARQL

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
SPARQL in a nutshell
SPARQL in a nutshell
Wird geladen in …3
×

Hier ansehen

1 von 31 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (20)

Anzeige

Ähnlich wie From SQL to SPARQL (20)

Aktuellste (20)

Anzeige

From SQL to SPARQL

  1. 1. SPARQL Query Language for RDF Cluj Semantic WEB meetup http://www.meetup.com/Cluj-Semantic-WEB/ presented by Dia MIRON 17 May 2011
  2. 2. Introduction - SPARQL <ul><li>SPARQL is a query language/engine for RDF graphs. </li></ul><ul><li>An RDF graph is a set of triples. A flexible and extensible way to represent information about WWW resources </li></ul><ul><li>A concept similar to SQL for data bases. A W3C standard query language to fetch data from distributed Semantic Web data models. </li></ul><ul><li>Can query a triple store or data on the Web (at a given URL). It provides facilities to: </li></ul><ul><ul><li>extract information in the form of URIs, blank nodes, plain and typed literals. </li></ul></ul><ul><ul><li>extract RDF subgraphs. </li></ul></ul><ul><ul><li>construct new RDF graphs based on information in the queried graphs </li></ul></ul>
  3. 3. SPARQL – a first example <ul><li>prefix sch-ont: <http://education.data.gov.uk/def/school/> </li></ul><ul><li>SELECT ?name WHERE { ?school a sch-ont:School; </li></ul><ul><li>sch-ont:establishmentName ?name; </li></ul><ul><li>sch-ont:districtAdministrative <http://statistics.data.gov.uk/id/local-authority-district/00AA> ; } </li></ul><ul><li>ORDER BY ?name </li></ul><ul><li>If executed on the UK government's Open Semantic Database , will return the names of all the schools in the UK in administrative district 00AA, and order the results in alphabetical order ( http://data.gov.uk/sparql ) </li></ul><ul><li>SPARQL Is Similar To SQL </li></ul><ul><ul><li>Like SQL, SPARQL selects data from the query data set by using a SELECT statement to determine which subset of the selected data is returned. Also, SPARQL uses a WHERE clause to define graph patterns to find a match for in the query data set. </li></ul></ul>
  4. 4. SPARQL General Form ORDER BY, DISTINCT etc (Modifiers) e.g. ORDER BY ?name WHERE (Query Triple Pattern) e.g. WHERE { ?planttype plant:planttype ?name } FROM (Data Set) e.g. FROM <http://www.linkeddatatools.com/plantsdata/plants.rdf> SELECT (Result Set) e.q. SELECT ?name PREFIX (Namespace Prefixes) e.g. PREFIX plant:<http://www.linkeddatatools.com/plants>
  5. 5. Data set Example: triple data containing a variety of shrubs and plants, and their family names
  6. 6. Select All Data <ul><li>PREFIX plants: <http://www.linkeddatatools.com/plants> </li></ul><ul><li>SELECT * WHERE </li></ul><ul><li>{ ?name plants:family ?family } </li></ul><ul><li>select all the plant URIs (subjects) and plant family names (literal-type objects) from the data above; </li></ul><ul><li>the wildcard '*' in SPARQL, similar to SQL, will return all the mapped data in the result set; </li></ul><ul><li>as we have stated two variables ?name and ?family, the query will return both these declared query variables in our result set, according to the subjects, predicates or objects they're mapped to; </li></ul>
  7. 7. And the results are… <ul><li>01. <?xml version=&quot;1.0&quot; ?> </li></ul><ul><li>02.<sparql xmlns=&quot;http://www.w3.org/2005/sparql-results#&quot; </li></ul><ul><li>03.        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;> </li></ul><ul><li>04.   <head> </li></ul><ul><li>05.      <variable name=&quot;name&quot;/> </li></ul><ul><li>06.      <variable name=&quot;family&quot;/> </li></ul><ul><li>07.   </head> </li></ul><ul><li>08.   <results> </li></ul><ul><li>09.      <result> </li></ul><ul><li>10.         <binding name=&quot;name&quot;> </li></ul><ul><li>11.            <uri>http://www.linkeddatatools.com/plants#magnolia</uri> </li></ul><ul><li>12.         </binding> </li></ul><ul><li>13.         <binding name=&quot;family&quot;> </li></ul><ul><li>14.            <literal>Magnoliaceae</literal> </li></ul><ul><li>15.         </binding> </li></ul><ul><li>16.      </result> </li></ul><ul><li>17.      <result> </li></ul><ul><li>18.         <binding name=&quot;name&quot;> </li></ul><ul><li>19.            <uri>http://www.linkeddatatools.com/plants#african_lilly</uri> </li></ul><ul><li>20.         </binding> </li></ul><ul><li>21.         <binding name=&quot;family&quot;> </li></ul><ul><li>22.            <literal>Liliaceae</literal> </li></ul><ul><li>23.         </binding> </li></ul><ul><li>24.      </result> </li></ul><ul><li>25.      <result> </li></ul><ul><li>26.         <binding name=&quot;name&quot;> </li></ul><ul><li>27.            <uri>http://www.linkeddatatools.com/plants#silvertop</uri> </li></ul><ul><li>28.         </binding> </li></ul>29.         <binding name=&quot;family&quot;> 30.            <literal>Aralianae</literal> 31.         </binding> 32.      </result> 33.      <result> 34.         <binding name=&quot;name&quot;> 35.            <uri>http://www.linkeddatatools.com/plants#velvetleaf</uri> 36.         </binding> 37.         <binding name=&quot;family&quot;> 38.            <literal>Malvaceae</literal> 39.         </binding> 40.      </result> 41.      <result> 42.         <binding name=&quot;name&quot;> 43.            <uri>http://www.linkeddatatools.com/plants#manglietia</uri> 44.         </binding> 45.         <binding name=&quot;family&quot;> 46.            <literal>Magnoliaceae</literal> 47.         </binding> 48.      </result> 49.   </results> 50.</sparql>
  8. 8. A more specific query <ul><li>1.PREFIX plants: <http://www.linkeddatatools.com/plants> </li></ul><ul><li>2.SELECT * WHERE </li></ul><ul><li>3.{ ?name plants:family &quot;Magnoliaceae“ } </li></ul><ul><li>----------------------------------------------------------------------------------------------------------------------- </li></ul><ul><li><?xml version=&quot;1.0&quot; ?> </li></ul><ul><li><sparql xmlns=&quot;http://www.w3.org/2005/sparql-results#&quot; </li></ul><ul><li> xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;> </li></ul><ul><li><head> </li></ul><ul><li><variable name=&quot;name&quot;/> </li></ul><ul><li></head> </li></ul><ul><li><results> </li></ul><ul><li><result> </li></ul><ul><li><binding name=&quot;name&quot;> </li></ul><ul><li> <uri>http://www.linkeddatatools.com/plants#magnolia</uri> </li></ul><ul><li></binding> </li></ul><ul><li></result> </li></ul><ul><li><result> </li></ul><ul><li><binding name=&quot;name&quot;> </li></ul><ul><li><uri>http://www.linkeddatatools.com/plants#manglietia</uri> </li></ul><ul><li></binding> </li></ul><ul><li></result> </li></ul><ul><li></results> </li></ul><ul><li></sparql> </li></ul>
  9. 9. What About CREATE, INSERT, UPDATE? <ul><li>at the moment, they are not implemented; </li></ul><ul><li>organizations publishing data in a queryable, public SPARQL endpoint will probably in most circumstances not just want anyone writing and making changes to their (valuable) data; </li></ul><ul><li>SPARUL (SPARQL/Update) and SPARQL+ are being developed to address this problem, however a solid contender to fill this gap in functionality is yet to arise, </li></ul>
  10. 10. Basic Graph Pattern - Multiple Matches Group Graph Pattern (set of graph patterns) also! Data Query Query Result PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { ?x foaf:name ?name . ?x foaf:mbox ?mbox } @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Johnny Lee Outlaw&quot; . _:a foaf:mbox <mailto:jlow@example.com> . _:b foaf:name &quot;Peter Goodguy&quot; . _:b foaf:mbox <mailto:peter@example.org> . <mailto:peter@example.org> &quot;Peter Goodguy&quot; <mailto:jlow@example.com> &quot;Johnny Lee Outlaw&quot; mbox name
  11. 11. Basic Graph Pattern - Blank Nodes Data Query Query Result PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?x ?name WHERE { ?x foaf:name ?name } @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Alice&quot; . _:b foaf:name &quot;Bob&quot; . “ Bob” _:d “ Alice“ _:c name x
  12. 12. Value Constraints Data Query Query Result PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> SELECT ?title ?price WHERE { ?x ns:price ?price . FILTER ?price < 30 . ?x dc:title ?title . } @prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix : <http://example.org/book/> . @prefix ns: <http://example.org/ns#> . :book1 dc:title &quot;SPARQL Tutorial&quot; . :book1 ns:price 42 . :book2 dc:title &quot;The Semantic Web&quot; . :book2 ns:price 23 . 23 &quot;The Semantic Web&quot; price title
  13. 13. Optional graph patterns Data Query Query Result PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> SELECT ?title ?price WHERE { ?x dc:title ?title . OPTIONAL { ?x ns:price ?price . FILTER ?price < 30 }} @prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix : <http://example.org/book/> . @prefix ns: <http://example.org/ns#> . :book1 dc:title &quot;SPARQL Tutorial&quot; . :book1 ns:price 42 . :book2 dc:title &quot;The Semantic Web&quot; . :book2 ns:price 23 . “ SPARQL Tutorial“ 23 &quot;The Semantic Web&quot; price title
  14. 14. Multiple Optional Blocks Data Query Query Result PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox ?hpage WHERE { ?x foaf:name ?name . OPTIONAL { ?x foaf:mbox ?mbox }. OPTIONAL { ?x foaf:homepage ?hpage } } @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:a foaf:name &quot;Alice&quot; . _:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name &quot;Bob&quot; . _:b foaf:mbox <mailto:bob@work.example> . <mailto:bob@example.com> “ Bob“ <http://work.example.org/alice/> “ Alice“ hpage Mbox name
  15. 15. Alternative Graph Patterns Data Query Query Result PREFIX dc10: <http://purl.org/dc/elements/1.0/> PREFIX dc11: <http://purl.org/dc/elements/1.1/> SELECT ?x ?y WHERE { { ?book dc10:title ?x } UNION { ?book dc11:title ?y } } @prefix dc10: <http://purl.org/dc/elements/1.0/> . @prefix dc11: <http://purl.org/dc/elements/1.1/> . _:a dc10:title &quot;SPARQL Query Language Tutorial&quot; . _:b dc11:title &quot;SPARQL Protocol Tutorial&quot; . _:c dc10:title &quot;SPARQL&quot; . _:c dc11:title &quot;SPARQL (updated)&quot; . y x &quot;SPARQL (updated)&quot; &quot;SPARQL Query Language Tutorial&quot; &quot;SPARQL&quot; &quot;SPARQL Protocol Tutorial&quot;
  16. 16. RDF Dataset <ul><li>RDF data stores may hold multiple RDF graphs: </li></ul><ul><ul><li>record information about each graph </li></ul></ul><ul><ul><li>queries that involve information from more than one graph </li></ul></ul><ul><ul><li>RDF Dataset in SPARQL terminology </li></ul></ul><ul><ul><li>the background graph, which does not have a name, and zero or more named graphs, identified by URI reference </li></ul></ul><ul><li>the relationship between named and background graphs: </li></ul><ul><ul><li>(i) to have information in the background graph that includes provenance information about the named graphs (the application is not directly trusting the information in the named graphs ) </li></ul></ul><ul><ul><li>(ii) to include the information in the named graphs in the background graph as well. </li></ul></ul>
  17. 17. RDF Dataset- T he Relationship between Named and Background Graphs (I) # Background graph @prefix dc: <http://purl.org/dc/elements/1.1/> . <http://example.org/bob> dc:publisher &quot;Bob&quot; . <http://example.org/alice> dc:publisher &quot;Alice&quot; . # Graph: http://example.org/bob @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Bob&quot; . _:a foaf:mbox <mailto:bob@oldcorp.example.org> . # Graph: http://example.org/alice @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Alice&quot; . _:a foaf:mbox <mailto:alice@work.example.org> .
  18. 18. RDF Dataset- T he Relationship between Named and Background Graphs (II) # Background graph @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:x foaf:name &quot;Bob&quot; . _:x foaf:mbox <mailto:bob@oldcorp.example.org> . _:y foaf:name &quot;Alice&quot; . _:y foaf:mbox <mailto:alice@work.example.org> . # Graph: http://example.org/bob @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Bob&quot; . _:a foaf:mbox <mailto:bob@oldcorp.example.org> . # Graph: http://example.org/alice @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Alice&quot; . _:a foaf:mbox <mailto:alice@work.example.org> .
  19. 19. Querying the Dataset # Graph: http://example.org/foaf/aliceFoaf @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:a foaf:name &quot;Alice&quot; . _:a foaf:mbox <mailto:alice@work.example> . _:a foaf:knows _:b . _:b rdfs:seeAlso <http://example.org/foaf/bobFoaf> . <http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument . _:b foaf:name &quot;Bob&quot; . _:b foaf:mbox <mailto:bob@work.example> . _:b foaf:age 32 . # Graph: http://example.org/foaf/bobFoaf @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:1 foaf:mbox <mailto:bob@work.example> . _:1 rdfs:seeAlso <http://example.org/foaf/bobFoaf> . _:1 foaf:age 35 . <http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument .
  20. 20. Querying the Dataset - Accessing Graph Labels PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?src ?bobAge WHERE { GRAPH ?src { ?x foaf:mbox <mailto:bob@work.example> . ?x foaf:age ?bobAge } } 35 <http://example.org/foaf/bobFoaf> 32 <http://example.org/foaf/aliceFoaf> bobAge src
  21. 21. Querying the Dataset - Restricting by Graph Label PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX data: <http://example.org/foaf/> SELECT ?age WHERE { GRAPH data:bobFoaf { ?x foaf:mbox <mailto:bob@work.example> . ?x foaf:age ?age } } 35 age
  22. 22. Querying the Dataset - Restricting via Query Pattern PREFIX data: <http://example.org/foaf/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?mbox ?age ?ppd WHERE { GRAPH data:aliceFoaf { ?alice foaf:mbox <mailto:alice@work.example> ; foaf:knows ?whom . ?whom foaf:mbox ?mbox ; rdfs:seeAlso ?ppd . ?ppd a foaf:PersonalProfileDocument . } . GRAPH ?ppd { ?w foaf:mbox ?mbox ; foaf:age ?age } } <http://example.org/foaf/bobFoaf> 35 <mailto:bob@work.example> ppd age mbox
  23. 23. Query Execution and Ordering <ul><li>Optional-1 : an optional pattern that has a common variable with a(more) basic graph pattern(s) must be executed after the basic graph pattern(s) </li></ul><ul><li>Optional-2 : there can't be two optionals with a common variable, if that variable does not occur in a basic graph pattern as well </li></ul><ul><li>Constraint : constraints are evaluated after variables are assigned values </li></ul>
  24. 24. Query forms: <ul><ul><li>SELECT </li></ul></ul><ul><ul><ul><li>returns all, or a subset of the variables bound in a query pattern match </li></ul></ul></ul><ul><ul><ul><li>formats : XML or RDF/XML </li></ul></ul></ul><ul><ul><li>CONSTRUCT </li></ul></ul><ul><ul><ul><li>returns an RDF graph constructed by substituting variables in a set of triple templates </li></ul></ul></ul><ul><ul><li>DESCRIBE </li></ul></ul><ul><ul><ul><li>returns an RDF graph that describes the resources found. </li></ul></ul></ul><ul><ul><li>ASK </li></ul></ul><ul><ul><ul><li>returns whether a query pattern matches or not. </li></ul></ul></ul>
  25. 25. CONSTRUCT Examples(I) PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> CONSTRUCT { <http://example.org/person#Alice> vcard:FN ?name } WHERE { ?x foaf:name ?name } @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Alice&quot; . _:a foaf:mbox <mailto:alice@example.org> . @prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>. <http://example.org/person#Alice> vcard:FN &quot;Alice&quot; . #extracting a whole graph from the target RDF dataset CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <http://example.org/myGraph> { ?s ?p ?o } . }
  26. 26. CONSTRUCT Examples(II) accesing a graph conditional on other information contained in the metadata about named graphs in the dataset PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX app: <http://example.org/ns#> CONSTRUCT { ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p ?o } . { ?g dc:publisher <http://www.w3.org/> } . { ?g dc:date ?date } . FILTER app:myDate(?date) > &quot;2005-02-8T00:00:00Z&quot;^^xsd:dateTime. }
  27. 27. DESCRIBE PREFIX ent: <http://myorg.example/employees#> DESCRIBE ?x WHERE { ?x ent:employeeId &quot;1234&quot; } @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0> . @prefix myOrg: <http://myorg.example/employees#> . _:a myOrg:employeeId &quot;1234&quot; ; foaf:mbox_sha1sum &quot;ABCD1234&quot; ; vcard:N [ vcard:Family &quot;Smith&quot; ; vcard:Given &quot;John&quot; ] . foaf:mbox_sha1sum rdf:type owl:InverseFunctionalProperty .
  28. 28. ASK @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . _:a foaf:name &quot;Alice&quot; . _:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name &quot;Bob&quot; . _:b foaf:mbox <mailto:bob@work.example> . PREFIX foaf: <http://xmlns.com/foaf/0.1/> ASK { ?x foaf:name &quot;Alice&quot; } .
  29. 29. Testing Values <ul><li>Named functions and syntactically constructed operations: </li></ul><ul><ul><li>operands: subset of XML Schema DataTypes {xsd:string, xsd:decimal, xsd:double, xsd:dateTime} and types derived from xsd:decimal. </li></ul></ul><ul><li>Subset of XPath functions and operators </li></ul><ul><ul><li>Operands: xs:string, xs:double, xs:float, xs:decimal, xs:integer, </li></ul></ul><ul><ul><li>xs:dateTime </li></ul></ul><ul><ul><li>additional operators: sop:RDFterm-equal, sop:bound , sop:isURI, sop:isBlank, sop:isLiteral, sop:str , sop:lang, sop:datatype, sop:logical-or, sop:logical-and </li></ul></ul><ul><li>Type Promotion : xs:double, xs:float, xs:decimal </li></ul><ul><ul><li>each of the numeric types is promoted to any type higher in the above list when used as an argument to function expecting that higher type. </li></ul></ul>
  30. 30. Support for SPARQL <ul><li>SPARQL and Jena </li></ul><ul><ul><li>module called ARQ that implements SPARQL; also parses queries expressed in RDQL or its own internal language. </li></ul></ul><ul><ul><li>not yet part of the standard Jena distribution; availbale from either Jena‘s CVS repository or as a self-contained download </li></ul></ul><ul><li>Twinkle </li></ul><ul><ul><li>simple Java interface that wraps the ARQ SPARQL Processor library (the add-on to Jena). </li></ul></ul><ul><li>Redland </li></ul><ul><ul><li>set of free software packages that provide support for RDF, including querying with RDQL and SPARQL using the Rasqal RDF Query Library. . </li></ul></ul>
  31. 31. Contact <ul><li>Romania </li></ul><ul><li>Dia Miron – Recognos Romania </li></ul><ul><li>Email: [email_address] </li></ul><ul><li>www.recognos.ro </li></ul><ul><li>USA </li></ul><ul><li>George Roth – Recognos USA </li></ul><ul><li>Email: [email_address] </li></ul><ul><li>www.recognos.com </li></ul>

×