Knowledge Organization, Representation, and Annotation
benjamingeer Fix standoff to XML conversion with nested empty tag (#1055)
* fix (XMLToStandoffUtil): Fix standoff to xml conversion with nested empty tags (#1054).

* docs (release-notes): Update release notes.

* build (webapi): Disable Codacy because it makes Travis build fail.
Latest commit 7cea3f3 Nov 13, 2018
Failed to load latest commit information.
docs Fix standoff to XML conversion with nested empty tag (#1055) Nov 13, 2018
knora-ontologies Add support for shared ontologies (#987) Sep 13, 2018
monitoring Wip/945 knora freeze (#951) Aug 15, 2018
private build (travis): add using graphdb-se (#608) Sep 18, 2017
salsah1 releasing-v2.1.0 (#1043) Nov 2, 2018
salsah2 build (docker): fix codacy issues (#1030) Nov 2, 2018
sipi feature (sipi): add no-auth config (#1005) Oct 5, 2018
triplestores refactor (webapi): remove unnecessary actor pools (#979) Sep 7, 2018
webapi Fix standoff to XML conversion with nested empty tag (#1055) Nov 13, 2018
.dockerignore build (webapi): library upgrades (codeship part 1) (#653) Feb 1, 2018
.env refactor (webapi): remove unnecessary actor pools (#979) Sep 7, 2018
.gitignore docs (webapi): add missing release notes entry (#836) Apr 30, 2018
.travis.yml Fix standoff to XML conversion with nested empty tag (#1055) Nov 13, 2018 Return resources in the API v2 simple ontology schema (#833) May 11, 2018 build (webapi): library upgrades (codeship part 1) (#653) Feb 1, 2018 Update Jan 25, 2016 build (travis): use codacy for coverage (#1021) Oct 30, 2018 Releasing v2.0.0 (#996) Sep 13, 2018
codeship-services.yml build (webapi): library upgrades (codeship part 1) (#653) Feb 1, 2018
codeship-steps.yml build (webapi): library upgrades (codeship part 1) (#653) Feb 1, 2018
docker-compose.yml feature (webapi): expose additional configuration settings as environ… Nov 2, 2018

Build Status Codacy Badge


Knora (Knowledge Organization, Representation, and Annotation) is a server application for storing, sharing, and working with primary sources and data in the humanities.

It is developed by the Digital Humanities Lab at the University of Basel, and is supported by the Swiss Academy of Humanities and Social Sciences.

Knora is free software, released under the GNU Affero General Public License.


  • Stores humanities data as industry-standard RDF graphs, plus files for binary data such as digitized primary sources.
    • Designed to work with any standards-compliant RDF triplestore. Tested with Ontotext GraphDB.
  • Based on OWL ontologies that express abstract, cross-disciplinary commonalities in the structure and semantics of research data.
  • Offers a generic HTTP-based API, implemented in Scala, for querying, annotating, and linking together heterogeneous data in a unified way.
    • Handles authentication and authorization.
    • Provides automatic versioning of data.
  • Uses Sipi, a high-performance media server implemented in C++.
  • Designed to be be used with SALSAH, a general-purpose, browser-based virtual research environment, as well as with custom user interfaces.



Beta stage

New features under development


For developing and testing the API server

Ontotext GraphDB is recommended. Support for other RDF triplestores is planned.

For building the documentation

See docs/

Try it out

Quick Installation Guide for Knora, Salsah, Sipi and GraphDB

A manual to get all mentioned components locally up and running can be found here.

Run the Knora API server

With Docker installed, start the GraphDB Free triplestore:

$ docker run --rm -p 7200:7200 dhlabbasel/graphdb-free

Then in another terminal, create a test repository and load some test data into the triplestore:

$ cd webapi/scripts
$ ./

Then go back to the webapi root directory and use SBT to start the API server:

$ cd ..
$ sbt
> compile
> set reStart / javaOptions ++= Seq("-Dapp.triplestore.dbtype=graphdb-free")
> reStart

Then try opening http://localhost:3333/v1/resources/ in a web browser. You should see a response in JSON describing a book.

To shut down the Knora API server:

> reStop

Run the automated tests

Make sure you've started GraphDB Free as shown above. Create an empty repository for running the automated tests:

$ cd webapi/scripts
$ ./

Then at the SBT prompt:

> GDBFree / test

How to Contribute

You can help by testing Knora with your data, making bug reports, improving the documentation, and adding features that you need.

First, open an issue to describe your problem or idea. We may ask you to submit a pull request implementing the desired functionality.

Coding conventions

Use camelCase for names of classes, variables, and functions. Make names descriptive, and don't worry if they're long.

Format your code consistently. We IntelliJ IDEA to format code, with 4 spaces indentation. Use whitespace to make your code easier to read. Add lots of implementation comments describing what your code is doing, how it works, and why it works that way.


We write automated tests using ScalaTest. You can run them from the SBT console.

There are three sets of automated tests:

  • Unit tests, route-to-route tests, and end-to-end tests are under webapi/src/test. To run these, type graphdb:test or graphdb-free:test (depending on which triplestore you're using) at the SBT console in the webapi project. To run a single test, use graphdb:test-only *NameOfTestSpec.
  • Integration tests, which can involve Sipi, are under src/it. To run these, first start Sipi, then type it:test at the SBT console in the webapi project.
  • Browser interaction tests are under salsah/src/test, and are written using Selenium. To run these, you will need to unpack the correct ChromeDriver for your platform found under salsah/lib/chromedriver and put it in the same folder. Then start Sipi and the Knora API server, and type test at the SBT console in the salsah project.

Whenever you add a new feature or fix a bug, you should add one or more tests for the change you made.


A pull request should include tests and documentation for the changes that were made. See the documentation README for information on writing Knora documentation.

Contact information


Please use the knora-user mailing list for technical questions.


Lukas Rosenthaler <>

Commit Message Schema

When writing commit messages, we stick to this schema:

type (scope): subject


  • feature (new feature for the user)
  • fix (bug fix for the user)
  • docs (changes to the documentation)
  • style (formatting, etc; no production code change)
  • refactor (refactoring production code, eg. renaming a variable)
  • test (adding missing tests, refactoring tests; no production code change)
  • build (changes to sbt tasks, CI tasks, deployment tasks, etc.; no production code changes)
  • enhancement (residual category)


feature (resources route): add route for resource creation
- add path for multipart request
- adapt handling of resources responder

Release Versioning Convention

The Knora project is following the Semantic Versioning convention for numbering the releases as defined by []:

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.

Additionally, we will also increment the MAJOR version in the case when any kind of changes to existing data would be necessary, e.g., any changes to the Knora-Base ontologies which are not backwards compatible.


The Knora project is using YourKit for profiling.

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.