Skip to content
SPIN rule engine based on the TopQuadrant SPIN API and JENA
JavaScript CSS HTML Java Ruby
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


A RESTFUL web API built on top of the existing TopQuadrant SPIN API ( that executes SPIN rule inference on provided models. The engine supports a specialised API for the DEM models that can extract and execute the rules included in DEM policies, and reports the changes back to models using the PERSIST API.

The SPIN engine uses the SPIN API to run inference on the model.

Installation and execution


Download the latest release here:
extract, move to folder and run from shell:
`java -jar spinengine.jar`

Web service

The project is based on Maven, in order to direclty run the web service (port 8080 by default):
1. - install Maven
2. - clone or download the repository
3. - go to the folder and run `mvn jetty:run`
4. - open the browser at the local address:

WAR file install

Follow steps 1-2 and then package the war file using the standard MVN command: 3 - go to the folder and run `mvn war:war`

The API: 🐝

DEM Specific API is described in the project documentation
The complete API documentation - automatically generated - with different language clients is included here: Currently the API is implemented as a restful service that can be invoked usign both GET and POST methods. The following methods are implemented and can be executed via simple web call:
* `runInferencesGet`
* `runInferencesPost`
* `runConstraintsGet`
* `runConstraintsPost`

All the methods use the following 4 parameters (1st parameter is necessary, the other 3 optionals):
* `baseURI`: the URI for the base document
* `document`: (optional) the document contents
* `SPINURI`: (optional) The URI for the SPIN document (to be merged with the base document)
* `SPINdocument`: the SPIN document contents
* `outFormat`: the format for output serialisation. Can be one any of the apache Jena ones:
The Constraints checking method support one further parameter, that asks the engine to execute the inference before checking the constraints: * `doInference` (optional): true or false (default false)


The output includes the follwing elements, as simple JSON strings: * `constraints`: the constraints inference out model * `model`: the updated model * `newTriplets`: the new triples * `consoleLog`: console output or errors

When the output format is specified to be json, the models are written instead to the following:

  • jsonModel: the updated model
  • jsonNewTriplets: the new triples
  • jsonConstraints: the constraints inference out model

An example

This example is executed running the engine for constraint checking with inference:

You can’t perform that action at this time.