Banana RDF
Clone or download
bblfish Merge pull request #303 from ovstetun/prefix_ttl_output
Add option to print RDF with prefixes applied in the turtle output.
Latest commit ca0ba9a Jun 14, 2018
Permalink
Failed to load latest commit information.
jena/src Merge pull request #303 from ovstetun/prefix_ttl_output Jun 14, 2018
jsonld.js/src Revert "add trait RDFLoader, using both content negotiation or URI ex… Oct 21, 2017
ldpatch/src Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
misc Change writers to use a Set for prefixes instead of varargs. Jan 3, 2018
ntriples/shared/src/main/scala/org/w3/banana/io Change writers to use a Set for prefixes instead of varargs. Jan 3, 2018
plantain Change writers to use a Set for prefixes instead of varargs. Jan 3, 2018
project ammonite bug was fixed. Return to dependency of apache-jena-libs Oct 23, 2017
rdf-test-suite Merge pull request #303 from ovstetun/prefix_ttl_output Jun 14, 2018
rdf Merge pull request #303 from ovstetun/prefix_ttl_output Jun 14, 2018
sesame/src Extract common test for prefixes. Jan 3, 2018
.gitignore Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
.history git ignores .history Jun 23, 2014
.travis-jvmopts Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
.travis.yml Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
CONTRIBUTING.md Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
README.md publish release 0.8.4 Jul 15, 2017
build.sbt Removed "-Xfatal-warnings" from sbt file, to stop it from failing on … Nov 7, 2017
scalastyle-config.xml Add trait RDFLoader, an RDF loader that uses both content negotiation… Feb 12, 2017
version.sbt upgrade Jena 3.1.1 & change maven for Ammonite bug Jul 18, 2017

README.md

banana-rdf

Build Status Gitter

The current published version 0.8.4 for scala 2.12 is to be found on the http://bblfish.net/work/repo/releases repository.

val banana = (name: String) => "org.w3" %% name % "0.8.4" excludeAll (ExclusionRule(organization = "org.scala-stm"))

//add the bblfish-snapshots repository to the resolvers

resolvers += "bblfish-snapshots" at "http://bblfish.net/work/repo/releases"

//choose the packages you need for your dependencies
val bananaDeps = Seq("banana", "banana-rdf", "banana-sesame").map(banana)

An RDF library in Scala

banana-rdf is a library for RDF, SPARQL and Linked Data technologies in Scala.

It can be used with existing libraries without any added cost. There is no wrapping involved: you manipulate directly the real objects. We currently support Jena, Sesame and Plantain, a pure Scala implementation.

Features

banana-rdf emphasizes type-safety and immutability, so it can come with some cost when the underlying implementation is very mutable (I'm looking at you, Jena and Sesame). We try to keep a clear distinction between the core concepts and the enhanced syntax that Scala can give us.

RDF itself is defined as a record of types. Implementations just have to plug their own types. And because types alone are not enough, we introduce the RDFOps typeclass, which defines the mandatory operations that an RDF implementation must implement. SparqlOps does the same for SPARQL.

With banana-rdf, you get Diesel, a nice DSL to build and navigate within pointed graphs (graphs with a pointer to an inner node). You also get an abstraction for graph stores (GraphStore), which do not have to be SPARQL engines (SparqlEngine). Of course, you can serialize and deserialize most of the RDF syntaxes as well as JSON-LD (RDFa will come soon).

banana-rdf introduces the concept of binders, which let you bridge the Scala and RDF worlds. Most of the common datastructures are already available, and you can even map your own classes. Unlike usual ORM techniques, this does not rely on annotation or reflection.

Until we write thorough documentation, the best place to understand what you can do is to go through the test suite.

How to start geeking

To get going with banana-rdf and get a feel for how to use it the easiest and fastest way may well be to use it directly in the Ammonite shell as explained in the Scripting with Ammonite wiki page.

It always helps to have the code available, as there are a lot of useful examples in the test suite. You only need a recent version of Java, that's all:

$ git clone git@github.com:w3c/banana-rdf.git
$ cd banana-rdf
$ sbt

It's also easy to just build specific target platforms:

$ sbt +banana_js/test    # for javascript only 
$ sbt +banana_jvm/test   # for jvm only

( note: scala-js compilation uses more memory. see travis.yml )

IDE Setup

banana-rdf works with both eclipse and IntelliJ IDEA.

global.sbt

Independent of your preferred IDE, optionally the add the following line to ~/.sbt/0.13/global.sbt to prevent the generation of empty source directories:

    unmanagedSourceDirectories in Compile ~= { _.filter(_.exists) }

Eclipse

Eclipse should work "out of the box" with the addition of the following global settings:

In ~/.sbt/0.13/global.sbt:

    unmanagedSourceDirectories in Compile ~= { _.filter(_.exists) }

In ~/.sbt/0.13/plugins/build.sbt

    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")

To generate eclipse project files, just run the command:

$ sbt eclipse

IntelliJ IDEA

IntelliJ IDEA works out of the box since 2016.

Community

For discussions that don't fit in the issues tracker, you may try either

Code of Conduct

Banana-RDF contributors all agree to follow the W3C Code of Ethics and Professional Conduct.

If you want to take action, feel free to contact Alexandre Bertails alexandre@bertails.org. You can also contact W3C Staff as explained in W3C Procedures.

Licence

This source code is made available under the W3C Licence. This is a business friendly license.