Skip to content

Extensible Java framework for loading SNOMED CT into anything from RF2

License

Notifications You must be signed in to change notification settings

IHTSDO/snomed-boot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Snomed Boot

Build Status codecov

An extensible Java framework for loading SNOMED CT RF2 content into any implementation.

Key Features

  • Extensible factory based design
  • Supports component streaming for better overall performance and less pressure on memory
  • Ability to load only the latest version of each component when using a collection of snapshot archives
  • Multithreaded
    • Concepts load first
    • Then Relationships and Descriptions load in parallel
    • Then all reference set memebers in parallel.
  • Loading Profiles allow content to be filtered
    • by content type
    • by reference set filename pattern
    • by reference set identifier

Component Factories

This project is oriented around the ComponentFactory and HistoryAwareComponentFactory. These interfaces allow a factory implementation to recieve the properties of every component and member. The HistoryAwareComponentFactory is useful when loading full files containing more than one release.

In-Memory Implementation

The default factory implementation loads content into memory. It builds a map of concepts with their descriptions and relationships connected. This is an extremely fast way to get hold the transitive closure for every concept.

// Create release importer
ReleaseImporter releaseImporter = new ReleaseImporter();

// Load SNOMED CT components into memory
ComponentStore componentStore = new ComponentStore();
releaseImporter.loadSnapshotReleaseFiles("release/SnomedCT_RF2Release_INT_20170131", LoadingProfile.light, new ComponentFactoryImpl(componentStore));
Map<Long, ? extends Concept> conceptMap = componentStore.getConcepts();

// Get transitive closure for concept 285355007 | Blood blister (disorder) |
Set<Long> transitiveClosure = conceptMap.get("285355007").getInferredAncestorIds();

Contribute

We welcome your suggestions and contributions. Feel free to fork this project and submit a pull request of your changes.