General Comments
HL7 MIF Vocabulary to LexGrid Coding Scheme
The design and implementation of the LexEVS 6.1 HL7 MIF Vocabulary Loader assumes there is only one <vocabularyModel> XML element contained within the XML load source file being loaded. A single LexGrid Coding Scheme will get created. Refer to the mapping table labeled MIF Vocabulary - VocabularyModel Mapping to LexGrid Coding Scheme in the Mapping Information section for more information on what data is used to create the LexGrid Coding Scheme.
HL7 MIF Vocabulary load source file
As of the date this document was authored, the current version of the HL7 MIF Vocabulary that can be used as the load source is contained in the file named “DEFN=UV=VO=1189-20121121.coremif”. To obtain a copy of this file, go to the HL7 web site http://www.hl7.org/implement/standards/rim.cfm. From the HL7 web site, down load the latest version of the RIM (i.e. Version 2.41). The down load will be a zip file containing other zip files. Open the down loaded zip file and navigate to “d” zip file (i.e. rim0241d.zip). The file containing the HL7 MIF Vocabulary (i.e. “DEFN=UV=VO=1189-20121121.coremif”) is contained in the “d” zip file.
Overview
The current implementation of the LexEVS 6.1 HL7 MIF Vocabulary Loader will load all codeSystems and concept related information contained within the XML load source. Concept related information includes the concept and the properties, relationships and codes the concept has. Concept domain, value set and code system supplement related information will NOT be loaded.
Consider the following image of a small set of HL7 MIF Vocabulary loaded data:
As depicted under A1 in the above image, the LexEVS loader will create a default root node LexGrid Entity named "@". For each codeSystem XML element in the load source, the LexEVS loader will create a LexGrid Entity (A3) and a "hasSubtype" association (A2) with the "@" root node where the "@" root node entity is the source entity and the codeSystem entity (A3) is the target entity. The LexGrid Entity representing a codeSystem XML element will have its entityCode value comprised of the codeSystem's name attribute value and the codeSystem's codeSystemId attribute value concatenated with the colon (":") character as depicted by the value "ConceptStatus:2.16.840.1.113883.5.1086" under A3.
For each concept XML element contained by a codeSystem XML element, the LexEVS loader will create a LexGrid Entity (A5) and a "hasSubtype" association (A4) with the respective LexGrid Entity (A3) representing the codeSystem where the codeSystem entity (A3) is the source entity and the concept entity (A5) is the target entity. The LexGrid Entity representing a concept XML element will have its entityCode value comprised of the code attribute value of the code XML element contained by the concept XML element and the value of the conceptProperty XML element contained by the concept XML element where the conceptProperty element has a type attribute value defined as the concept's internal identifier type ("internalId"). These two values are concatenated with the colon (":") character to create the entityCode value of the LexGrid Entity as depicted by the value "A:19960" under A5.
Concepts having concept relationships with other concepts will be created by the LexEVS loader such the association's name (or association predicate) will be the relationshipName attribute value of the conceptRelationship XML element in the load source file. NOTE: these associations between concepts are not depicted in the above image.
Concepts Containing Multiple Codes
The HL7 model design for the MIF Vocabulary allows concepts to have more than one code. The load source file “DEFN=UV=VO=1189-20121121.coremif” has 100 concepts that contain multiple codes.
The LexEVS loader handles the multiple code scenarios for a concept by creating a LexGrid Entity for each of the codes contained within the concept. The entityCode value for the LexGrid Entity, as described in the previous Overview section, uses the code value along with concept’s internal identifier type property to distinguish the LexGrid Entities from each other and still have a mechanism via the concept’s internal identifier value to tie them to the same load source concept. The LexEVS loader will apply any concept properties and concept relationships the concept has to each of the LexGrid Entities. For example, if a concept having internal identifier value "12345" has codes ABC and DEF defined and has one concept relationship to the target code XYZ with a relationshipName attribute value of “Specializes” defined, the LexEVS loader will create the “Specializes” LexGrid AssociationPredicate and Associations to the target entity XZY for both source entities ABC and DEF as shown in the following diagram.
Mapping Information
MIF Vocabulary - VocabularyModel Mapping to LexGrid Coding Scheme
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
vocabularyModel | name | CodingScheme.codingSchemeName | |
vocabularyModel | CodingScheme.codingSchemeURI | Hard coded to value "urn:hl7-org:v3/mif2" | |
vocabularyModel | title | CodingScheme.formalName | |
vocabularyModel | title | CodingScheme.entityDescription.content | |
CodingScheme.defaultLanguage | Hard coded to value "en" | ||
CodingScheme.copyRight | Hard coded to value "THIS DATA IS COVERED BY A COPYRIGHT" | ||
packageLocation | combinedId | CodingScheme.representsVersion |
MIF Vocabulary - CodeSystem Mapping to LexGrid Entity (used as top node entities in hierarchy under “@” entity)
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
codeSystem | name + “:” + codeSystemId | Entity.entityCode | Formed value using two attributes |
codeSystem | title | Entity.entityDescription.content | |
vocabularyModel | name | Entity.entityCodeNamespace | |
Entity.entityType | Hard coded to value “concept” | ||
Entity.isActive | Hard coded to boolean value true | ||
codeSystem | title | Entity.Presentation.value.Text.context | |
Entity.Presentation.isPreferred | Hard coded to boolean value true | ||
Entity.Presentation.propertyName | Hard coded to value “print_name” | ||
Entity.Presentation.propertyId | Hard coded to value “T1” | ||
Entity.Presentation.language | Hard coded to value “en” | ||
codeSystem:annotations:documentation:description:text | Element’s enclosed data | Entity.Definition.value.Text.content | Used if it exists. All HTML styling tags contained within the enclosed data of the text XML element are removed by the loader. |
codeSystem | title | Entity.Definition.value.Text.content | Used if above entry does not exist |
Entity.Definition.propertyName | Hard coded to value “definition” | ||
Entity.Definition.propertyId | Hard coded to value “D1” | ||
Entity.Definition.language | Hard coded to value “en” | ||
Entity.Definition.isActive | Hard coded to boolean value true |
MIF Vocabulary - Concept Mapping to LexGrid Entity
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
concept:code concept:conceptProperty:value | code + “:” + internalId | Entity.entityCode | Formed value using two attributes. The internal identifier (internalId) value represent’s the value for the conceptProperty with name attribute = “internalId”. |
concept:printName | text | Entity.entityDescription.content | Used if it exists |
concept:code | code | Entity.entityDescription.content | Used if above entry does not exist |
vocabularyModel | name | Entity.entityCodeNamespace | |
Entity.entityType | Hard coded to value “concept” | ||
concept:code | status | Entity.status | |
Entity.isActive | Set to boolean value true if Entity.status = “active” else set to boolean value false |
MIF Vocabulary - Concept Mapping to LexGrid Entity.Presentation
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
concept:annotations:documentation:definition:text | Element’s enclosed data | Entity.Presentation.value.Text.content | Used if it exists |
concept:code | code | Entity.Presentation.value.Text.content | Used if above entry does not exist |
Entity.Presentation.isPreferred | Hard coded to boolean value true | ||
Entity.Presentation.propertyName | Hard coded to value “print_name” | ||
Entity.Presentation.propertyId | Hard coded to value “T1” | ||
Entity.Presentation.language | Hard coded to value “en” | ||
Entity.Presentation.PropertyQualifier.propertyQualifierName | Hard coded to “source-code” | ||
concept:code concept:conceptProperty:value | code + “:” + internalId | Entity.Presentation.PropertyQualifier.value.Text.content | Formed value using two attributes. The internal identifier (internalId) value represent’s the value for the conceptProperty with name attribute = “internalId”. |
codeSystem | name | Entity.Presentation.Source.content | The codeSystem the concept is contained within |
MIF Vocabulary - Concept Mapping to LexGrid Entity.Definition
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
concept:annotations:documentation:definition:text | Element's enclosed data | Entity.Definition.value.Text.content | Used if it exists. All HTML styling tags contained within the enclosed data of the text XML element are removed by the loader. |
concept:code | code | Entity.Definition.value.Text.content | Used if above entry does not exist |
Entity.Definition.propertyName | Hard coded to value “definition” | ||
Entity.Definition.propertyId | Hard coded to value “D1” | ||
Entity.Definition.language | Hard coded to value “en” | ||
Entity.Definition.isActive | Hard coded to boolean value true |
MIF Vocabulary - Concept Property Mapping to LexGrid Entity
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
concept:conceptProperty | name | Property.propertyName | |
concept:conceptProperty | value | Property.value.Text.content | |
Property.propertyId | Hard coded to value “P” + count where count is the current length of a collection holding the Property objects. | ||
Property.language | Hard coded to value “en” |
MIF Vocabulary - Concept Relationship Mapping to LexGrid
MIF Vocabulary - XML element | XML attribute | LexGrid Model Element | Notes |
---|---|---|---|
concept:conceptRelationship | relationshipName | AssociationPredicate | |
concept:conceptRelationship:targetConcept | code | AssociationTarget.targetEntityCode | Used to determine the Entity from the known list of Entities in the CodingScheme. The determined Entity’s entityCode is then used. |
concept:conceptRelationship:targetConcept | codeSystem | AssociationTarget.targetEntityCode | If it exists, it is used to along with the code above to determine the Entity from the known list of Entities in the defined codeSystem. The determined Entity’s entityCode is then used. If this attribute does not exist it is assumed the target Entity is in the same codeSystem as the source Entity. |
vocabularyModel | name | AssociationTarget.targetEntityCodeNamespace | |
concept:code | code | AssociationSource.sourceEntityCode | Used to determine the Entity from the known list of Entities in the specific concept of the codeSystem. The determined Entity’s entityCode is then used. |
vocabularyModel | name | AssociationSource.sourceEntityCodeNamespace |