1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
library(DBI)
library(odbc)
virtuoso <- dbConnect(odbc::odbc(),
driver = "Virtuoso",
uid = "dba",
pwd = "dba",
host = "virtuoso",
port = "1111")
## It's alive!
virtuoso
## Bulk import -- fast!
dbGetQuery(virtuoso, "ld_dir('/var/data/', '*.nq', 'rdflib')" )
dbGetQuery(virtuoso, "rdf_loader_run()" )
## List all graphs -- look, we have one called 'rdflib' now!
dbGetQuery(virtuoso,
"SPARQL SELECT DISTINCT ?g WHERE { GRAPH ?g {?s ?p ?o} } ORDER BY ?g"
)
## Select FROM GRAPH
dbGetQuery(virtuoso, "SPARQL SELECT * FROM <rdflib> WHERE { {?s ?p ?o} } LIMIT 10")
dbGetQuery(virtuoso, "SPARQL SELECT * FROM <rdflib> WHERE { {?s <flights:dep_delay> ?o} } LIMIT 10")
## Wow, we can write standard tables into Virtuoso too...
#dbWriteTable(virtuoso, "iris", iris) # Dots not allowed in column names
dbWriteTable(virtuoso, "mtcars", mtcars)
dbListTables(virtuoso, table_name = "mt%")
dbReadTable(virtuoso, "mtcars")
## Clear graph <rdflib>
dbGetQuery(virtuoso, "SPARQL CLEAR GRAPH <rdflib>")
## Counting triples in each different graph...
q <- "SPARQL SELECT ?g ?s ?p ?o WHERE { GRAPH ?g {?s ?p ?o} }"
df <- dbGetQuery(virtuoso, q)
library(dplyr)
df %>% count(g)
#remotes::install_github("ropensci/rdflib")
library(rdflib)
library(nycflights13)
library(dplyr)
## prefix foreign keys
uri_flights <- flights %>%
mutate(tailnum = paste0("planes:", tailnum),
carrier = paste0("airlines:", carrier))
h <- here::here("data/rdflib/inst/extdata")
write_nquads(airlines, file.path(h, "airlines.nq"), key = "carrier", prefix = "airlines:")
write_nquads(planes, file.path(h, "planes.nq"), key = "tailnum", prefix = "planes:")
write_nquads(uri_flights, file.path(h, "uri_flights.nq"), prefix = "flights:")
## Bulk import -- fast!
dbGetQuery(virtuoso, "ld_dir('/var/data/', '*.nq', 'rdflib')" )
dbGetQuery(virtuoso, "rdf_loader_run()" )
remotes::install_github("ropensci/rdflib")
library(rdflib)
triplestore <- rdf(storage = "virtuoso",
user = "dba",
password = "dba",
host = "virtuoso:1111"
)
triplestore
#write_nquads(iris, "iris.nq", prefix = "iris")
#read_nquads("iris.nq", rdf = triplestore)
## Works!
triplestore
## We can query with rdflib too!
query <- "SELECT ?s ?p ?o WHERE {?s ?p ?o } LIMIT 10"
out <- rdf_query(triplestore, query)
rdf_free(triplestore)
|