Appendix

Acknowledgements

Primary Author

  • Thomas Beale, Ars Semantica; openEHR Foundation Management Board.

Contributors

This specification has benefited from formal and informal input from the openEHR and wider health informatics community. The openEHR Foundation would like to recognise the following people for their contributions.

  • Matija Kejžar, Senior Engineer, Better, Slovenia

  • Patrick Langford, NeuronSong LLC, Utah, USA

  • Claude Nanjo MA African Studies, M Public Health, Cognitive Medical Systems Inc., California, USA

  • Harold Solbrig, Mayo Clinic, Rochester, USA

  • Erik Sundvall PhD, Linkoping University, Sweden

  • Bert Verhees, ROSA Software, The Netherlands.

Trademarks

  • 'openEHR' is a registered trademark of the openEHR Foundation;

  • 'Java' is a registered trademark of Oracle Corporation;

  • 'C#' is a registered trademark of Microsoft;

  • 'OMG' and 'UML' are registered trademarks of the Object Management Group;

  • 'MagicDraw' is a registered trademark of NoMagic Inc;

  • 'Rational Software Architect' is a registered trademark of IBM Corporation.

Conformance

Conformance of a data or software artifact to an openEHR specification is determined by a formal test of that artifact against the relevant openEHR Implementation Technology Specification(s) (ITSs), such as an IDL interface or an XML-schema. Since ITSs are formal derivations from underlying models, ITS conformance indicates model conformance.

Previous Versions

Version 3.0.0

This version made major changes to the BMM_TYPE hierarchy and semantics, enabling generic inheritance by generic and non-generic classes to be represented.

Version 3.1.0

This version adds meta-classes for computational elements to BMM, including:

  • routines, variables, constants;

  • expressions (including assertions);

  • statements.

It makes various adjustments to the existing model attributes and classes. The BMM remains compatible with P_BMM 2.x, i.e. any existing .bmm file can be parsed to create a v 3.1.0 BMM instance.

A Note on Language

The elements of meta-models are sometimes named confusingly in the literature and within various programming language technologies. In this specification, we use the following terms:

class

generally refers to a class defined in a model expressed in BMM, i.e. an instance of a BMM meta-class;

meta-class

refers to a class in the BMM itself, such as BMM_CLASS, in order to clearly distinguish it from classes defined in models represented using BMM;

feature (of a class)

any stored or computed element of a class, including constants, attributes (properties) and routines (methods);

property

a stored class feature; also known as 'attribute';

routine

a computed class feature that may be either value-returning (a function) or work-performing (a procedure);

function

a routine that computes and returns a value; typically causes no side-effects in the object;

procedure

a routine that performs a computation; typically has side-effects;

generic (class or type)

a kind of class or type that has parameters of other types; known as 'template' type in some programming languages;

type

generally refers to a type defined in a model expressed in BMM, i.e. an instance of a BMM meta-type;

meta-type

refers to a type in the BMM itself, which is either a class (such as BMM_CLASS) or generically derived (meta-)type in the sense of being an instance generator, where the instances will be concrete type definitions in models represented using BMM.

Tooling

The openEHR Archie Library fully implements this specification in Java and may be used to build UI tools for compiling, viewing and editing BMM models.

The openEHR ADL Workbench (AWB) fully implements this specification, and provides a convenient way of illustrating BMM semantics. The screenshots used in this specification are all from the ADL Workbench. The tool is written in the Eiffel language, and is available as open source on Github. The BMM libraries can be found in the EOMF Github repository.

Amendment Record

Issue Details Raiser Completed

LANG Release 1.1.0 (unreleased)

4.0.1

SPECLANG-8. Classify EL_DECISION_TABLE under EL_TERMINAL;
Add read-only and writable meta-types for variables and properties;
Add routine, function and property signature meta-types.

T Beale

29 Apr 2022

4.0.0

SPECLANG-8. Simplify meta-model of features to single inheritance;
change BMM_PROCEDURE to return a special type similar to Haskell, Kotlin. Revert some 3.1.0 changes.

T Beale

09 Jun 2021

LANG Release 1.0.0

3.1.0

SPECLANG-2. Add Basic Meta-Model (BMM) spec to LANG component.

openEHR SEC

11 May 2020

Add EL_SIMPLE to distinguish complex expressions from terminals and operator expressions; Adjust BMM_CONSTANT to support computed constants;
Add EL_DECISION_TABLE, BMM_ACTION_TABLE classes and descendants;
Add BMM_INTERVAL_VALUE;
Add BMM_FEATURE_GROUP and BMM_VISIBILITY classes;
Rename BMM_SCHEMA.bmm_schema to bmm_model;
Remove unintended inheritance from BMM_SCHEMA to P_BMM_PACKAGE_CONTAINER;
Improve documentation in [Model Access Package].

