JavaScript Java Web Ontology Language Other
Latest commit f4617c5 Feb 24, 2017 @jnguyenx jnguyenx committed on GitHub Merge pull request #214 from SciGraph/209-anonymous-node-labeler
[#209] added anonymous node labeler


Build Status Coverage Status Stories in Ready

Represent ontologies and ontology-encoded knowledge in a Neo4j graph.


SciGraph aims to represent ontologies and data described using ontologies as a Neo4j graph. SciGraph reads ontologies with owlapi and ingests ontology formats available to owlapi (OWL, RDF, OBO, TTL, etc). Have a look at how SciGraph translates some simple ontologies.


  • OWL 2 Support
  • Provide a simple, usable, Neo4j representation
  • Efficient, parallel ontology ingestion
  • Provide basic "vocabulary" support
  • Stay domain agnostic


  • Create ontologies based on the graph
  • Reasoning support

What's Included?

SciGraph can be used in a number of ways. After the graph is generated it could be used in an application with no SciGraph dependency.

It could be used in an application with the scigraph-core dependency which adds some convenience methods and includes "vocabulary" support. "Vocabulary" support resolves labels to graph nodes, auto-complete functionality, OpenRefine resolution services, and CURIE to IRI resolution. Additional support for identifying these vocabulary entities in free text can be found in the scigraph-entity module.

SciGraph can also be used as a stand-alone Dropwizard web service (via scigraph-services). SciGraph services support adding custom Cypher queries during application configuration to keep the code base domain agnostic.

Note that SciGraph is "OWL-centric". If you have, for example, and arbitrary SKOS ontology that doesn't assert skos:Concept as an owl:Class these skos:Concepts will not be visible to the owlapi and not loaded in the resulting Neo4j graph.



  • the Monarch Initiative uses SciGraph for both ontologies and biological data modeling
  • SciCrunch uses SciGraph for vocabulary and annotation services
  • CINERGI uses SciGraph for vocabulary and annotation services
  • the Human Brain project uses SciGraph for vocabulary and annotation services

Additional Documentation

Getting Started

A Vagrant box is included if you don't want to modify your localhost (you'll also need VirtualBox). You can launch a provisioned box like this and then follow the steps below:

curl -o Vagrantfile
vagrant up
vagrant ssh

Note that because Neo4j is using memory mapped IO the database cannot be stored in a Vagrant shared directory

If you're not using the vagrant box make sure you have git, maven, and java available. Java should be version 7 or better.

Clone and compile the project:

git clone; cd SciGraph; mvn -DskipTests -DskipITs install

Build the graph:

cd SciGraph-core
mvn exec:java -Dexec.mainClass="io.scigraph.owlapi.loader.BatchOwlLoader" -Dexec.args="-c src/test/resources/pizzaExample.yaml"

Run the services:

cd ../SciGraph-services
mvn exec:java -Dexec.mainClass="" -Dexec.args="server src/test/resources/pizzaConfiguration.yaml"

Check out some of the REST endpoints (the Vagrant box has port 9000 mapped so you can use your host browser to check these out):

Also browse the generated REST documentation to see some of the other resources.

Thanks to YourKit for providing an Open Source license.

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.