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.
Now that we have a SNOMED CT Code System, let's take a look at its content. We can query its content using either the SNOMED CT API or the FHIR API.
For sake of simplicity, let's search for the available concepts using the SNOMED CT API. For that we will need the branch we would like to query, but fortunately we already know the value from our previous call to the Code Systems API, it was MAIN
. To list all available concepts in a SNOMED CT Code System, use the following command:
And the response is:
Which simply means we have no SNOMED CT concepts yet in our instance.
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 8 in order to run. Only Oracle’s Java and the OpenJDK are supported. The same JVM version should be used on all Elasticsearch nodes and clients.
We recommend installing Java version 1.8.0_171 or a later version in the Java 8 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 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
Now let's import an official SNOMED CT RF2 SNAPSHOT
distribution archive so that we can further explore the available SNOMED CT APIs.
And the response:
The import configuration specifies the type
of the RF2 release (in this case SNAPSHOT
) and the target branchPath
where the content should imported. The response returns an empty body along with a Location
header with a URL pointing to the created import configuration. You can extract the last part of the URL to get the import configuration ID which can be used to retrieve the configuration and to upload the actual archive and start the import.
Depending on the size and type of the RF2 package, hardware and Snow Owl configuration, RF2 imports might take hours to complete. Official SNAPSHOT distributions can be imported in less than 30 minutes by allocating 6 GB of heap size to Snow Owl and configuring Snow Owl to use a solid state disk for its data directory.
The import will start automatically when you upload the archive to the /imports/:id/archive
endpoint:
The import process is asynchronous and its status can be checked by sending a GET request to the /imports/:id
endpoint with the extracted import identifier as follows:
And the response:
The status
field describes the current state of the import, while the startDate
and completionDate
fields specify start
and completion
timestamps.
Snow Owl is provided in the following package formats:
Snow Owl requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_171. 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):
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.
To import an RF2 archive you must first create an import configuration using the as follows:
Once we have Java set up, we can then download and run Snow Owl. The binaries are available at the pages. For each release, you have a choice among a zip or tar archive, a DEB or RPM package.