Skip to content
SCUFL2 information web service
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.


Build Status

Returns Linked Data information about a SCUFL2 resource.

The idea is that say"

will redirect to this service to "guess" the partial workflow structure expressed in the URI - e.g. that we're talking about an output port fred in processor Hello in workflow HelloWorld in workflow bundle with uuid 746....a19.



returns JSON-LD):

  "workflow": {
    "processor": {
      "inputProcessorPort": {
        "@id": "workflow/HelloWorld/processor/Hello/in/hello",
        "@type": "InputProcessorPort",
        "name": "hello"
      "@id": "workflow/HelloWorld/processor/Hello/",
      "@type": "Processor",
      "name": "Hello"
    "@id": "workflow/HelloWorld/",
    "@type": "Workflow",
    "name": "HelloWorld"
  "@context": {
    "@base": "",
    "@vocab": ""
  "@id": "",
  "@type": "WorkflowBundle"

Which is equivalent to the RDF triples:

@base <> .
<> <> <workflow/HelloWorld/> .
<> <> <> .
<workflow/HelloWorld/> <> <> .
<workflow/HelloWorld/> <> "HelloWorld" .
<workflow/HelloWorld/> <> <workflow/HelloWorld/processor/Hello/> .
<workflow/HelloWorld/processor/Hello/> <> <> .
<workflow/HelloWorld/processor/Hello/> <> <workflow/HelloWorld/processor/Hello/in/hello> .
<workflow/HelloWorld/processor/Hello/> <> "Hello" .
<workflow/HelloWorld/processor/Hello/in/hello> <> <> .
<workflow/HelloWorld/processor/Hello/in/hello> <> "hello" .

This corresponds to what is defined inside the scufl2 workflow bundle.


  • control links, activities, profiles, configurations, dispatch layer
  • Other RDF formats: RDF/XML and Turtle
  • Search myExperiment by UUID to add rdfs:seeAlso
  • wfdesc


You will need Leiningen 1.7.0 or above installed.


To start a developer web server for the application, run:

lein ring server

To generate a WAR that can be installed into a servlet container like Apache Tomcat:

lein ring uberwar

Docker image

This service is also available as a Docker image stain/scufl2-info, exposing the ports 8080 (HTTP) and 8009 (AJP) through tomcat.

docker run -p 8080:8080 stain/scufl2-info


If you are old-skool and unable to run a Servlet application server, it is possible to create a cgi-bin version, that although very slow (~ 4s response time), does not require any running processes or memory usage when the scufl2info service is not being accessed.

Build as:

lein ring uberjar

This produces a single jar in target/scufl2-info-0.4.1-SNAPSHOT-standalone.jar. You can test this as:

stain@biggie-utopic:~/src/scufl2-info$ PATH_INFO=/workflowBundle/2f0e94ef-b5c4-455d-aeab-1e9611f46b8b/ java -jar target/scufl2-info-0.4.1-SNAPSHOT-standalone.jar
Status: 200
Content-Type: application/json; charset=utf-8

  "@context" : {
    "@base" : "",
    "@vocab" : ""
  "@id" : "",
  "@type" : "WorkflowBundle"

See RFC3875 for details about the cgi-bin environment variables.

Now simply create a scufl2info.cgi script to execute scufl2-info-0.4.1-SNAPSHOT-standalone.jar:

## Small memory footprint!
java -Xmx32M -jar lib/scufl2-info-0.4.1-SNAPSHOT-standalone.jar 2>&1

Remember to make the script executable with

chmod 755 scufl2info.cgi

Configuring your web server to run cgi-bin is out of scope for this document.

You might want to pretend this is in a folder /scufl2info/ using this .htaccess:

RewriteEngine On
RewriteRule (.*) /cgi-bin/scufl2info.cgi/$1

Remember to add the final / as otherwise the relative links will be wrong.


Copyright © 2014-2015 University of Manchester

This software is licensed under the MIT license.

You can’t perform that action at this time.