testthat::context("SPARQL Queries")
doc <- system.file("extdata/example.rdf", package="redland")
out <- "testing.rdf"
testthat::test_that("we can make CONSTRUCT queries", {
testthat::skip("No test for SPARQL CONSTRUCT")
## No errors but no return either, not sure
## what the correct construction is.
## currently registers as a skipped test.
rdf <- rdf()
rdf_add(rdf,
"http://carlboettiger.info",
"http://schema.org/name",
"Carl Boettiger")
sparql <- 'CONSTRUCT { ?x ?p ?o . }
WHERE { ?x ?p ?o . }'
rdf_query(rdf, sparql, data.frame = FALSE)
rdf_free(rdf)
})
testthat::test_that("we can make sparql queries", {
sparql <-
'PREFIX dc:
SELECT ?a ?c
WHERE { ?a dc:creator ?c . }'
rdf <- rdf_parse(doc)
match <- rdf_query(rdf, sparql)
testthat::expect_length(match, 2)
rdf_free(rdf)
})
testthat::test_that("SPARQL handles data types", {
rdf <- rdf()
rdf_add(rdf, "", "ex:integer", 33L)
rdf_add(rdf, "", "ex:decimal", 3.141)
rdf_add(rdf, "", "ex:decimal", 2.718)
rdf_add(rdf, "", "ex:logical", TRUE)
rdf_add(rdf, "", "ex:Date", Sys.Date())
rdf_add(rdf, "", "ex:POSIXct", Sys.time())
rdf_add(rdf, "", "ex:factor", as.factor("text"))
rdf_add(rdf, "", "ex:string", "text")
## Select ?s as well to avoid silly warning
testthat::expect_is(rdf, "rdf")
match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
testthat::expect_type(match$o[[1]], "double")
testthat::expect_is(match$o[[1]], "Date")
match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
testthat::expect_is(match$o[[1]], "POSIXct")
testthat::expect_type(match$o[[1]], "double")
match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
testthat::expect_is(match$o[[1]], "numeric")
testthat::expect_type(match$o[[1]], "double")
## readr fails to detect "true" as a logical
#match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
#testthat::expect_is(match$o[[1]], "logical")
#testthat::expect_type(match$o[[1]], "logical")
match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
testthat::expect_is(match$o[[1]], "numeric")
testthat::expect_type(match$o[[1]], "double")
match <- rdf_query(rdf, 'SELECT ?o ?s WHERE { ?s ?o }')
testthat::expect_is(match$o[[1]], "character")
testthat::expect_type(match$o[[1]], "character")
## Matching mixed type results in all types treated as character
# vector, since o is a single column....
match <- rdf_query(rdf, 'SELECT ?s ?p ?o WHERE { ?s ?p ?o }')
testthat::expect_is(match$o, "character")
testthat::expect_is(match, "data.frame")
rdf_free(rdf)
})
unlink(out)