The HL7 Static Model Differencer (MIF Diff) is a tool for comparing two static models. Although message models undergo frequent changes and revisions, there is currently no standard way to identify the changes and categorize their significance. Generic model comparison techniques identify numerous trivial changes that are insignificant to the healthcare domain. Changes to these underlying models require message implementers to evaluate all potential changes to message instances and processing logic. This process is currently manual, time-consuming, error-prone, and costly. Therefore an ability to compare and display the changes between versions of a message model within an Eclipse-based model editor was required. It was designed to find differences between two versions of the same model, since comparing significantly different models might lead to numerous and often incomprehensible differences.
- Model Differencer algorithm tuning
- Difference tree filter
- Side-by-side model compare visualization
- Graphical Comparison Results
- Model comparison result exporting
- Support for assigning weight levels to differences
- Stand-alone tool (Windows, MacOS, Linux
- Integrated Eclipse Help
Differences found in classes, associations, attributes, annotations, graphical information will be displayed in windows laid out in a side-by-side fashion. When the user clicks on a node in the difference tree, the corresponding side-by-side compare windows will depict the differences. The difference tree can now be filtered. Any combination of annotations, attributes, graphical information, added elements, changed elements, removed elements, and renamed elements can be excluded from view. This allows (e.g.) graphical information changes to be excluded from the model difference view.
A properties page has been added to H3ET projects to allow configuring model differencing properties. Each project may have a different set of model differencing properties. The page allows users to configure the parameters used by the MIF diff algorithms manually.
The differencing tool extends the Eclipse compare framework's standard compare editor by showing the differences as a tree structure and as annotations on the graphical diagram of the compared models. The differences can be filtered by difference type (added, changed, etc.) and RIM type (e.g. Act, Role, etc.), and the resulting difference tree can be exported into XML format. Post-differencing evaluation allows users to assign impact levels to the individual nodes of the difference tree. These values are also included in the difference export file.
Model differences can now be viewed graphically. Changes are indicated by a delta, +/- overlay image on the artifact changed.
Comparing two HL7 models is a non-trivial task since these models are large, complex, and have numerous types of changes. Since the underlying models have domain specific behavior, the application of a UML-like comparison algorithm is not sufficient. We found fine-tuning the comparison engine to be essential to success. The actual model comparison algorithm consists of three main steps: traversal, matching and differencing. Before the algorithm can identify changes, the models are first parsed using Eclipse OHF routines and then represented as graphs within our compare engine. The actual model comparison algorithm consists of three main steps: traversal, matching and differencing.
In the traversal phase all classes and associations in the two models are traversed using the depth-first search algorithm and collected into sets of nodes and edges. About graph theory in general see more on the topic Graph theory.
In the matching phase similar nodes are searched within the two graphs. The extent of similarity can be calculated based on different domain and non-domain specific properties of a node, for example: name, contents, its structural location in the model, RIM ancestor type, etc. These similarity results have adjustable weight factors assigned to them, which represent the importance of a given kind of similarity when aggregating the values into a single similarity metric. If the similarity of two nodes is above a given threshold they are considered to be similar, otherwise the node is identified as added or removed.
The last phase is the actual in-detail comparison of similar node pairs, where all the properties of the two nodes are compared in detail and displayed within a difference node tree and a side-by-side merge view. In addition to the actual differencing, the module is responsible for creating the graphical elements that depict the actual differences between two nodes.