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.
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
SPARQL endpoint is available at:
It directly accepts SPARQL queries with HTTP GET parameters for query and format:
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.
- 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+">") ...