Simple in-memory RDF datastore and RDF/Turtle parser/serialiser written in Yeti, without additional library dependencies
37945a273d0c — Chris Cannam default tip 4 years ago
Special case for exponent-missing test
11874b14d844 — Chris Cannam 4 years ago
Fix very peculiar issue with index initialisation, which led to partial indexing and collisions when inserting triples with two values in common. This caused a test to fail on a normal build, which definitely hadn't been the case before, so I'm a bit baffled by it
03a6ce198f7f — Chris Cannam 7 years ago
Make single-value property lookups use multi-value lookup and return the first value (so as to work even if a prior property e.g. has wrong type)


browse log



Simple RDF store and RDF/Turtle parser in Yeti

Yertle is a simple in-memory RDF datastore and RDF/Turtle
parser/serialiser written in Yeti (
without additional library dependencies.


Yertle aims to provide:

 * A 100% spec-compliant RDF/Turtle parser.

   This means the final W3C Turtle spec -- in my opinion the W3C have
   overcomplicated the Turtle language a bit since its submission, but
   a new implementation really has to follow the new spec.

 * An RDF/Turtle serialiser.

 * A simple single-graph datastore capable of doing reasonably quick
   indexed lookups (but not SPARQL queries) for use in programs with
   fairly simple RDF requirements.

 * Tolerable read/write performance -- aiming for within a factor of 5
   of current C implementations.

Current status

 * The parser passes all 159 current W3C spec tests at the time of
   writing, see:,

   There are also a few additional tests covering things not covered
   by the spec tests, see test/test_read.yeti.

 * The serialiser successfully serialises all of the test files (plus
   the odd additional test) such that they can be parsed in again.

 * The datastore can store and do indexed retrieval, but it has a
   very basic API.

To build and run the tests, just run the Yeti compiler (yc) on

This represents both the first time I've written any substantial sort
of parser, and my first attempt at significant data-processing using
Yeti. Having a go at these things was among the reasons I started
writing it. So it's unlikely to represent best practice in either.


Chris Cannam,
March 2013