Page History
...
referencedComponentId | owlExpression (stated relationships) | Inferred Relationships in Necessary Normal Form | |||
sourceId | destinationId | relationshipGroup | typeId | ||
73572009 | EquivalentClasses(:73572009 ObjectIntersectionOf(:763158003 ObjectSomeValuesFrom(:609096000 ObjectSomeValuesFrom(:127489000 :373529000)))) | 73572009 | 764887005 | 0 | 116680003 |
73572009 | 360204007 | 0 | 116680003 | ||
73572009 | 373529000 | 1 | 127489000 | ||
422453004 | EquivalentClasses(:422453004 ObjectIntersectionOf(:763158003 ObjectSomeValuesFrom(:609096000 ObjectSomeValuesFrom(:127489000 :74905005)))) | 422453004 | 73572009 | 0 | 116680003 |
422453004 | 74905005 | 1 | 127489000 | ||
127489000 | SubObjectPropertyOf(ObjectPropertyChain(:127489000 :738774007) :127489000)) | N/A | N/A | N/A | |
74905005 | SubClassOf(:74905005 ObjectIntersectionOf(:440327007 ObjectSomeValuesFrom(:738774007 :373529000))) | 74905005 | 440327007 | 0 | 116680003 |
74905005 | 373529000 | 0 | 738774007 |
Technical implementation for calculating the NNF
This fairly complex process uses the stated form and the output of the reasoner to calculate the necessary normal form which is represented in the relationship RF2 file.
The most straightforward way to produce the necessary normal form would be to use the Snomed OWL Toolkit or the Classification Service REST API which is language agnostic.
High Level Process
Classification
Read the Stated Form from RF2 files.
The following files are required: Concept, Stated Relationship, OWL Ontology Reference Set, OWL Axiom Reference Set and MRCM Attribute Domain Reference Set.
Use the OWL API to infer the class hierarchy
Build the Ontology object using:
Axioms from the OWL Axiom Reference Set, making a note of any Transitive property axioms.
Axioms created by converting Stated Relationships to OWL Axioms using the MRCM Attribute Domain Reference Set for list of attributes which should not be grouped in the given domain.
Use a reasoner to pre-compute the class hierarchy.
Necessary Normal Form Calculation
Calculating the necessary normal form happens in two passes of the hierarchy.
Walk the class hierarchy in a top-down, breadth first, order.
For each class visited gather the stated attributes of this class and each inferred parent.
Compare the attributes and remove those which are found to be redundant because they are less specific in terms of depth in the hierarchy.
During this first pass build a hierarchy for property chains and transitive properties.
Walk the class hierarchy again in the same order reducing the attributes of each class further.
Compare the attributes and remove those which are found to be redundant because they are less specific in terms of depth in one of the alternate hierarchies.
For fine level detail the best source of information is the Java class org.snomed.otf.owltoolkit.normalform.RelationshipNormalFormGenerator which performs the Necessary Normal Form calculation.