This class is used in ISO 21090 to specify a range of consecutive values of any ordered base data type (this is therefore
parameterised to quantities - QTY). Its instantiations such as IVL(TS) should be used for specifying a continuous range between
two definable, realisable ends. It is not intended to be used to represent a single unknown value within an interval (for
which use URG uncertain range). IVL should only be used to represent the existence of a continuous state between two delimiters.
An example of IVL(TS) would include the timing of a medication infusion, or an admission period.
There are possible grey areas in the implementation of IVL compared with URG - an example being 'take 2-4 tablets' could be
modelled as an IVL(PQV) but the statement 'he took between 12 and 24 tables' clearly should only be modelled as URG(PQV).
The guidance for the LRA is that if a statement could theoretically be decomposed to a set of unitary statements separated
by 'or' the choice should be an URG, whereas if it can be broken down as 'and' it should be an IVL. Thus both tablet related
examples here should be modelled with URG (i.e. take 2 tablets OR take 3 tablets OR take 4 tablets).
The use of IVL with coded ordinals is explicitly prohibited.
Specializes
Attributes
| Name |
Data type |
Occurs |
Description |
|
any
|
T
|
1..1 |
In ISO 21090 it is possible to also specify an IVL as a range that contains a specific point. So the IVL<INT> with attribute
any=10 and width=5 represents all the intervals 5-10, 6-11, 7-12, 8-13, 9-14 and 10-15. This appears represent a specific
type of uncertain interval which is different from uncertain range (URG). Within the LRA, as in ISO 21090, the use of IVL
with only IVL.any and IVL.width attributes defined is allowable, and should be used with caution for the specification of
loosely constrained time intervals. It is not however appropriate to use it for loosely defined time points for which URG<TS>
is an appropriate choice.
This is implemented as described in ISO 21090.
|
|
high
|
T
|
0..1 |
This is implemented as described in ISO 21090. |
|
highClosed
|
Boolean
|
0..1 |
This is implemented as described in ISO 21090. |
|
low
|
T
|
0..1 |
This is implemented as described in ISO 21090. |
|
lowClosed
|
Boolean
|
0..1 |
This is implemented as described in ISO 21090. |
|
width
|
QTY
|
0..1 |
IVL start and end may be underspecified in ISO 21090 to allow for ranges of known size (using IVL.width) but undefined low
and high end points. NB: It does not appear to be allowable to specify IVL.width and IVL.low, and leave IVL.high as implicitly
defined.
This is implemented as described in ISO 21090.
|
Constraints
| Type |
Name |
Specification |
| closed attributes only if limited |
Invariant |
inv: (not low.isNotNull implies lowClosed.oclIsUndefined) and (not high.isNotNull implies highClosed.oclIsUndefined) |
| co-occurence rules |
Invariant |
inv: (any_.isNotNull implies not (hasBounds or width.isNotNull)) and (any_.isNull implies (hasBounds xor width.isNotNull)) |
| no coded ordinal IVL in LRA |
LRA Invariant |
inv: (not low.oclIsTypeOf(CO)) and (not high.oclIsTypeOf(CO)) and (not any.oclIsTypeOf(CO)) and (not width.oclIsTypeOf(CO)) |
| no updateMode or History on IVL attributes |
Invariant |
inv: noUpdateOrHistory(low) and noUpdateOrHistory(high) and noUpdateOrHistory(width) |
| null rules |
Invariant |
inv: isNull xor (hasBounds or any_.isNotNull or width.isNotNull) |
| unnamed constraint |
Invariant |
def: hasBounds : Boolean = low.isNotNull or high.isNotNull |