HCLS/ClinicalObservationsInteroperability/Terminology/Ontologies

From W3C Wiki

representations of terminologies

Issues

Classes vs. Individuals

A given a hierarchy in some terminology:

 snomed:Infectious-disease-of-lung_disorder
   ⇧
 snomed:Infective-pneumonia_disorder
   ⇧
 snomed:Bacterial-pneumonia_disorder
   ⇧
 snomed:Secondary-bacterial-pneumonia_disorder

can be expressed as a class hierarchy:

 snomed:Infective-pneumonia_disorder rdfs:subClassOf snomed:Infectious-disease-of-lung_disorder .
 snomed:Bacterial-pneumonia_disorder rdfs:subClassOf snomed:Infective-pneumonia_disorder .
 snomed:Secondary-bacterial-pneumonia_disorder rdfs:subClassOf snomed:Bacterial-pneumonia_disorder .

This is appropriate for use cases where the hierarchy is important, such as some CDS system which looks for more than one of the superclasses of snomed:Secondary-bacterial-pneumonia_disorder. If that's not required, one can use a much more efficient closure to group terms into a single-level hierarchy. For instance, if we simply want to collect all forms of infection lung diseases, we can represent the terms as a value set:

 my:Infectious-disease-of-lung_disorder snomed:Infective-pneumonia_disorder owl:oneOf (
 Infectious-disease-of-lung_disorder
 snomed:Bacterial-pneumonia_disorder
 snomed:Secondary-bacterial-pneumonia_disorder ).

This is more efficient, at the expense of expressivity (the hierarchy is gone). If we know the instance data will only use e.g. leaf-level codes, we can even eliminate the intermediate terns:

 my:Infectious-disease-of-lung_disorder owl:oneOf (
 snomed:Secondary-bacterial-pneumonia_disorder ). # plus viral + ...


Concept Descriptor vs. IRI

Most clinical record systems use something like an ISO 21090 CD element with attributes to uniquely identifying a concept.

Description of Diagram of ISO 21090 Concept Descriptor (CD) Datatype (Detail)

The most critical these are the pair of codeSystem and code. These effectively form a unique identier for a concept. The concatonation of these can be viewed as a URN (like a URL, but not dereferencable). Using the HL7 O-RIM Coding for 21090, the attributes look like:

 :labObs5678 # Joe's baseline measured in body fluid
   a renal:RheumatoidFactorObservation ;
   hl7:coding [ dt:CDCoding.code "13930-3" ; dt:CDCoding.codeSystem "2.16.840.1.113883.6.1" ; # or EVS or ...
                dt:CDCoding.displayName 
   "Rheumatoid factor:Dilution Factor (Titer):Point in time:Synovial fluid (Joint fluid):Quantitative:Agglutination" ;
                dt:CDCoding.codeSystemName "LOINC" ] .

Viewed as a URN, this could look like:

 :labObs5678 # Joe's baseline measured in body fluid
   a renal:RheumatoidFactorObservation ;
   hl7:coding <urn:oidplus:2.16.840.1.113883.6.1/13930-3> .

with some helpful metadata:

 <urn:oidplus:2.16.840.1.113883.6.1/13930-3>
   dt:CDCoding.code "13930-3" ; dt:CDCoding.codeSystem "2.16.840.1.113883.6.1" ; # or EVS or ...
   dt:CDCoding.displayName 
   "Rheumatoid factor:Dilution Factor (Titer):Point in time:Synovial fluid (Joint fluid):Quantitative:Agglutination" ;
   dt:CDCoding.codeSystemName "LOINC" .

It is easy to use OWL equivalent class to assert the equivalence between these two forms:

 <urn:oidplus:2.16.840.1.113883.6.1/13930-3> 
   owl:equivalentClass [
     owl:intersectionOf (
       [ owl:onProperty dt:CDCoding.codeSystem ; owl:hasValue "2.16.840.1.113883.6.1" ]
       [ owl:onProperty dt:CDCoding.code       ; owl:hasValue "13930-3" ]
       ) ] .

Resources