The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

redland: create, query and write RDF graphs

Peter Slaughter

2024-02-23

Introduction

The redland R package provides methods to create, query and write to disk data stored in the Resource Description Framework (RDF). RDF provides a standardized way to make statements about resources and the relationships between them. Typical resources include datasets that are available via URLs. Resources don’t have to be available online, for example a resource could also be the name of the person that created a dataset. A collection of RDF statements comprise an RDF graph, which can be read and interpreted by an RDF capable software application that uses the resources described in the graph.

An introduction to RDF can be found at https://www.w3.org/TR/2014/NOTE-rdf11-primer-20140624/.

Examples

The following example reads an RDF graph from a disk file that was previously saved in the RDF/XML format:

library(redland)
world <- new("World")
storage <- new("Storage", world, "hashes", name="", options="hash-type='memory'")
model <- new("Model", world=world, storage, options="")
parser <- new("Parser", world)
parseFileIntoModel(parser, world, system.file("extdata", "dc.rdf", package="redland"), model)

Next the RDF graph is queried for statements of interest, using the SPARQL query syntax

queryString <- 'PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?a ?c WHERE { ?a dc:creator ?c . }'
query <- new("Query", world, queryString, base_uri=NULL, query_language="sparql", query_uri=NULL)
queryResult <- executeQuery(query, model)
results <- getResults(query, model, "rdfxml")

cat(sprintf("Results from query: %s\n", results))
## Results from query: <?xml version="1.0" encoding="utf-8"?>
## <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
##    xmlns:rs="http://www.w3.org/2001/sw/DataAccess/tests/result-set#">
##   <rs:ResultSet>
##     <rs:resultVariable>a</rs:resultVariable>
##     <rs:resultVariable>c</rs:resultVariable>
##     <rs:solution>
##       <rdf:Description>
##         <rs:binding>
##           <rdf:Description>
##             <rs:value rdf:resource="http://www.dajobe.org/"/>
##             <rs:variable>a</rs:variable>
##           </rdf:Description>
##         </rs:binding>
##         <rs:binding>
##           <rdf:Description>
##             <rs:value>Dave Beckett</rs:value>
##             <rs:variable>c</rs:variable>
##           </rdf:Description>
##         </rs:binding>
##       </rdf:Description>
##     </rs:solution>
##   </rs:ResultSet>
## </rdf:RDF>

Next, additional statements can be added to the RDF graph:

stmt <- new("Statement", world=world, 
        subject="http://www.dajobe.org/",
        predicate="http://purl.org/dc/elements/1.1/language",
        object="en")
addStatement(model, stmt)
## [1] 0

Now the RDF graph can be written to disk:

serializer <- new("Serializer", world, mimeType="application/rdf+xml")
status <- setNameSpace(serializer, world, namespace="http://purl.org/dc/elements/1.1/", prefix="dc")  
filePath <- tempfile(pattern = "file", tmpdir = tempdir(), fileext = ".rdf")
status <- serializeToFile(serializer, world, model, filePath)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.