Skip to main content

AQL FROM ... CONTAINS

The CONTAINS operator allows filtering compositions based on the openEHR Reference Model objects (and archetype_IDs) present inside the particular data instance.

List of available RM classes

The following openEHR RM classes can be used in CONTAINS. Note that HIP EHRbase also supports the use of abstract classes from the openEHR RM.

  • ENTRY_CLASS
    • EVALUATION
    • OBSERVATION
    • INSTRUCTION
    • ACTION
  • CLUSTER
  • FEEDER_AUDIT
  • ELEMENT
  • EHR_STATUS
  • COMPOSITION
  • FOLDER (experimental)
  • HISTORY
  • EVENT
    • POINT_EVENT
    • INTERVAL_EVENT
  • ITEM_SINGLE
  • ITEM_LIST
  • ITEM_TABLE
  • ITEM_TREE
  • ITEM
  • ISM_TRANSITION
  • ACTIVITY
  • SECTION
  • EVENT_CONTEXT

CONTAINS operators

CONTAINS statements can be chained and nested using parenthesis and operators AND and OR. You can also use parentheses to control the order of bindings.

The NOT operator is currently not supported.

Examples

Example 1: Simple CONTAINS

The query retrieves all compositions for a specific electronic health record object that contain an observation of type body weight, regardless of which templates were used to define the structure of the composition.

SELECT
c,
FROM EHR e CONTAINS
COMPOSITION c CONTAINS
OBSERVATION o[openEHR-EHR-OBSERVATION.body_weight.v2]
WHERE e/ehr_id/value = 'd50c939a-7661-4ef1-a67b-5a57661263db'

Example 2: Complex CONTAINS

This example shows a more complex combination of CONTAINS statements, using the AND and OR operators along with parentheses. This ensures that only data following a certain structure or having entries for specific data, like the specimen used for laboratory tests, is queried.

SELECT
c/uid/value,
l as Test_Result,
s as Specimen
FROM EHR e CONTAINS
COMPOSITION c[openEHR-EHR-COMPOSITION.report-result.v1] CONTAINS
(CLUSTER y[openEHR-EHR-CLUSTER.case_identification.v0] and OBSERVATION l[openEHR-EHR-OBSERVATION.laboratory_test_result.v1] CONTAINS
(CLUSTER s[openEHR-EHR-CLUSTER.specimen.v1] and CLUSTER b[openEHR-EHR-CLUSTER.laboratory_test_panel.v0] CONTAINS
(CLUSTER d[openEHR-EHR-CLUSTER.laboratory_test_analyte.v1])))
WHERE e/ehr_id/value = 'd50c939a-7661-4ef1-a67b-5a57661263db'

Example 3: CONTAINS on ELEMENT

In some scenarios, directly searching for elements inside the electronic health record is required or convenient, especially when these are annotated by a value from a terminology like SNOMED CT or LOINC for unambiguous semantic annotation. The COMPOSTITION is needed within the CONTAINS statement as elements could also be part of objects like the EHR_STATUS.

SELECT
f
FROM EHR e CONTAINS
COMPOSITION c CONTAINS
ELEMENT f
WHERE
e/ehr_id/value= 'ce9f05ee-095c-4c86-901b-1838f5d8837b' AND
f/name/value = 'Blood Pressure'

Example 4: CONTAINS on abstract classes

This example demonstrates the use of abstract classes within the CONTAINS statement. Within the openEHR Reference Model, care entry classes (OBSERVATION, EVALUATION, ACTION, INSTRUCTION) inherit from the CARE_ENTRY class. Incorporating the CARE_ENTRY class in AQL retrieves data from all these entry classes, allowing selection of shared attributes like 'name' and 'archetype_details'.

SELECT
entry
FROM EHR e CONTAINS
ENTRY entry