SPARQL Examples

From info216

Lecture 3:SPARQL

The KG4News knowledge graph can be accessed here (namespace kb) (read-only). To test updates, you can run your own Blazegraph server or try the I2S sandbox.

Limit

SELECT ?p WHERE {
    ?s ?p ?o .
}
LIMIT 10

List distinct properties only (with limit)

SELECT DISTINCT ?p WHERE {
    ?s ?p ?o .
}
LIMIT 10

Limit with offset

SELECT DISTINCT ?p WHERE {
    ?s ?p ?o .
}
LIMIT 10 OFFSET 9

List rdf:types

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT DISTINCT ?t WHERE {
    ?s rdf:type ?t .
}
LIMIT 50

URI for Tim Berners-Lee

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT ?person WHERE {
    ?person foaf:name ?name .  
 
    FILTER(CONTAINS(?name, "Berners-Lee"))
}
LIMIT 10  # best to use limit if something goes wrong

Describe Tim Berners-Lee

DESCRIBE <http://i2s.uib.no/kg4news/author/1432678629>

DESCRIBE returns a new RDF graph, whereas SELECT returns a table of rows.

Papers that mention "Semantic Web" in the title

PREFIX ss: <http://semanticscholar.org/>

SELECT DISTINCT ?paper ?title WHERE {
    ?paper ss:title ?title .  
 
    FILTER(CONTAINS(STR(?title), "Semantic Web"))
}
LIMIT 50

Similar filter that ignores capitalisation (lower/upper case)

    FILTER(REGEX(STR(?title), "Semantic Web", "i"))

Authors sorted by name

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT DISTINCT * WHERE {
    ?author foaf:name ?name .  
}
ORDER BY ?name
LIMIT 10

Sorted by descending name

ORDER BY DESC(?name)

Count papers by author

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX ss: <http://semanticscholar.org/>

SELECT DISTINCT ?author (COUNT(?paper) AS ?count) WHERE {
    ?author rdf:type ss:Author .  
    ?paper  rdf:type ss:Paper ;
            dct:contributor ?author .
}
GROUP BY ?author
LIMIT 10

Only list the most prolific authors

<syntaxhighlight lang="SPARQL">
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX ss: <http://semanticscholar.org/>

SELECT DISTINCT ?author (COUNT(?paper) AS ?count) WHERE {
    ?author rdf:type ss:Author .  
    ?paper  rdf:type ss:Paper ;
            dct:contributor ?author .
}
GROUP BY ?author
HAVING (?count >= 10)  # similar to a filter expression
LIMIT 10               # include limit when you test

Order by descending paper count

SELECT ... {
    ...
}
GROUP BY ?person
HAVING (?count > 10)
ORDER BY DESC(?count)
LIMIT 10

Order by descending paper count and then by author name

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ss: <http://semanticscholar.org/>

SELECT DISTINCT ?person (SAMPLE(?name) AS ?name) (COUNT(?paper) AS ?count) WHERE {
    ?person rdf:type ss:Author ;
            foaf:name ?name .  
    ?paper  rdf:type ss:Paper ;
            ss:title ?title ;
            dct:contributor ?person .
}
GROUP BY ?person
HAVING (?count > 10)
ORDER BY DESC(?count)
LIMIT 10

Embedded Wikidata query

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

SELECT DISTINCT ?enname ?person ?wdperson WHERE {
    BIND("T. Berners-Lee"@en AS ?enname)

    SERVICE <https://query.wikidata.org/bigdata/namespace/wdq/sparql> {
        SELECT ?wdperson ?enname WHERE {
             ?wdperson skos:altLabel ?enname .
        }
        LIMIT 1
    }
            
    BIND(STR(?enname) AS ?name)  
    ?person foaf:name ?name .  

}
LIMIT 1

Limit

Limit

Limit

Limit