SPARQL Examples: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
This page will be updated with SPARQL examples as the course progresses. | This page will be updated with SPARQL examples as the course progresses. | ||
== SPARQL Examples from Session 3: SPARQL== | == SPARQL Examples from Session 3: SPARQL== | ||
Revision as of 19:55, 14 February 2022
This page will be updated with SPARQL examples as the course progresses.
SPARQL Examples from Session 3: SPARQL
The data are available in this Blazegraph triple store: 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/>
PREFIX ex: <http://example.org/> PREFIX xml: <http://www.w3.org/XML/1998/namespace> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
select all triplets in graph
SELECT ?s ?p ?o WHERE {
?s ?p ?o .
}
select the interestes of Cade
SELECT ?cadeInterest WHERE {
ex:Cade ex:interest ?cadeInterest .
}
select the country and city where Emma lives
SELECT ?emmaCity ?emmaCountry WHERE {
ex:Emma ex:address ?address . ?address ex:city ?emmaCity . ?address ex:country ?emmaCountry .
}
select the people who are over 26 years old
SELECT ?person ?age WHERE {
?person ex:age ?age . FILTER(?age > 26) .
}
select people who graduated with Bachelor
SELECT ?person ?degree WHERE {
?person ex:degree ?degree .
?degree ex:degreeLevel "Bachelor" .
}
delete cades photography interest
DELETE DATA {
ex:Cade ex:interest ex:Photography .
}
delete and insert university of valencia
DELETE { ?s ?p ex:University_of_Valencia } INSERT { ?s ?p ex:Universidad_de_Valencia } WHERE { ?s ?p ex:University_of_Valencia }
check if the deletion worked
SELECT ?s ?o2 WHERE {
?s ex:degree ?o .
?o ex:degreeSource ?o2 .
}
insert Sergio
INSERT DATA {
ex:Sergio a foaf:Person ;
ex:address [ a ex:Address ;
ex:city ex:Valenciay ;
ex:country ex:Spain ;
ex:postalCode "46021"^^xsd:string ;
ex:state ex:California ;
ex:street "4_Carrer_del_Serpis"^^xsd:string ] ;
ex:degree [ ex:degreeField ex:Computer_science ;
ex:degreeLevel "Master"^^xsd:string ;
ex:degreeSource ex:University_of_Valencia ;
ex:year "2008"^^xsd:gYear ] ;
ex:expertise ex:Big_data,
ex:Semantic_technologies,
ex:Machine_learning;
foaf:name "Sergio_Pastor"^^xsd:string .
}
describe Sergio
DESCRIBE ex:Sergio ?o WHERE {
ex:Sergio ?p ?o . ?o ?p2 ?o2 . }
construct that any city is in the country in an address
CONSTRUCT {?city ex:locatedIn ?country} Where {
?s rdf:type ex:Address .
?s ex:city ?city .
?s ex:country ?country.
}
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 Session 7: 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 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
The following files contain an ontology for the knowledge graph used in this page:
- Small: File:small-kg4news-ontology.txt
- Full: File:kg4news-ontology.txt
Rename them from '.txt.' to '.ttl' after you download them.
You can
- view the ontologies online using WebVOWL or
- download the Protegé-OWL ontology editor.
-->
