Exclusion of Simple Expressions

Exclusion is supported in the SNOMED CT Expression Constraint Language by the binary operator 'MINUS'. Exclusion works in a similar manner to mathematical subtraction. For example, the following expression constraint returns the set of lung disorders which are not a descendant or self of edema of the trunk.

   << 19829001 |Disorder of lung| MINUS << 301867009 |Edema of trunk|

Logically, this expression constraint takes the set of descendants of 'disorder of lung' and subtracts the set of descendants of 'edema of trunk'. Please note that the keyword 'MINUS' is case insensitive.

Exclusion can also be applied to the membership of a reference set. For example, the following expression constraint returns the set of lung disorders which are not members of the cardiology reference set. That is, the set of descendants or self of 'disorder of lung' minus the set of members of the 'cardiology reference set'.

   << 19829001 |Disorder of lung| MINUS ^ 700043003 |Example problem list concepts reference set|

Please note that when more than one exclusion operator is used, or when an exclusion operator is used together with a conjunction or disjunction, round brackets must be used to disambiguate the intended meaning.

Exclusion of Attribute Values

Attribute values, represented by compound expression constraints, may also contain exclusions. When this occurs, the expression constraint is satisfied by any concept or expression which has at least one attribute (of the given type) whose value is satisfied by the compound constraint defined in the attribute value. For example, the expression constraint below represents the set of clinical findings, which have an associated morphology that is a descendant or self of ulcer and a descendant or self of hemorrhage, but not a descendant or self of obstruction.

   < 404684003 |Clinical finding|: 116676008 |Associated morphology| =
         ((<< 56208002 |Ulcer| AND << 50960005 |Hemorrhage|) MINUS << 26036001 |Obstruction|)

Not Equal to Attribute Value

It is also possible to simply state that an attribute value should not fall in a particular range. The example below is satisfied only by clinical findings which have an associated morphology that is not a descendant (or self) of obstruction.

   < 404684003 |Clinical finding|:
         116676008 |Associated morphology| != << 26036001 |Obstruction|

Using the long syntax, this expression constraint can be represented as:

   descendantOf 404684003 |Clinical finding|:
         116676008 |Associated morphology| NOT = descendantOrSelfOf 26036001 |Obstruction|

To prohibit an attribute from having a value in a particular range, a cardinality of [0..0] must be used. For example, the following expression constraint represents the set of clinical findings which have exactly zero (i.e. they do not have any) associated morphologies that are a descendant or self of obstruction.

   < 404684003 |Clinical finding|:
         [0..0] 116676008 |Associated morphology| = << 26036001 |Obstruction|

To prohibit an attribute from having a value outside a particular range, a cardinality of [0..0] is used in conjunction with the 'not equal to' comparison operator. For example, the following expression constraint represents the set of clinical findings which have exactly zero associated morphologies that are not a descendant or self of obstruction. In other words, clinical findings for which all associated morphologies (if any exist) are descendants (or self) of obstruction.

   < 404684003 |Clinical finding|:
         [0..0] 116676008 |Associated morphology| != << 26036001 |Obstruction|

If we also want to ensure that at least one associated morphology does exist (and all of these have a value which is a descendant or self of obstruction), then the following expression constraint can be used:

   < 404684003 |Clinical finding|:
         [0..0] 116676008 |Associated morphology| != << 26036001 |Obstruction| and
         [1..*] 116676008 |Associated morphology| = << 26036001 |Obstruction|

Note that the cardinality on the second attribute may be omitted, as [1..*] is assumed by default.