Skip to content
Revision Management for the Semantic Web
Branch: master
Clone or download
Pull request Compare This branch is 1078 commits behind plt-tud:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


R43ples (Revision for triples) is Revision Management Tool for the Semantic Web.

It is based on storing the differences of revisions of graphs in additional Named Graphs which are then referenced in a revision graph.

Build Status Coverity Scan Build Status

This project provides a service for revision management of named graphs in a triple store. The service can be interconnected in front of an existing SPARQL endpoint of a Triple Store. This service in the associated Triple Store creates and manages a revision management of graphs. It provides a SPARQL endpoint where all queries have to be directed to. The SPARQL query defines whether only a revision is queried, or a new revision needs to be created. Furthermore, the service provides an interface for revision management and the import or export of data from the Computer Aided Engineering tools.


  • JDK 1.7
  • Running Triplestore with SPARQL 1.1 endpoint


Ant is used for compiling and starting

ant run


SPARQL endpoint is available at:


It directly accepts SPARQL queries with HTTP GET parameters for query and format:


Admin Interface

There is a command line admin interface which can be started separately.

There is a configuration file named Service.conf where all parameters are configured.

Directory structure

  • javadoc - Javadoc of the service (generated by 'ant javadoc')
  • lib - used libs
  • resources - contains configuration files
  • src - source code
  • verification - HTML page which executes SPARQL queries


jmeter -Jsample_variables=dataset,revision &


For each named graph 'g' in a query, a temporary graph 'TempGraph_g_r' is generated for the specified revision 'r' according to this formula ('g_x' = full materialized revision 'x' of graph 'g'):
    TempGraph_g_r = g_nearestBranch + SUM[revision i= nearestBranch to r]( deleteSet_g_i - addSet_g_i )
def select_query(query_string):
    for (graph,revision) in query_string.get_named_graphs_and_revisions():   
        execQuery("COPY GRAPH <"+graph+"> TO GRAPH <tmp-"+graph+"-"+revision+">")
        for rev in graph.find_shortest_path_to_revision(revision):
            execQuery("REMOVE GRAPH "+ rev.add_set_graph+" FROM GRAPH <tmp-"+graph+"-"+revision+">")
            execQuery("ADD GRAPH "+ rev.delete_set_graph+" TO GRAPH <tmp-"+graph+"-"+revision+">")
        query_string.replace(graph, "tmp-"+graph+"-"+revision)
    result = execQuery(query_string)
    execQuery("DROP GRAPH <tmp-*>")
    return result
def update_query(query_string):
    for (graph,revision) in query_string.get_named_graphs_and_revisions():
        newRevision = revision +1
        execQuery("ADD GRAPH "+ rev.delete_set_graph+" TO GRAPH <tmp-"+graph+"-"+revision+">")
You can’t perform that action at this time.