To avoid any confusion and misinterpretation it is important that the input data is represented in a way that ease the interpretation of the input data and ensure correct processing of the expression template. Poorly represented input data may result in expressions that express a different meaning than intended, which can be critical if the resulting expressions are used for safety critical purposes (storage, communication, trigger decision support rules etc.)
In situations where the template allow for attribute-value pairs or relationships groups to be repeated, the input data should be explicit about
[[@Expression ]] 64572001 |Disease (disorder)| : [[@Group]]{ 363698007 |Finding site (attribute)| = [[+ (<< 272673000 |Bone structure (body structure)| ) @Site]], 116676008 |Associated morphology (attribute)| = [[+ (<< 72704001 |Fracture (morphologic abnormality)| ) @Morphology]] } |
The data used to populate this could be represented explicit like this:
@Expression | @Group | @Site | @Morphology |
1 | 1 | ||
2 | |||
2 | 1 | ||
3 | 1 |
| |
4 | 1 |
The above input data would result in following four expressions to be generated when processing the template:
Expression | ||
---|---|---|
1 |
| |
2 |
| |
3 |
| |
4 |
|
Consider the following template, where the template includes a cardinality constraint on the group like this:
[[@Expression ]] 64572001 |Disease| : [[1..*]] [[1..1 @Group]]{ 363698007 |Finding site| = [[+ (<< 272673000 |Bone structure| ) @Site]], 116676008 |Associated morphology| = [[+ (<< 72704001 |Fracture| ) @Morphology]] } |
In this situation, processing the template against the input data would result in a processing error, because the first expression would not be valid. the expression template allow for only one @Group within each expression, whereas the input data specify an expression with more that one @Group.
@Expression | @Group | @Site | @Morphology | Processing Result |
1 | 1 | INVALID Only one group is allowed due to cardinality constraints | ||
2 | ||||
2
| 1 | VALID | ||
1 | ||||
3 | 1 | VALID | ||
4 | 1 | VALID |
So in this case, there would be no need to include the second column in the input data to differentiate between different groups in the same expression. Hence, the input data could be simplified as:
@Expression | @Site | @Morphology |
2
| ||
3 | ||
4 |
[[@Expression ]] 64572001 |Disease| : [[1..*]] [[1..1 @Group]]{ [1..1] 363698007 |Finding site| = [[+ (<< 272673000 |Bone structure| ) @Site]], [1..1] 116676008 |Associated morphology| = [[+ (<< 72704001 |Fracture| ) @Morphology]] } |
In this case, the second expression would not be valid … so there would be no need to include the expression column, as each row would signify a separate expression. That is, we could just define the data as:
@Expression | @Site | @Morphology | Processing Result |
2
| INVALID Only one @Site is allowed due to cardinality constraints | ||
3 | VALID | ||
4 | VALID |
Similarly, if only precoordinated concepts were allowed in the slots, like this:
[[@Expression ]] 64572001 |Disease| : [[1..*]] [[1..1 @Group]]{ [1..1] 363698007 |Finding site| = [[+ id(<< 272673000 |Bone structure| ) @Site]], [1..1] 116676008 |Associated morphology| = [[+id (<< 72704001 |Fracture| ) @Morphology]] } |
then only the following data value would be valid:
@Site | @Morphology |
In summary, it is recommended to be as explicit as possible when specifying input data for expression templates. However, in situations the input data can be simplified, and then following default can be assumed by the input data: