SPARQL Examples: Difference between revisions

From info216
No edit summary
(Blanked the page)
Tag: Blanking
 
(37 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== SPARQL Examples from Lecture 3: SPARQL==


The data are available in this Blazegraph triple store:
[http://sandbox.i2s.uib.no http://sandbox.i2s.uib.no] , but you may need to be inside the UiB network (or on VPN.)
===List properties===
SELECT DISTINCT ?p WHERE {
  ?s ?p ?o .
} LIMIT 100
===List types===
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?t WHERE {
  ?s rdf:type ?t .
} LIMIT 100
===List authors===
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?p WHERE {
  ?s rdf:type foaf:Person .
  ?s ?p ?o .
} LIMIT 100
===Prefixes used===
The examples below will assume that these are in place.
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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#>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ss: <http://semanticscholar.org/>
PREFIX kg: <http://i2s.uib.no/kg4news/>
PREFIX sp: <http://i2s.uib.no/kg4news/science-parse/>
PREFIX th: <http://i2s.uib.no/kg4news/theme/>
SELECT DISTINCT ?p WHERE {
  ?s rdf:type ss:Paper .
  ?s ?p ?o .
} LIMIT 100
===Explain all types and properties===
SELECT ?pt ?e WHERE {
  ?pt rdfs:comment ?e .
} LIMIT 100
===List main papers===
SELECT * WHERE {
 
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
 
}
Add this to show datatypes!
  BIND ( DATATYPE(?year) AS ?type )
Add this to only show years with the right type.
  FILTER ( DATATYPE(?year) = xsd:gYear )
===Group and count main papers by year===
SELECT ?year (COUNT(?paper) AS ?count) WHERE {
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
  FILTER ( DATATYPE(?year) = xsd:gYear )
}
GROUP BY ?year
Add this to order the results
ORDER BY ?year
Add this to order and only show years with more than 5 papers.
HAVING (?count > 5)
ORDER BY DESC(?count)
===Show papers===
SELECT ?paper ?year WHERE {
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
  FILTER ( DATATYPE(?year) = xsd:gYear )
}
Change last lines to show papers without an xsd:gYear too.
  OPTIONAL {
      ?paper dc:date ?year .
      FILTER ( DATATYPE(?year) = xsd:gYear )
  }
===Alternative values for variables===
SELECT ?p ?n ?year WHERE {
  ?p rdf:type kg:MainPaper .
  ?p dc:contributor ?a .
  ?a foaf:name ?n .
  ?p dc:date ?year .
  FILTER ( CONTAINS( ?n, ?str ) )
  FILTER ( CONTAINS( STR(?year), ?yr) )
 
  VALUES ?str { "Andreas" "David" }
  VALUES ?yr { "2020" "2019" }
}
===Property paths (composite properties)===
This query:
SELECT ?p ?n WHERE {
  ?p rdf:type kg:MainPaper .
  ?p dc:contributor ?c .
  ?c foaf:name ?n .
}
Can be simplified by eliminating ?c:
SELECT ?p ?n WHERE {
  ?p rdf:type kg:MainPaper .
  ?p dc:contributor / foaf:name ?n .
}
Can be further simplified by first reversing rdf:type:
SELECT ?p ?n WHERE {
  kg:MainPaper ^rdf:type ?p .
  ?p dc:contributor / foaf:name ?n .
}
...and the eliminating ?p:
SELECT ?n WHERE {
  kg:MainPaper ^rdf:type / dc:contributor / foaf:name ?n .
}
===Retrieve titles of papers that mention SPARQL===
Get papers with topics labelled "SPARQL":
SELECT ?t WHERE {
  ?t ^dc:title / dc:subject / skos:prefLabel "SPARQL" .
}
Some labels also go via a theme:
SELECT ?t WHERE {
  ?t ^dc:title / dc:subject / th:theme / skos:prefLabel "SPARQL" .
}
We can get both using a path with an optional element (the '?'):
SELECT ?t WHERE {
  ?t ^dc:title / dc:subject / th:theme? / skos:prefLabel "SPARQL" .
}
===Using an external SPARQL endpoint===
We limit to a single label to avoid time-outs and rate limitations:
SELECT ?a ?n ?r WHERE {
  ?a rdf:type ss:Topic .
  ?a skos:prefLabel ?n .
  FILTER ( ?n = "SPARQL" )
  BIND ( STRLANG( ?n, "en" ) AS ?n2 )
    SERVICE <https://dbpedia.org/sparql> {
    ?r rdfs:label ?n2 .
    }
} LIMIT 1
===Insert 4-digit years for all main papers===
Main papers that do not have an xsd:gYear:
SELECT * WHERE {
 
  ?p rdf:type kg:MainPaper .
  ?p dc:date ?d .
  FILTER ( DATATYPE(?d) = xsd:gYear )
 
}
Show the datatypes:
SELECT * WHERE {
 
  ?p rdf:type kg:MainPaper .
  ?p dc:date ?d .
  FILTER ( DATATYPE(?d) = xsd:dateTime )
  BIND ( year( ?d ) AS ?dt )
 
}
Insert 4-digit years:
INSERT { ?paper dc:date ?year }
WHERE {
 
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?date .
  FILTER( DATATYPE(?date) != xsd:gYear )
  BIND ( YEAR(?date) AS ?year )
 
}
(Actually, these years are xsd:integer- s, not quite xsd:gYear-s.)
== SPARQL Examples from Lecture 5: RDFS==
===Turn on inference!===
Make sure inference is on in your triple store, or that you compute closures if you run this in Python with rdflib and OWL-RL.
In '''Blazegraph''', create a new "Namespace" with the "Inference" box checked.
Remember to "Use" the new namespace.
In '''Python''', install the [https://owl-rl.readthedocs.io/en/latest/ OWL-RL package] (''pip install owlrl'').
Explicitly compute RDFS closure like this:
import owlrl.RDFSClosure
...
rdfs = owlrl.RDFSClosure.RDFS_Semantics(g, False, False, False)
rdfs.closure()
rdfs.flush_stored_triples()
===rdfs:subClassOf entailment===
Update:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX kg: <http://i2s.uib.no/kg4news/>
INSERT DATA {
    kg:TimBernersLee rdf:type kg:Author .
    kg:Author rdfs:subClassOf foaf:Person .
}
Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX kg: <http://i2s.uib.no/kg4news/>
ASK {
    kg:TimBernersLee rdf:type foaf:Person .
}
===rdfs:domain entailment===
Update:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dcterm: <http://purl.org/dc/terms/>
PREFIX kg: <http://i2s.uib.no/kg4news/>
INSERT DATA {
    kg:TimBernersLee rdf:type kg:Author .
    kg:TheSemanticWeb dcterm:contributor kg:TimBernersLee .
    dcterm:contributor rdfs:domain kg:Paper .
}
Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dcterm: <http://purl.org/dc/terms/>
PREFIX kg: <http://i2s.uib.no/kg4news/>
ASK {
    kg:TheSemanticWeb rdf:type kg:Paper .
}
==OWL Ontologies==
* Small: [[:File:small-kg4news-ontology.txt]]
* Full:  [[:File:kg4news-ontology.txt]]
You can
* view the ontologies online using [http://www.visualdataweb.de/webvowl/#file=small-kg4news-ontology.ttl WebVOWL] or
* download the [https://protege.stanford.edu/products.php#desktop-protege Protegé-OWL] ontology editor.

Latest revision as of 11:17, 10 January 2024