Experience using Java-based frameworks for RDF-to-POJO (and vice versa) mapping

I know there have been several similar discussions on this topic, but my idea was to try to gather not just pure references to relevant projects, but the real-world EXPERIENCE using different state-of-the-art Java libraries for RDF to POJO mapping and manipulating those data. So, I'm asking you: what was your experience using and developing with following frameworks (please update the list if something is missing)?

I think important factor should be that the project is still under development, so I didn't include a project which has the last commit over one year old. Also, good documentation should be taken into account.

I have been working on something very similar for Groovy (which is essentially Java):


Essentially this binds POGO's to a Jena model. Some of the things it covers include:

  1. binding properties in a class to more than one term in a vocabulary
  2. binding at event change time (using a meta class with a property change listener), then enabling a developer to operate both on the object and the underlying RDF model.
  3. Providing a framework and convention to enable more advanced binding i.e when a domain class does not align naturally with vocabulary.
  4. Association with other RDF POGO's

Aside from the binding mechanisms, it also includes persistence (CRUD) operations based on a jdbc driver for SPARQL:


What it definitely doesn't do is reverse engineer an ontology into a class package, something I would approach with caution, but might be a approach you would consider adding to your list (see Jastor below)


We use Alibaba in the OpenSahara framework. We only use it as a mapping from Triples to Pojo's, which is easy with annotations, e.g.:

public interface NamedEntity extends Labeled {
    XMLGregorianCalendar getDateCreated();

    void setDateCreated(XMLGregorianCalendar date);

    Set<String> getLookupNames();

    void setLookupNames(Set<String> text);

Issues: data in the triple store must conform to the annotations, or you will get RuntimeExceptions (e.g. if the value is declared as being a date, but is not, or if there are multiple values, but the mapping is to just one element).