Difference between revisions of "SPARQL Examples"

From Info216
Line 54: Line 54:
 
===Explain all types and properties===
 
===Explain all types and properties===
  
SELECT ?pt ?e WHERE {
+
SELECT ?pt ?e WHERE {
  ?pt rdfs:comment ?e .
+
  ?pt rdfs:comment ?e .
} LIMIT 100
+
} LIMIT 100
  
 
===List main papers===
 
===List main papers===
  
SELECT * WHERE {
+
SELECT * WHERE {
+
 
  ?paper rdf:type kg:MainPaper .
+
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
+
  ?paper dc:date ?year .
   
+
 
}
+
  }
  
 
Add this to show datatypes!
 
Add this to show datatypes!
  BIND ( DATATYPE(?year) AS ?type )
+
  BIND ( DATATYPE(?year) AS ?type )
  
 
Add this to only show years with the right type.
 
Add this to only show years with the right type.
  FILTER ( DATATYPE(?year) = xsd:gYear )
+
  FILTER ( DATATYPE(?year) = xsd:gYear )
  
 
===Group and count main papers by year===
 
===Group and count main papers by year===
  
SELECT ?year (COUNT(?paper) AS ?count) WHERE {
+
SELECT ?year (COUNT(?paper) AS ?count) WHERE {
 
   
 
   
  ?paper rdf:type kg:MainPaper .
+
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
+
  ?paper dc:date ?year .
  FILTER ( DATATYPE(?year) = xsd:gYear )
+
  FILTER ( DATATYPE(?year) = xsd:gYear )
 
   
 
   
}
+
}
GROUP BY ?year
+
GROUP BY ?year
  
 
Add this to order the results
 
Add this to order the results
ORDER BY ?year
+
ORDER BY ?year
  
 
Add this to order and only show years with more than 5 papers.
 
Add this to order and only show years with more than 5 papers.
HAVING (?count > 5)
+
HAVING (?count > 5)
ORDER BY DESC(?count)
+
ORDER BY DESC(?count)
  
 
===Show papers  
 
===Show papers  
  
SELECT ?paper ?year WHERE {
+
SELECT ?paper ?year WHERE {
 
   
 
   
  ?paper rdf:type kg:MainPaper .
+
  ?paper rdf:type kg:MainPaper .
  ?paper dc:date ?year .
+
  ?paper dc:date ?year .
  FILTER ( DATATYPE(?year) = xsd:gYear )
+
  FILTER ( DATATYPE(?year) = xsd:gYear )
 
   
 
   
}
+
}
  
  OPTIONAL {
+
Change last lines to show papers without an xsd:gYear too.
      ?paper dc:date ?year .
+
  OPTIONAL {
      FILTER ( DATATYPE(?year) = xsd:gYear )
+
      ?paper dc:date ?year .
  }
+
      FILTER ( DATATYPE(?year) = xsd:gYear )
 +
  }
  
 
*** VALUES
 
*** VALUES

Revision as of 10:20, 1 February 2021

SPARQL Examples from Lecture 03

The data are available in this Blazegraph triple store: [1] .

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

Prefrixes 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 )
  }
      • VALUES

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 PATH

SELECT ?p ?n WHERE {

 ?p rdf:type kg:MainPaper .
 ?p dc:contributor / foaf:name ?n .

}

SELECT ?p ?n WHERE {

 kg:MainPaper ^rdf:type ?p .
 ?p dc:contributor / foaf:name ?n .

}

SELECT ?n WHERE {

 kg:MainPaper ^rdf:type / dc:contributor / foaf:name ?n .

}


SELECT ?t WHERE {

 ?t ^dc:title / dc:subject / skos:prefLabel "SPARQL" .

}

SELECT ?t WHERE {

 ?t ^dc:title / dc:subject / th:theme / skos:prefLabel "SPARQL" .

}

SELECT ?t WHERE {

 ?t ^dc:title / dc:subject / th:theme? / skos:prefLabel "SPARQL" .

}

--

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

--

SELECT * WHERE {

 ?p rdf:type kg:MainPaper .
 ?p dc:date ?d .
 FILTER ( DATATYPE(?d) = xsd:gYear )

}

--

SELECT * WHERE {

 ?p rdf:type kg:MainPaper .
 ?p dc:date ?d .
 FILTER ( DATATYPE(?d) = xsd:dateTime )
 BIND ( year( ?d ) AS ?dt )

}