Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Let’s start with a basic health check, which we can use to see how our instance is doing. We’ll be using curl
to do this but you can use any tool that allows you to make HTTP/REST calls. Let’s assume that we are still on the same node where we started Snow Owl on and open another command shell window.
To check the instance status/health, we will be using the Admin API. You can run the command by clicking the "Copy" link on the right side and pasting it into a terminal.
And the response:
In the response, we can see the version of our instance along with the available repositories and their health status (eg. SNOMED CT
with status GREEN
).
Whenever we ask for the status, we either get GREEN
, YELLOW
, or RED
and an optional diagnosis
message.
Green - everything is good (repository is fully functional)
Yellow - some data or functionality is not available, or diagnostic operation is in progress (repository is partially functional)
Red - diagnostic operation required in order to continue (repository is not functional)
There are a few concepts that are core to Snow Owl. Understanding these concepts from the outset will tremendously help ease the learning process.
A terminology (also known as code system, classification and/or ontology) defines and encapsulates a set of terminology components (eg. set of codes with their meanings) and versions. A terminology is identified by a unique name and stored in a repository. Multiple code systems can exist in a single repository besides each other as long as their name is unique.
A terminology component is a basic element in a code system with actual clinical meaning or use. For example in SNOMED CT, the Concept, Description, Relationship and Reference Set Member are terminology components.
A version that refers to an important snapshot in time, consistent across many terminology components, also known as tag or label. It is often created when the state of the terminology is deemed to be ready to be published and distributed to downstream customers or for internal use. A version is identified by its version ID (or version tag) within a given code system.
A repository manages changes to a set of data over time in the form of revisions. Conceptually very similar to a source code repository (like a Git repository), but information stored in the repository must conform to a predefined schema (eg. SNOMED CT Concepts RF2 schema) as opposed to storing it in pure binary or textual format. This way a repository can support various full-text search functionalities, semantical queries and evaluations on the stored, revision-controlled terminology data.
A repository is identified by a name and this name is used to refer to the repository when performing create, read, update, delete and other operations against the revisions in it. Repositories organize revisions into branches and commits.
A revision is the basic unit of information stored in a repository about a terminology component or artifact. It contains two types of information:
one is the actual data that you care about, for example a single code from a code system with its meaining and properties.
the other is revision control information (aka revision metadata). Each revision is identified by a random Universally Unique IDentifier (UUID) that is assigned when performing a commit in the repository. Also, during a commit each revision is associated with a branch and timestamp. Revisions can be compared, restored, and merged.
A set of components under version control may be branched or forked at a point in time so that, from that time forward, two copies of those components may develop at different speeds or in different ways independently of each other. At later point in time the changes made on one of these branches can be merged into the other.
Branches are organized into hierarchies like directories in file systems. A child branch has access to all of the information that is stored on its parent branch up until its baseTimestamp, which is the time the branch was created. Each repository has a predefined root branch, called MAIN
.
A commit represents a set of changes made against a branch in a repository. After a successful commit, the changes made by the commit are immediately available and searchable on the given branch.
A merge/rebase is an operation in which two sets of changes are applied to set of components. A merge/rebase always happens between two branches, denoting one as the source and the other as the target of the operation.
Snow Owl® is a highly scalable, open source terminology server and collaborative authoring platform. It allows you to store, search and author high volumes of terminology artifacts quickly and efficiently.
Here are a few use-cases that Snow Owl could be used for:
You work in the healthcare industry and are interested in using a terminology server for browsing, accessing and distributing components of various terminologies and classifications to third-party consumers. In this case, you can use Snow Owl to load the necessary terminologies and access them via FHIR and proprietary APIs.
You are responsible for maintaining and publishing new versions of a particular terminology. In this case, you can use Snow Owl to collaboratively access and author the terminology content and at the end of your release schedule publish it with confidence and zero errors.
You have an Electronic Health Record system and would like to capture, maintain and query clinical information in a structured and standardized manner. Your Snow Owl terminology server can integrate with your EHR server via standard APIs to provide the necessary access for both terminology binding and data processing and analytics.
In this tutorial, you will be guided through the process of getting Snow Owl up and running, taking a peek inside it, and performing basic operations like importing SNOMED CT RF2 content, searching, and modifying your data. At the end of this tutorial, you should have a good idea of what Snow Owl is, how it works, and hopefully be inspired to see how you can use it for your needs.
Now that we have our instance up and running, the next step is to understand how to communicate with it. Fortunately, Snow Owl provides very comprehensive and powerful APIs to interact with your instance.
Among the few things that can be done with the API are as follows:
Check your instance health, status, and statistics
Administer your instance data
Perform CRUD (Create, Read, Update, and Delete) and search operations against your terminologies
Execute advanced search operations such as paging, sorting, filtering, scripting, aggregations, and many others
Snow Owl requires Java 11 or newer version. Specifically as of this writing, it is recommended that you use JDK (Oracle of OpenJDK is preferred) version 11.0.2. Java installation varies from platform to platform so we won’t go into those details here. Oracle’s recommended installation documentation can be found on Oracle’s website. Suffice to say, before you install Snow Owl, please check your Java version first by running (and then install/upgrade accordingly if needed):
Once we have Java set up, we can then download and run Snow Owl. The binaries are available at the Releases pages. For each release, you have a choice among a zip or tar archive, a DEB or RPM package.
For simplicity, let's use a zip file.
Let's download the most recent Snow Owl release as follows:
Then extract it as follows:
It will then create a bunch of files and folders in your current directory. We then go into the bin directory as follows:
And now we are ready to start the instance:
If everything goes well with the installation, you should see a bunch of log messages that look like below:
Now let's take a peek at our code systems:
And the response:
Which means, we have a single Code System in Snow Owl, called SNOMED CT
. It has been created by the SNOMED CT module by default on the first startup of your instance. A Code System lives in a repository and its working branchPath
is currently associated with the default MAIN
branch in the snomedStore
repository.
Snow Owl is both a simple and complex product. We’ve so far learned the basics of what it is, how to look inside of it, and how to work with it using some of the available APIs. Hopefully this tutorial has given you a better understanding of what Snow Owl is and more importantly, inspired you to further experiment with the rest of its great features!
This section includes information on how to setup Snow Owl and get it running, including:
Downloading
Installing
Starting
Configuring
Snow Owl is built using Java, and requires at least Java 11 in order to run. Only Oracle’s Java and the OpenJDK are supported. The same JVM version should be used on all Snow Owl nodes and clients.
We recommend installing Java version 11.0.x or a later version in the Java 11 release series. We recommend using a supported LTS version of Java.
The version of Java that Snow Owl will use can be configured by setting the JAVA_HOME environment variable.
Snow Owl® is a highly scalable, open source terminology server with revision-control capabilities and collaborative authoring platform features. It allows you to store, search and author high volumes of terminology artifacts quickly and efficiently.
Features include:
Revision-controlled authoring
Maintains multiple versions (including unpublished and published) for each terminology artifact and provides APIs to access them all
Independent work branches offer work-in-process isolation, external business workflow integration and team collaboration
SNOMED CT and others
Full SNOMED CT terminology support (full RF2 support, ECL v1.3, SCG 2.3.1, ETL 1.0, Reference Sets, OWL Axioms, OWL 2 EL/DL support, experimental Query Language)
With its modular design, the server can maintain multiple terminologies (including local codes, mapping sets, value sets)
Various set of APIs
SNOMED CT API (RESTful and native Java API)
FHIR API
CIS API
Highly extensible and configurable
Simple to use plug-in system makes it easy to develop and add new terminology tooling/API or any other functionality
Built on top of Elasticsearch (highly scalable, distributed, open source search engine)
Connect to your existing cluster or use the embedded instance
All the power of Elasticsearch is available (full-text search support, monitoring, analytics and many more)
This distribution only includes features licensed under the Apache 2.0 license. To get access to the full set of features, please contact B2i Healthcare.
View the detailed release notes here.
Not the version you're looking for? View past releases.
NOTE: You need to have a recent version of Java installed (Java 11+, https://jdk.java.net/archive/).
Once you have downloaded the appropriate package:
Run bin/snowowl.sh
on unix, or bin/snowowl.bat
on windows
Run curl http://localhost:8080/snowowl/admin/info
Navigate to http://localhost:8080/snowowl
Snow Owl uses Maven for its build system. In order to create a distribution, simply run the following command in the cloned directory.
The distribution packages can be found in the releng/com.b2international.snowowl.server.update/target
folder, when the build is complete.
To run the test cases, use the following command:
These instructions will get Snow Owl up and running on your local machine for development and testing purposes.
Snow Owl is an Equinox-OSGi based server. To develop plug-ins for Snow Owl you need to use Eclipse as IDE:
Use latest Eclipse IDE for Eclipse Committers package: http://www.eclipse.org/downloads/eclipse-packages/
Required Eclipse plug-ins (install the listed features via Help
-> Install New Software...
):
Note: you may have to untick the Show only the latest versions of the available software
checkbox to get older versions of a feature. Please use the exact version specified below, not the latest point release.
Xtext/Xtend (http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/)
MWE 2 language SDK 2.10.0 (MWE)
Xtend IDE 2.18.0 (Xtext)
Xtext Complete SDK 2.18.0 (Xtext)
Maven integration (http://download.eclipse.org/technology/m2e/releases)
Make sure you have the following preferences enabled/disabled.
Plug-in development API baseline errors is set to Ignored (Preferences > Plug-in Development > API Baselines)
The Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-clean-plugin:2.5:clean type of errors can be ignored or changed to Warnings in Preferences->Maven->Errors/Warnings.
Set the workspace encoding to UTF-8 (Preferences->General->Workspace)
Set the line endings to Unix style (Preferences->General->Workspace)