T Beale

12 Oct 2020

Rename EL_ASSERTION to EL_BOOLEAN_EXPRESSION;
Extend literal meta-types to directly support container literals;
Add basic statement types to BMM;
Add external routine support;
Added note on multiple inheritance in Class Features section.

T Beale

25 Jun 2020

Remove inheritance to BMM_DEFINITIONS (assume static access);
Remove BMM_ENTITY class and 'Entities' section of document.

B Verhees,
T Beale

01 Jun 2020

Rename BMM_DEFINED_TYPE to BMM_EFFECTIVE_TYPE;
Rename BMM_ENTITY_TYPE to BMM_MODEL_TYPE;
Significant improvements to meta-type part of model;
Add Expression language meta-model;
Add abstract syntax examples to text;
Add description of default Any class and type;
Add BMM_MODEL.used_models;
Add creators and converters;
Add ROUTINE.body hook;
Add BMM_RESULT, EL_SCOPED_REF, EL_TYPE_REF;
Add BMM_MODULE.

T Beale

22 Apr 2020

Rename BMM_MODEL_ELEMENT to BMM_DECLARATION;
Rename BMM_VALUED to BMM_TYPED;
Rename BMM_REFERENCEABLE to BMM_FEATURE;
Introduce dual taxonomy for features based on scoped declarations and typing;
Add meta-model for functional entities. Re-structure packages. Modify BMM_FEATURE.signature to new meta-type, BMM_SIGNATURE.

T Beale

11 Nov 2019

Improve meta-model of Features: rename BMM_FORMAL_ELEMENT to BMM_REFERENCEABLE; move BMM_VALUE_RETURNING.type to BMM_EVALUABLE;
Add BMM_INDEXED_CONTAINER_TYPE, BMM_INDEXED_CONTAINER_PROPERTY, to support indexed containers like Hash<K, V>.

T Beale

10 Mar 2019

Improve meta-model of Enumerated types to include types restricted to a terminology or value set (may be used for terminology constraints);
Improve explanation and diagrams to do with types and classes.

T Beale

22 Feb 2019

Add feature elements BMM_ROUTINE, BMM_VALUED and descendants;
Change BMM_PROPERTY.is_mandatory to BMM_MUTABLE.is_nullable (reversed Boolean sense);
Made BMM_PACKAGE_CONTAINER abstract;
Moved name to BMM_MODEL_ELEMENT, replacing name in BMM_CLASS, BMM_PACKAGE, BMM_PROPERTY, and model_name in BMM_MODEL;
Marked BMM_PROPERTY.is_computed as obsolete (to be phased out);
Add BMM_PROPERTY.is_composition to distinguish part/whole from associations.

T Beale

15 Sep 2018

3.0.0

SPECLANG-2. Add Basic Meta-Model (BMM) spec to LANG component;
Separate P_BMM model and syntax to BMM Persistence specification;
refactor / tighten class model:
rename BMM_GENERIC_PARAMETER to BMM_PARAMETER_TYPE;
remove BMM_OPEN_TYPE; remove BMM_TYPE_ELEMENT;
add new type BMM_DEFINED_TYPE as parent of BMM_SIMPLE_TYPE and BMM_GENERIC_TYPE;
add new type BMM_UNITARY_TYPE as parent of BMM_DEFINED_TYPE and BMM_PARAMETER_TYPE;
redefine BMM_CLASS.ancestors to be of type BMM_DEFINED_TYPE;
redefine BMM_PARAMETER_TYPE.conforms_to to type_constraint of type BMM_DEFINED_TYPE;
correct BMM_CLASS.immediate_descendants to be of type List<BMM_CLASS>;
rename BMM_CLASSIFIER to BMM_ENTITY;
Support generic types as class ancestors;
Remove archetype-related meta-data.

T Beale

12 May 2018

2.2.2

Improve and update introductory text in the Overview section.

E Sundvall,
T Beale

03 Nov 2017

2.2.1

Remove BMM_CLASSIFIER.conformance_type_name;
Constrain BMM_GENERIC_PARAMETER.name to one character and upper case.

C Nanjo,
T Beale

02 Mar 2017

2.2.0

Rename BMM_CLASSIFIER.as_type_string to type_name and as_conformance_type_string to conformance_type_name.
Move and rename BMM_TYPE.as_display_type_string to BMM_CLASSIFIER.type_signature. Add redefinitions in relevant descendant classes.
Rename BMM_SIMPLE_TYPE_OPEN to BMM_OPEN_TYPE.
Add new class BMM_TYPE_ELEMENT in preparation for BMM 3 refactoring.
Rename BMM_SCHEMA to BMM_MODEL.

T Beale

20 Jun 2016

2.1.0

Initial writing based on ADL Workbench implementation.

T Beale

08 Feb 2016