Skip to content
Seki is middleware/a front-end for connecting to an independent SPARQL server using node.js
JavaScript CSS Ruby XSLT Shell PHP
Find file
Failed to load latest commit information.
.kdev4 some bits for fuseki/thiki
.metadata some bits for fuseki/thiki
.openshift tweaked build
.settings server routing
bergi/LdFeed some bits for fuseki/thiki
bin moved to use port 3031 for Fuseki, its pages changed to use those of …
data moved to use port 3031 for Fuseki, its pages changed to use those of …
docs some bits for fuseki/thiki
jena-fuseki-1.0.0 split of fuseki pages for fuwiki repo
misc some bits for fuseki/thiki
old reorganised dirs, added READMEs (1/20 tests fail)
.gitignore moved to use port 3031 for Fuseki, its pages changed to use those of …
.gitignore.BACKUP.15743.gitignore removed some cruft
.gitignore.BASE.15743.gitignore removed some cruft
.gitignore.LOCAL.15743.gitignore removed some cruft
.gitignore.REMOTE.15743.gitignore removed some cruft
.gitignore~ moved to use port 3031 for Fuseki, its pages changed to use those of …
.gitmodules listy thing
.npmignore had another play with listy thing, henceforth known as Trellis
.project added URI escaping for spaces in page names
Gruntfile.js reorganised dirs, added READMEs (1/20 tests fail) tweak building up tests, has intermittent async (?) issues
nhttpsnoop adding tests - bit broken removed some cruft removed some cruft
package.json reorganised dirs, added READMEs (1/20 tests fail)
package.json_2013-11-04 had another play with listy thing, henceforth known as Trellis
package.json~ removed some cruft
patch.txt updated libs
yuidoc.json reorganised dirs, added READMEs (1/20 tests fail)

Seki is middleware/a front-end to an independent SPARQL server using node.js

No really, what is it?

It operates as a Web server, building queries from HTTP requests (from a browser or another service) and passing them to the SPARQL server, formatting the results (to HTML, JSON...) and passing them back to the client.

Warning - so far Seki is very experimental/incomplete, don't expect anything to work out of the box. (It is under active development, so watch this space and/or @danja on Twitter.


Primarily I'm developing Seki as a testbed to see what can be achieved using Web tech.

Generally speaking Seki could be used for pretty much any Web system that might otherwise use a HTTP server and database. Because an RDF/SPARQL server/DB is used for the backend, Seki is very webby at its core, meaning server-server communications (e.g. addressing remote Linked Data) will be simplified.

In the near term the plan is to clone various well-known kinds of apps and see what can be added thanks to the Semantic Web goodness. As most apps require the following in some form, this functionality is high on the todo list:

  • simple content managent (largely implemented)
  • user access control (in-progress)

Also high on the list is to provide query federation facilities, to e.g. automatically catalog/annotate/expand documents.

Later the plan is to set Seki up as a general-purpose Web agent container, allow custom behaviour to be defined using pluggable scripts with declarative configuration.


  • Server
  • Client
  • Routing engine (based on a rules engine)
  • Templater
  • User Manager (in progress)
  • Plugin script runner (todo)


For updates see Seki on G+

Also TODO List

Note 2013-11-30 : there's a in each directory giving overview of its contents.

Note 2013-08-27 : packaging etc. still in progress, but I have managed to get a live instance running on OpenShift (Red Hat's hosting service) at, backed by a Fuseki store hosted at (using ). The live Seki code is structured differently than that in git here, but as that version works (!) I'll merge it back in here asap.

Note 2013-08-15 : currently trying to package as npm and tidy up dependencies - may be a messfor a little while

If (were it live) you pointed a browser at it would take "" to build a query to find out about that resource - in the data store it will have a title, content etc. - which then get turned into HTML to show in the browser.

There is a form to allow POSTing, inserting title, content etc. for a given resource into the RDF store (there's no authentication as yet). Files can also be served from the filesystem.

It has been built against a Fuseki server, which uses protocols/query syntax according to the latest SPARQL 1.1 drafts, and so it should be reusable with any SPARQL server.

(Note that the current version includes a little SAX-based XML SPARQL results to JSON converter, this was for demo purposes (don't ask!) - future versions may use JSON SPARQL results directly).

At present it considers all resources to be information resources - the ones that get displayed are instances of sioc:Post. Descriptions of those resources are contained in little named graphs (named by the resources in question). The Fuseki config includes #dataset tdb:unionDefaultGraph true so SPARQL queries can be applied over a (virtual) merge of all the named graphs.

After the tutorial version is stable the plan is to use it as an experimental Read/Write Data Web testbed, e.g. adding support for the linked data API, RDF affordances play.

See contents.txt in individual folders for description.

Installation/running is easy :

  • install node.js (or copy node.exe into the src dir)
  • run Fuseki using bin/run-fuseki.bat (make executable first on *nix)
  • in another terminal bin/run-seki.bat (or node Seki.js)
  • point a browser at http://localhost:8888/seki/

post data should have URIs of the form the Fuseki server (SPARQL endpoint) will be accessible at http://localhost:3030/

localhost:8888/store/ will proxy to the store

Exploring data from Fuseki, first select the /seki dataset through the Control Panel, then go to the query panel with e.g. SELECT * WHERE { GRAPH ?graph { ?s ?p ?o } }


Added bits for Grunt, Vows plus grunt-vows, also APIeasy, though not yet runnable, related scripts will be in /bin (also will set up 'npm test').

docco-husky used for source doc generation.

Danny 2011-2013

Something went wrong with that request. Please try again.