library(SPARQL)
specificDatatypes <- c("Trajectory", "Time Series", "Coverage")
endpoint <- "http://data.uni-muenster.de:8080/openrdf-sesame/repositories/loc4gds"
#endpoint <- "http://128.176.133.65:8081/parliament/sparql"
prefixes <- "
PREFIX geo:<http://www.opengis.net/ont/geosparql/1.0#>
PREFIX data:<http://ifgi.open-datasource-catalogue.de/resource/>
PREFIX my:<http://ifgi.data.de/resource/>
PREFIX dbpedia-owl:<http://dbpedia.org/ontology/>
PREFIX dbpedia-prop:<http://dbpedia.org/property/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dct:<http://purl.org/dc/terms/>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
PREFIX sf:<http://www.opengis.net/ont/sf#>
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX time:<http://www.w3.org/2006/time#> "
ns <- c('geo', '<http://www.opengis.net/ont/geosparql/1.0#>',
'data','<http://ifgi.open-datasource-catalogue.de/resource/>',
'my','<http://ifgi.data.de/resource/>',
'dbpedia-owl','<http://dbpedia.org/ontology/>',
'dbpedia-prop','<http://dbpedia.org/property/>',
'rdf','<http://www.w3.org/1999/02/22-rdf-syntax-ns#>',
'dct','<http://purl.org/dc/terms/>',
'xsd','<http://www.w3.org/2001/XMLSchema#>',
'sf','<http://www.opengis.net/ont/sf#>',
'dc','<http://purl.org/dc/elements/1.1/>',
'time','<http://www.w3.org/2006/time#>'
)
##########################################################
#01 - The user (client) queries for an specific theme (e.g. rainfall or temperature). Optionally, she includes the spatial, temporal or spatio-temporal extent of her desired data
#02 - The Broker responds with a set of datasets and their metadata (e.g spatio-temporal extent, and details such as who collected the data, when, how it was processed)
#03 - The user chooses a dataset and how she wants it (e.g. time series, trajectory, coverage)
#04 - The client queries the broker on the specific Dataset's DataSource and field description(position, extent, value)
#05 - The broker answers the client
#06 - The client:
# - uses the data to bind the DataSource
# - retrives the Dataset
# - builds the required type of object
#07 - The user lives happily ever after or she lives long and prosper
#08 - Olé!
##########################################################
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
##########################################################
#Get the datatsources
##########################################################
queryDataSources <- "SELECT DISTINCT
?datasourceType
?datasource
?datasourceName
?dataset
?host
?hostAlias
?hostAddress
?hostPort
?userName
?userPassword
?beginning
?end
?wkt
?storageField
WHERE {
?datasource <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://giv-lodum.uni-muenster.de/resource/fdd#DataSource> .
?datasource <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?datasourceType .
?datasource <http://giv-lodum.uni-muenster.de/resource/fdd#hasHost> ?host .
?host <http://giv-lodum.uni-muenster.de/resource/fdd#hasAlias> ?hostAlias .
?host <http://giv-lodum.uni-muenster.de/resource/fdd#hasAddress> ?hostAddress .
?host <http://giv-lodum.uni-muenster.de/resource/fdd#hasPort> ?hostPort .
?datasource <http://giv-lodum.uni-muenster.de/resource/fdd#hasDataSet> ?dataset .
?dataset <http://giv-lodum.uni-muenster.de/resource/fdd#hasExtent> ?temporalExtent .
OPTIONAL{
?temporalExtent <http://www.w3.org/2006/time#hasBeginning> ?instantBeginning .
?instantBeginning <http://www.w3.org/2006/time#inXSDDateTime> ?beginning .
?temporalExtent <http://www.w3.org/2006/time#hasEnd> ?instantEnd .
?instantEnd <http://www.w3.org/2006/time#inXSDDateTime> ?end .
}
?dataset <http://giv-lodum.uni-muenster.de/resource/fdd#hasExtent> ?spatialExtent .
OPTIONAL{
?spatialExtent <http://www.opengis.net/ont/geosparql/1.0#hasGeometry> ?geometry .
?geometry <http://www.opengis.net/ont/geosparql/1.0#asWKT> ?wkt .
}
?dataset <http://giv-lodum.uni-muenster.de/resource/fdd#hasPostition> ?position .
OPTIONAL{?position <http://giv-lodum.uni-muenster.de/resource/fdd#isStoredAt> ?storageField .}
OPTIONAL{?position <http://giv-lodum.uni-muenster.de/resource/fdd#xIsStoredAt> ?xStorageField .}
OPTIONAL{?position <http://giv-lodum.uni-muenster.de/resource/fdd#yIsStoredAt> ?yStorageField .}
OPTIONAL{?position <http://giv-lodum.uni-muenster.de/resource/fdd#zIsStoredAt> ?zStorageField .}
OPTIONAL{?position <http://giv-lodum.uni-muenster.de/resource/fdd#tIsStoredAt> ?tStorageField .}
?datasource <http://giv-lodum.uni-muenster.de/resource/fdd#hasName> ?datasourceName .
?datasource <http://giv-lodum.uni-muenster.de/resource/fdd#hasUser> ?user .
?user <http://giv-lodum.uni-muenster.de/resource/fdd#hasName> ?userName .
?user <http://giv-lodum.uni-muenster.de/resource/fdd#hasPassword> ?userPassword .
}"
##########################################################
#Get the datatsets
##########################################################
queryDataSets <- "SELECT ?pg ?sdb
WHERE{
?pg rdf:type data:PostGIS .
?sdb rdf:type data:SciDB
}"
##########################################################
#RUN THE QUERY
##########################################################
query <- paste(prefixes, " ", queryDataSources, " LIMIT 10 ")
qd <- SPARQL(url = endpoint, query = query, ns = ns)
df <- qd$results
df
query <- "PREFIX dgp1187: <http://data-gov.tw.rpi.edu/vocab/p/1187/>
SELECT ?ye ?fi ?ac
WHERE {
?s dgp1187:year ?ye .
?s dgp1187:fires ?fi .
?s dgp1187:acres ?ac .
}"
##############################################################################################################
############################################ Updating main query #############################################
##############################################################################################################
dataset <- "<http://ifgi.data.de/resource/DATA_SET_RAINFALL> "
date1 <- "2010-05-10T00:00:00Z"
date2 <- "2013-05-10T00:00:00Z"
query <- "SELECT * { ?s ?p ?o. }"
end <- which(strsplit(query, '')[[1]]=='}')
pos <- end[length(end)]-1
## Add spatial constraint
result <- paste(sep="",substr(query, 1, pos), " FILTER (xsd:dateTime(?beginning) >= \"", date1,"\"^^xsd:dateTime && xsd:dateTime(?end) <= \"",date2,"\"^^xsd:dateTime) ")
result <- paste(result,"}")
## Add dataset constraint
result <- paste(sep="",substr(query, 1, pos), "?datasource <http://giv-lodum.uni-muenster.de/resource/fdd#hasDataSet> ", dataset , " . ")
result <- paste(result,"}")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.