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.
Goals:
- OWL 2 Support
- Provide a simple, usable, Neo4j representation
- Efficient, parallel ontology ingestion
- Provide basic "vocabulary" support
- Stay domain agnostic
Non-goals:
- Create ontologies based on the graph
- Reasoning support
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
A Docker container is included with instructions
Alternatively, 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 https://raw.githubusercontent.com/SciGraph/SciGraph/master/src/test/resources/vagrant/Vagrantfile -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 or docker container make sure you have git
, maven
, and java
available. Java should be version 7 or better.
Clone and compile the project:
git clone https://github.com/SciGraph/SciGraph; 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="io.scigraph.services.MainApplication" -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.