Core Package

Overview

The core package, shown below, defines the main BMM model.

LANG bmm.core
Figure 1. bmm.core Package

Semantics

Basics

Three top-level classes define basic abstract semantics for all other entities in the BMM: BMM_MODEL_ELEMENT, BMM_CLASSIFIER and BMM_TYPE. The first of these introduces features common to all elements of any BMM, such as documentation. The class BMM_CLASSIFIER is the abstract parent of anything that functions as the type of a property (viz: classes, types and generic parameters), while its descendant BMM_TYPE defines the semantics of types of instances, described below.

The BMM_CLASSIFIER class has a small number of important features that establish formally the meaning of various kinds of class names, type names etc, as follows:

  • type_name: the effective type of an entity; for simple classes, this will just be the class name (BMM_CLASS.name); for generic and container classes it will be generic name such as List<T>, Interval<T> etc; for feature types it will be the declared type, i.e. a simple name, an open type name (e.g. T) or a generic type name (e.g. Interval<Time>);

  • type_signature: a form of the type name that can be used as a fully-defined type signature, which for generic classes includes generic constrainer types, giving a signature such as Interval<T:Ordered>;

  • conformance_type_name: a reduced form of the type useful in some circumstances that is either a simple class name, the contained type for a container type (e.g. ELEMENT from the type List<ELEMENT>), and the root type from a generic type (e.g. Interval from Interval<T>).

In addition, concrete classes such as BMM_CLASS and BMM_PROPERTY have a simple name property, corresponding to the literal names of these entities.

Classes and Types

One of the foundational concepts in the BMM is a distinction between class and type, in common with the type systems of the modern forms of most object-oriented languages. Classes are definitional entities, while 'type' has two meanings: as the static (design time) type of a class feature (property or function result) and as the dynamic (run-time) type of the object referred to by or computed by that feature. At design time, the type of a property in a BMM model can be one of the following:

  • a BMM_SIMPLE_TYPE - corresponds to a simple class;

  • a BMM_OPEN_TYPE - corresponds to a generic parameter type from the class type definition, e.g. T, U etc;

  • a BMM_GENERIC_TYPE - a type generated by the use of a generic type with filled type parameters, e.g. Interval<Time>;

  • a BMM_CONTAINER_TYPE - a type generated by the use of a linear container type such as List<T>, Hash<T,U> with actual generic parameters.

In object-oriented type theory, the last two are really the same thing, but the BMM treats them slightly differently for reasons of clarity: a BMM_CONTAINER_TYPE can be thought of as a 1:N counterpart to a BMM_SIMPLE_TYPE, whereas BMM_GENERIC_TYPE is typically used for objects considered to be singular, but whose types are a product of a special container and one or more parameter types.

Inheritance

The BMM supports single and multiple inheritance, although it does not distinguish between different types of inheritance relation as some programming languages do. The evaluation of inheritance relations defined in a BMM schema results in an acyclic graph such that ancestors and descendants can be visualised for any class. The following screen shot shows the ancestors view of a class OBSERVATION.

awb class ancestors
Figure 2. BMM class - ancestors view

The next screenshot shows the descendants view of one of the ancestor classes of the same class.

awb class descendants
Figure 3. BMM class - descendants view

Multiple inheritance is typically used in the definition of classes that have a Liskov substitution inheritance relation as well as an implementation inheritance relation. The following shows a class DV_INTERVAL<T> multiply inheriting from Interval<T> and DATA_VALUE.

awb multiple inheritance
Figure 4. BMM class - descendants view

Classes and Properties

Class properties are defined using the generic class BMM_PROPERTY <T: BMM_TYPE>. This approach provides a direct way of expressing the semantics of property meta-types as listed above. The properties of a class can be understood in two forms. In an original model definition, each class definition states the features it introduces with respect to its inheritance parents. We can think of this list of properties as a differential set. In contrast, the effective set of properties for a class is the result of evaluating these lists of properties down the inheritance hierarchy to obtain the flat set of properties. The features properties and flat_properties defined on BMM_CLASS provide access to these two lists for any class.

Class Definitions

BMM_DEFINITIONS Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_DEFINITIONS

Description

Definitions used by all BMM packages.

Inherit

BASIC_DEFINITIONS

Constants

Signature

Meaning

1..1

Bmm_internal_version: String

Current internal version of BMM meta-model, used to determine if a given schema can be processed by a given implementation of the model.

1..1

Schema_name_delimiter: String = "::"

Delimiter used to separate schema id from package path in a fully qualified path.

1..1

Package_name_delimiter: String = "."

Delimiter used to separate package names in a package path.

1..1

Bmm_schema_file_extension: String = ".bmm"

Extension used for BMM files.

1..1

Type_delimiter: Character = ':'

Appears between a name and a type in a declaration or type signature.

1..1

Generic_left_delimiter: Character = '<'

Left delimiter for generic class and generic type names, as used in List<T>.

1..1

Generic_right_delimiter: Character = '>'

Right delimiter for generic class and generic type names, as used in List<T>.

1..1

Generic_separator: Character = ','

Separator used in Generic types.

1..1

Generic_constraint_delimiter: Character = ':'

Delimiter between formal type parameter and constraint type, as used in Sortable<T: Ordered>.

1..1

Tuple_left_delim: Character = '['

Left delimiter of a Tuple type and also instance. Example:

  • [Integer, String] - a tuple type;

  • [3, "Quixote"] - a tuple.

1..1

Tuple_right_delim: Character = ']'

Right delimiter of a Tuple type and also instance.

1..1

Tuple_separator: Character = ','

Separator used in Tuple types and instances.

1..1

Constraint_left_delim: Character = '«'

Left delimiter used in serial form of instance constrained enumeration.

1..1

Constraint_right_delim: Character = '»'

Right delimiter used in serial form of instance constrained enumeration.

1..1

Metadata_bmm_version: String = "bmm_version"

Attribute name of logical attribute 'bmm_version' in .bmm schema file.

1..1

Metadata_schema_name: String = "schema_name"

Attribute name of logical attribute 'schema_name' in .bmm schema file.

1..1

Metadata_rm_publisher: String = "rm_publisher"

Attribute name of logical attribute 'rm_publisher' in .bmm schema file.

1..1

Metadata_rm_release: String = "rm_release"

Attribute name of logical attribute 'rm_release' in .bmm schema file.

1..1

Metadata_schema_revision: String = "schema_revision"

Attribute name of logical attribute 'schema_revision' in .bmm schema file.

1..1

Metadata_schema_lifecycle_state: String = "schema_lifecycle_state"

Attribute name of logical attribute 'schema_lifecycle_state' in .bmm schema file.

1..1

Metadata_schema_description: String = "schema_description"

Attribute name of logical attribute 'schema_description' in .bmm schema file.

1..1

Metadata_schema_path: String = "schema_path"

Path of schema file.

Functions

Signature

Meaning

1..1

Any_class (): BMM_SIMPLE_CLASS

built-in class definition corresponding to the top `Any' class.

1..1

Any_type (): BMM_SIMPLE_TYPE

Built-in type definition corresponding to the top `Any' type.

1..1

create_schema_id (
a_model_publisher: Any[1],
a_schema_name: Any[1],
a_model_release: String[1]
): String

Create schema id, formed from:

a_model_publisher '-' a_schema_name '-' a_model_release

e.g. openehr_rm_1.0.3, openehr_test_1.0.1, iso_13606_1_2008_2.1.2.

BMM_DEFINITIONS

Definitions used by all BMM packages.

Inherits: BASIC_DEFINITIONS

Constants

CR: Character = '\015' [1..1]

Carriage return character.
Inherited from BASIC_DEFINITIONS

LF: Character = '\012' [1..1]

Line feed character.
Inherited from BASIC_DEFINITIONS

Any_type: String = "Any" [1..1]

+ Inherited from BASIC_DEFINITIONS

Regex_any_pattern: String = ".*" [1..1]

+ Inherited from BASIC_DEFINITIONS

Default_encoding: String = "UTF-8" [1..1]

+ Inherited from BASIC_DEFINITIONS

Bmm_internal_version: String [1..1]

Current internal version of BMM meta-model, used to determine if a given schema can be processed by a given implementation of the model.

Schema_name_delimiter: String = "::" [1..1]

Delimiter used to separate schema id from package path in a fully qualified path.

Package_name_delimiter: String = "." [1..1]

Delimiter used to separate package names in a package path.

Bmm_schema_file_extension: String = ".bmm" [1..1]

Extension used for BMM files.

Type_delimiter: Character = ':' [1..1]

Appears between a name and a type in a declaration or type signature.

Generic_left_delimiter: Character = '<' [1..1]

Left delimiter for generic class and generic type names, as used in List<T>.

Generic_right_delimiter: Character = '>' [1..1]

Right delimiter for generic class and generic type names, as used in List<T>.

Generic_separator: Character = ',' [1..1]

Separator used in Generic types.

Generic_constraint_delimiter: Character = ':' [1..1]

Delimiter between formal type parameter and constraint type, as used in Sortable<T: Ordered>.

Tuple_left_delim: Character = '[' [1..1]

Left delimiter of a Tuple type and also instance. Example:

  • [Integer, String] - a tuple type;

  • [3, "Quixote"] - a tuple.

Tuple_right_delim: Character = ']' [1..1]

Right delimiter of a Tuple type and also instance.

Tuple_separator: Character = ',' [1..1]

Separator used in Tuple types and instances.

Constraint_left_delim: Character = '«' [1..1]

Left delimiter used in serial form of instance constrained enumeration.

Constraint_right_delim: Character = '»' [1..1]

Right delimiter used in serial form of instance constrained enumeration.

Metadata_bmm_version: String = "bmm_version" [1..1]

Attribute name of logical attribute 'bmm_version' in .bmm schema file.

Metadata_schema_name: String = "schema_name" [1..1]

Attribute name of logical attribute 'schema_name' in .bmm schema file.

Metadata_rm_publisher: String = "rm_publisher" [1..1]

Attribute name of logical attribute 'rm_publisher' in .bmm schema file.

Metadata_rm_release: String = "rm_release" [1..1]

Attribute name of logical attribute 'rm_release' in .bmm schema file.

Metadata_schema_revision: String = "schema_revision" [1..1]

Attribute name of logical attribute 'schema_revision' in .bmm schema file.

Metadata_schema_lifecycle_state: String = "schema_lifecycle_state" [1..1]

Attribute name of logical attribute 'schema_lifecycle_state' in .bmm schema file.

Metadata_schema_description: String = "schema_description" [1..1]

Attribute name of logical attribute 'schema_description' in .bmm schema file.

Metadata_schema_path: String = "schema_path" [1..1]

Path of schema file.

Functions

Any_class (): BMM_SIMPLE_CLASS [1..1]

built-in class definition corresponding to the top `Any' class.

Any_type (): BMM_SIMPLE_TYPE [1..1]

Built-in type definition corresponding to the top `Any' type.

create_schema_id (
a_model_publisher: Any[1],
a_schema_name: Any[1],
a_model_release: String[1]
): String [1..1]

Create schema id, formed from:

a_model_publisher '-' a_schema_name '-' a_model_release

e.g. openehr_rm_1.0.3, openehr_test_1.0.1, iso_13606_1_2008_2.1.2.

{
    "name": "BMM_DEFINITIONS",
    "documentation": "Definitions used by all BMM packages.",
    "ancestors": [
        "BASIC_DEFINITIONS"
    ],
    "constants": {
        "Bmm_internal_version": {
            "name": "Bmm_internal_version",
            "documentation": "Current internal version of BMM meta-model, used to determine if a given schema can be processed by a given implementation of the model.",
            "type": "String"
        },
        "Schema_name_delimiter": {
            "name": "Schema_name_delimiter",
            "documentation": "Delimiter used to separate schema id from package path in a fully qualified path.",
            "type": "String",
            "value": "\"::\""
        },
        "Package_name_delimiter": {
            "name": "Package_name_delimiter",
            "documentation": "Delimiter used to separate package names in a package path.",
            "type": "String",
            "value": "\".\""
        },
        "Bmm_schema_file_extension": {
            "name": "Bmm_schema_file_extension",
            "documentation": "Extension used for BMM files.",
            "type": "String",
            "value": "\".bmm\""
        },
        "Type_delimiter": {
            "name": "Type_delimiter",
            "documentation": "Appears between a name and a type in a declaration or type signature.",
            "type": "Character",
            "value": "':'"
        },
        "Generic_left_delimiter": {
            "name": "Generic_left_delimiter",
            "documentation": "Left delimiter for generic class and generic type names, as used in `List<T>`.",
            "type": "Character",
            "value": "'<'"
        },
        "Generic_right_delimiter": {
            "name": "Generic_right_delimiter",
            "documentation": "Right delimiter for generic class and generic type names, as used in `List<T>`.",
            "type": "Character",
            "value": "'>'"
        },
        "Generic_separator": {
            "name": "Generic_separator",
            "documentation": "Separator used in Generic types.",
            "type": "Character",
            "value": "','"
        },
        "Generic_constraint_delimiter": {
            "name": "Generic_constraint_delimiter",
            "documentation": "Delimiter between formal type parameter and constraint type, as used in `Sortable<T: Ordered>`.",
            "type": "Character",
            "value": "':'"
        },
        "Tuple_left_delim": {
            "name": "Tuple_left_delim",
            "documentation": "Left delimiter of a Tuple type and also instance. Example:\n\n* `[Integer, String]` - a tuple type;\n* `[3, \"Quixote\"]` - a tuple.",
            "type": "Character",
            "value": "'['"
        },
        "Tuple_right_delim": {
            "name": "Tuple_right_delim",
            "documentation": "Right delimiter of a Tuple type and also instance.",
            "type": "Character",
            "value": "']'"
        },
        "Tuple_separator": {
            "name": "Tuple_separator",
            "documentation": "Separator used in Tuple types and instances.",
            "type": "Character",
            "value": "','"
        },
        "Constraint_left_delim": {
            "name": "Constraint_left_delim",
            "documentation": "Left delimiter used in serial form of instance constrained enumeration.",
            "type": "Character",
            "value": "'«'"
        },
        "Constraint_right_delim": {
            "name": "Constraint_right_delim",
            "documentation": "Right delimiter used in serial form of instance constrained enumeration.",
            "type": "Character",
            "value": "'»'"
        },
        "Metadata_bmm_version": {
            "name": "Metadata_bmm_version",
            "documentation": "Attribute name of logical attribute 'bmm_version' in .bmm schema file.",
            "type": "String",
            "value": "\"bmm_version\""
        },
        "Metadata_schema_name": {
            "name": "Metadata_schema_name",
            "documentation": "Attribute name of logical attribute 'schema_name' in .bmm schema file.",
            "type": "String",
            "value": "\"schema_name\""
        },
        "Metadata_rm_publisher": {
            "name": "Metadata_rm_publisher",
            "documentation": "Attribute name of logical attribute 'rm_publisher' in .bmm schema file.",
            "type": "String",
            "value": "\"rm_publisher\""
        },
        "Metadata_rm_release": {
            "name": "Metadata_rm_release",
            "documentation": "Attribute name of logical attribute 'rm_release' in .bmm schema file.",
            "type": "String",
            "value": "\"rm_release\""
        },
        "Metadata_schema_revision": {
            "name": "Metadata_schema_revision",
            "documentation": "Attribute name of logical attribute 'schema_revision' in .bmm schema file.",
            "type": "String",
            "value": "\"schema_revision\""
        },
        "Metadata_schema_lifecycle_state": {
            "name": "Metadata_schema_lifecycle_state",
            "documentation": "Attribute name of logical attribute 'schema_lifecycle_state' in .bmm schema file.",
            "type": "String",
            "value": "\"schema_lifecycle_state\""
        },
        "Metadata_schema_description": {
            "name": "Metadata_schema_description",
            "documentation": "Attribute name of logical attribute 'schema_description' in .bmm schema file.",
            "type": "String",
            "value": "\"schema_description\""
        },
        "Metadata_schema_path": {
            "name": "Metadata_schema_path",
            "documentation": "Path of schema file.",
            "type": "String",
            "value": "\"schema_path\""
        }
    },
    "functions": {
        "Any_class": {
            "name": "Any_class",
            "documentation": "built-in class definition corresponding to the top `Any' class.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_CLASS"
            }
        },
        "Any_type": {
            "name": "Any_type",
            "documentation": "Built-in type definition corresponding to the top `Any' type.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_TYPE"
            }
        },
        "create_schema_id": {
            "name": "create_schema_id",
            "documentation": "Create schema id, formed from:\n\n`a_model_publisher '-' a_schema_name '-' a_model_release`\n\ne.g. `openehr_rm_1.0.3`, `openehr_test_1.0.1`, `iso_13606_1_2008_2.1.2`.",
            "parameters": {
                "a_model_publisher": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_model_publisher",
                    "type": "Any"
                },
                "a_schema_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_schema_name",
                    "type": "Any"
                },
                "a_model_release": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_model_release",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm definitions

BMM_MODEL Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_MODEL

Description

Definition of the root of a BMM model (along with what is inherited from BMM_SCHEMA_CORE).

Inherit

BMM_PACKAGE_CONTAINER, BMM_MODEL_METADATA

Attributes

Signature

Meaning

0..1

class_definitions: Hash<String,BMM_CLASS>

All classes in this model, keyed by type name.

0..1

used_models: List<BMM_MODEL>

List of other models 'used' (i.e. 'imported' by this model). Classes in the current model may refer to classes in a used model by specifying the other class’s scope meta-attribute.

Functions

Signature

Meaning

1..1

model_id (): String

Identifier of this model, lower-case, formed from:

<rm_publisher>_<model_name>_<rm_release>

E.g. "openehr_ehr_1.0.4".

1..1

class_definition (
a_name: String[1]
): BMM_CLASS

Retrieve the class definition corresponding to a_type_name (which may contain a generic part).

1..1

type_definition (): BMM_CLASS

Retrieve the class definition corresponding to a_type_name. If it contains a generic part, this will be removed if it is a fully open generic name, otherwise it will remain intact, i.e. if it is an effective generic name that identifies a BMM_GENERIC_CLASS_EFFECTIVE.

1..1

has_class_definition (
a_class_name: String[1]
): Boolean

True if a_class_name has a class definition in the model.

1..1

has_type_definition (
a_type_name: String[1]
): Boolean

True if a_type_name is already concretely known in the system, including if it is generic, which may be open, partially open or closed.

1..1

enumeration_definition (
a_name: String[1]
): BMM_ENUMERATION

Retrieve the enumeration definition corresponding to a_type_name.

0..1

primitive_types (): List<String>

List of keys in class_definitions of items marked as primitive types.

0..1

enumeration_types (): List<String>

List of keys in class_definitions of items that are enumeration types.

1..1

property_definition (): BMM_PROPERTY

Retrieve the property definition for a_prop_name in flattened class corresponding to a_type_name.

1..1

ms_conformant_property_type (
a_bmm_type_name: String[1],
a_bmm_property_name: String[1],
a_ms_property_name: String[1]
): Boolean

True if a_ms_property_type is a valid 'MS' dynamic type for a_property in BMM type a_bmm_type_name. 'MS' conformance means 'model-semantic' conformance, which abstracts away container types like List<>, Set<> etc and compares the dynamic type with the relation target type in the UML sense, i.e. regardless of whether there is single or multiple containment.

1..1

property_definition_at_path (): BMM_PROPERTY

Retrieve the property definition for a_property_path in flattened class corresponding to a_type_name.

1..1

class_definition_at_path (
a_type_name: String[1],
a_prop_path: String[1]
): BMM_CLASS

Retrieve the class definition for the class that owns the terminal attribute in a_prop_path in flattened class corresponding to a_type_name.

0..1

all_ancestor_classes (
a_class: String[1]
): List<String>

Return all ancestor types of a_class_name up to root class (usually Any, Object or something similar). Does not include current class. Returns empty list if none.

1..1

is_descendant_of (
a_class_name: String[1],
a_parent_class_name: String[1]
): Boolean

True if a_class_name is a descendant in the model of a_parent_class_name.

1..1

type_conforms_to (
a_desc_type: String[1],
an_anc_type: String[1]
): Boolean

Check conformance of a_desc_type to an_anc_type; the types may be generic, and may contain open generic parameters like 'T' etc. These are replaced with their appropriate constrainer types, or Any during the conformance testing process.

Conformance is found if:

  • [base class test] types are non-generic, and either type names are identical, or else a_desc_type has an_anc_type in its ancestors;

  • both types are generic and pass base class test; number of generic params matches, and each generic parameter type, after 'open parameter' substitution, recursively passes; type_name_conforms_to test

  • descendant type is generic and ancestor type is not, and they pass base classes test.

1..1

subtypes (
a_type: String[1]
): List<String>

Generate type substitutions for the supplied type, which may be simple, generic (closed, open or partially open), or a container type. In the generic and container cases, the result is the permutation of the base class type and type substitutions of all generic parameters.

Parameters
a_type

Name of a type.

1..1

any_class_definition (): BMM_SIMPLE_CLASS

BMM_SIMPLE_CLASS instance for the Any class. This may be defined in the BMM schema, but if not, use BMM_DEFINITIONS.any_class.

1..1

any_type_definition (): BMM_SIMPLE_TYPE

BMM_SIMPLE_TYPE instance for the Any type.

1..1

boolean_type_definition (): BMM_SIMPLE_TYPE

BMM_SIMPLE_TYPE instance for the Boolean type.

Invariants

Inv_top_level_scope: scope = self

BMM_MODEL

Definition of the root of a BMM model (along with what is inherited from BMM_SCHEMA_CORE).

Inherits: BMM_DECLARATION, BMM_PACKAGE_CONTAINER, BMM_MODEL_METADATA

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_PACKAGE_CONTAINER [1..1]

Model element within which a referenceable element is known.
Inherited from BMM_PACKAGE_CONTAINER

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

packages: Hash<String,BMM_PACKAGE> [0..1]

Child packages; keys all in upper case for guaranteed matching.
Inherited from BMM_PACKAGE_CONTAINER

rm_publisher: String [1..1]

Publisher of model expressed in the schema.
Inherited from BMM_MODEL_METADATA

rm_release: String [1..1]

Release of model expressed in the schema as a 3-part numeric, e.g. "3.1.0" .
Inherited from BMM_MODEL_METADATA

class_definitions: Hash<String,BMM_CLASS> [0..1]

All classes in this model, keyed by type name.

used_models: List<BMM_MODEL> [0..1]

List of other models 'used' (i.e. 'imported' by this model). Classes in the current model may refer to classes in a used model by specifying the other class’s scope meta-attribute.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

package_at_path (
a_path: String[1]
): BMM_PACKAGE [0..1]

Package at the path a_path.
Inherited from BMM_PACKAGE_CONTAINER

do_recursive_packages (
action: EL_PROCEDURE_AGENT[1]
): void [1..1]

Recursively execute action, which is a procedure taking a BMM_PACKAGE argument, on all members of packages.
Inherited from BMM_PACKAGE_CONTAINER

has_package_path (
a_path: String[1]
): Boolean [1..1]

True if there is a package at the path a_path; paths are delimited with delimiter {BMM_DEFINITIONS}_Package_name_delimiter_.
Inherited from BMM_PACKAGE_CONTAINER

model_id (): String [1..1]

Identifier of this model, lower-case, formed from:

<rm_publisher>_<model_name>_<rm_release>

E.g. "openehr_ehr_1.0.4".

class_definition (
a_name: String[1]
): BMM_CLASS [1..1]

Retrieve the class definition corresponding to a_type_name (which may contain a generic part).

type_definition (): BMM_CLASS [1..1]

Retrieve the class definition corresponding to a_type_name. If it contains a generic part, this will be removed if it is a fully open generic name, otherwise it will remain intact, i.e. if it is an effective generic name that identifies a BMM_GENERIC_CLASS_EFFECTIVE.

has_class_definition (
a_class_name: String[1]
): Boolean [1..1]

True if a_class_name has a class definition in the model.

has_type_definition (
a_type_name: String[1]
): Boolean [1..1]

True if a_type_name is already concretely known in the system, including if it is generic, which may be open, partially open or closed.

enumeration_definition (
a_name: String[1]
): BMM_ENUMERATION [1..1]

Retrieve the enumeration definition corresponding to a_type_name.

primitive_types (): List<String> [0..1]

List of keys in class_definitions of items marked as primitive types.

enumeration_types (): List<String> [0..1]

List of keys in class_definitions of items that are enumeration types.

property_definition (): BMM_PROPERTY [1..1]

Retrieve the property definition for a_prop_name in flattened class corresponding to a_type_name.

ms_conformant_property_type (
a_bmm_type_name: String[1],
a_bmm_property_name: String[1],
a_ms_property_name: String[1]
): Boolean [1..1]

True if a_ms_property_type is a valid 'MS' dynamic type for a_property in BMM type a_bmm_type_name. 'MS' conformance means 'model-semantic' conformance, which abstracts away container types like List<>, Set<> etc and compares the dynamic type with the relation target type in the UML sense, i.e. regardless of whether there is single or multiple containment.

property_definition_at_path (): BMM_PROPERTY [1..1]

Retrieve the property definition for a_property_path in flattened class corresponding to a_type_name.

class_definition_at_path (
a_type_name: String[1],
a_prop_path: String[1]
): BMM_CLASS [1..1]

Retrieve the class definition for the class that owns the terminal attribute in a_prop_path in flattened class corresponding to a_type_name.

all_ancestor_classes (
a_class: String[1]
): List<String> [0..1]

Return all ancestor types of a_class_name up to root class (usually Any, Object or something similar). Does not include current class. Returns empty list if none.

is_descendant_of (
a_class_name: String[1],
a_parent_class_name: String[1]
): Boolean [1..1]

True if a_class_name is a descendant in the model of a_parent_class_name.

type_conforms_to (
a_desc_type: String[1],
an_anc_type: String[1]
): Boolean [1..1]

Check conformance of a_desc_type to an_anc_type; the types may be generic, and may contain open generic parameters like 'T' etc. These are replaced with their appropriate constrainer types, or Any during the conformance testing process.

Conformance is found if:

  • [base class test] types are non-generic, and either type names are identical, or else a_desc_type has an_anc_type in its ancestors;

  • both types are generic and pass base class test; number of generic params matches, and each generic parameter type, after 'open parameter' substitution, recursively passes; type_name_conforms_to test

  • descendant type is generic and ancestor type is not, and they pass base classes test.

subtypes (
a_type: String[1]
): List<String> [1..1]

Generate type substitutions for the supplied type, which may be simple, generic (closed, open or partially open), or a container type. In the generic and container cases, the result is the permutation of the base class type and type substitutions of all generic parameters.

Parameters
a_type

Name of a type.

any_class_definition (): BMM_SIMPLE_CLASS [1..1]

BMM_SIMPLE_CLASS instance for the Any class. This may be defined in the BMM schema, but if not, use BMM_DEFINITIONS.any_class.

any_type_definition (): BMM_SIMPLE_TYPE [1..1]

BMM_SIMPLE_TYPE instance for the Any type.

boolean_type_definition (): BMM_SIMPLE_TYPE [1..1]

BMM_SIMPLE_TYPE instance for the Boolean type.

Invariants

Inv_top_level_scope: scope = self

{
    "name": "BMM_MODEL",
    "documentation": "Definition of the root of a BMM model (along with what is inherited from `BMM_SCHEMA_CORE`).",
    "ancestors": [
        "BMM_PACKAGE_CONTAINER",
        "BMM_MODEL_METADATA"
    ],
    "properties": {
        "class_definitions": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "class_definitions",
            "documentation": "All classes in this model, keyed by type name.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_CLASS"
                ]
            }
        },
        "used_models": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "used_models",
            "documentation": "List of other models 'used' (i.e. 'imported' by this model). Classes in the current model may refer to classes in a used model by specifying the other class's `_scope_` meta-attribute.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_MODEL"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "functions": {
        "model_id": {
            "name": "model_id",
            "documentation": "Identifier of this model, lower-case, formed from:\n\n`<rm_publisher>_<model_name>_<rm_release>`\n\nE.g. `\"openehr_ehr_1.0.4\"`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "class_definition": {
            "name": "class_definition",
            "documentation": "Retrieve the class definition corresponding to `_a_type_name_` (which may contain a generic part).",
            "parameters": {
                "a_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_CLASS"
            }
        },
        "type_definition": {
            "name": "type_definition",
            "documentation": "Retrieve the class definition corresponding to `_a_type_name_`. If it contains a generic part, this will be removed if it is a fully open generic name, otherwise it will remain intact, i.e. if it is an effective generic name that identifies a `BMM_GENERIC_CLASS_EFFECTIVE`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_CLASS"
            }
        },
        "has_class_definition": {
            "name": "has_class_definition",
            "documentation": "True if `_a_class_name_` has a class definition in the model.",
            "parameters": {
                "a_class_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_class_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "has_type_definition": {
            "name": "has_type_definition",
            "documentation": "True if `_a_type_name_` is already concretely known in the system, including if it is generic, which may be open, partially open or closed.",
            "parameters": {
                "a_type_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_type_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "enumeration_definition": {
            "name": "enumeration_definition",
            "documentation": "Retrieve the enumeration definition corresponding to `_a_type_name_`.",
            "parameters": {
                "a_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_ENUMERATION"
            }
        },
        "primitive_types": {
            "name": "primitive_types",
            "documentation": "List of keys in `_class_definitions_` of items marked as primitive types.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "enumeration_types": {
            "name": "enumeration_types",
            "documentation": "List of keys in `_class_definitions_` of items that are enumeration types.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "property_definition": {
            "name": "property_definition",
            "documentation": "Retrieve the property definition for `_a_prop_name_` in flattened class corresponding to `_a_type_name_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_PROPERTY"
            }
        },
        "ms_conformant_property_type": {
            "name": "ms_conformant_property_type",
            "documentation": "True if `_a_ms_property_type_` is a valid 'MS' dynamic type for `_a_property_` in BMM type `_a_bmm_type_name_`. 'MS' conformance means 'model-semantic' conformance, which abstracts away container types like `List<>`, `Set<>` etc and compares the dynamic type with the relation target type in the UML sense, i.e. regardless of whether there is single or multiple containment.",
            "parameters": {
                "a_bmm_type_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_bmm_type_name",
                    "type": "String"
                },
                "a_bmm_property_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_bmm_property_name",
                    "type": "String"
                },
                "a_ms_property_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_ms_property_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "property_definition_at_path": {
            "name": "property_definition_at_path",
            "documentation": "Retrieve the property definition for `_a_property_path_` in flattened class corresponding to `_a_type_name_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_PROPERTY"
            }
        },
        "class_definition_at_path": {
            "name": "class_definition_at_path",
            "documentation": "Retrieve the class definition for the class that owns the terminal attribute in `a_prop_path` in flattened class corresponding to `a_type_name`.",
            "parameters": {
                "a_type_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_type_name",
                    "type": "String"
                },
                "a_prop_path": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_prop_path",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_CLASS"
            }
        },
        "all_ancestor_classes": {
            "name": "all_ancestor_classes",
            "documentation": "Return all ancestor types of `_a_class_name_` up to root class (usually `Any`, `Object` or something similar). Does  not include current class. Returns empty list if none.",
            "parameters": {
                "a_class": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_class",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "is_descendant_of": {
            "name": "is_descendant_of",
            "documentation": "True if `_a_class_name_` is a descendant in the model of `_a_parent_class_name_`.",
            "parameters": {
                "a_class_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_class_name",
                    "type": "String"
                },
                "a_parent_class_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_parent_class_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "type_conforms_to": {
            "name": "type_conforms_to",
            "documentation": "Check conformance of `_a_desc_type_` to `_an_anc_type_`; the types may be generic, and may contain open generic parameters like 'T' etc. These are replaced with their appropriate constrainer types, or Any during the conformance testing process.\n\nConformance is found if:\n\n* [base class test] types are non-generic, and either type names are identical, or else `_a_desc_type_` has `_an_anc_type_` in its ancestors;\n* both types are generic and pass base class test; number of generic params matches, and each generic parameter type, after 'open parameter' substitution, recursively passes; `_type_name_conforms_to_` test\n* descendant type is generic and ancestor type is not, and they pass base classes test.",
            "parameters": {
                "a_desc_type": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_desc_type",
                    "type": "String"
                },
                "an_anc_type": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "an_anc_type",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "subtypes": {
            "name": "subtypes",
            "documentation": "Generate type substitutions for the supplied type, which may be simple, generic (closed, open or partially open), or a container type. In the generic and container cases, the result is the permutation of the base class type and type substitutions of all generic parameters.",
            "parameters": {
                "a_type": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_type",
                    "documentation": "Name of a type.",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            }
        },
        "any_class_definition": {
            "name": "any_class_definition",
            "documentation": "`BMM_SIMPLE_CLASS` instance for the `Any` class. This may be defined in the BMM schema, but if not, use `BMM_DEFINITIONS._any_class_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_CLASS"
            }
        },
        "any_type_definition": {
            "name": "any_type_definition",
            "documentation": "`BMM_SIMPLE_TYPE` instance for the `Any` type.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_TYPE"
            }
        },
        "boolean_type_definition": {
            "name": "boolean_type_definition",
            "documentation": "`BMM_SIMPLE_TYPE` instance for the `Boolean` type.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_TYPE"
            }
        }
    },
    "invariants": {
        "Inv_top_level_scope": "scope = self"
    }
}
bmm model

BMM_PACKAGE_CONTAINER Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PACKAGE_CONTAINER (abstract)

Description

A BMM model component that contains packages and classes.

Inherit

BMM_DECLARATION

Attributes

Signature

Meaning

0..1

packages: Hash<String,BMM_PACKAGE>

Child packages; keys all in upper case for guaranteed matching.

1..1
(redefined)

scope: BMM_PACKAGE_CONTAINER

Model element within which a referenceable element is known.

Functions

Signature

Meaning

0..1

package_at_path (
a_path: String[1]
): BMM_PACKAGE

Package at the path a_path.

1..1

do_recursive_packages (
action: EL_PROCEDURE_AGENT[1]
): void

Recursively execute action, which is a procedure taking a BMM_PACKAGE argument, on all members of packages.

1..1

has_package_path (
a_path: String[1]
): Boolean

True if there is a package at the path a_path; paths are delimited with delimiter {BMM_DEFINITIONS}_Package_name_delimiter_.

BMM_PACKAGE_CONTAINER (abstract)

A BMM model component that contains packages and classes.

Inherits: BMM_DECLARATION

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_PACKAGE_CONTAINER [1..1]

Model element within which a referenceable element is known.

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

packages: Hash<String,BMM_PACKAGE> [0..1]

Child packages; keys all in upper case for guaranteed matching.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

package_at_path (
a_path: String[1]
): BMM_PACKAGE [0..1]

Package at the path a_path.

do_recursive_packages (
action: EL_PROCEDURE_AGENT[1]
): void [1..1]

Recursively execute action, which is a procedure taking a BMM_PACKAGE argument, on all members of packages.

has_package_path (
a_path: String[1]
): Boolean [1..1]

True if there is a package at the path a_path; paths are delimited with delimiter {BMM_DEFINITIONS}_Package_name_delimiter_.

{
    "name": "BMM_PACKAGE_CONTAINER",
    "documentation": "A BMM model component that contains packages and classes.",
    "is_abstract": true,
    "ancestors": [
        "BMM_DECLARATION"
    ],
    "properties": {
        "packages": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "packages",
            "documentation": "Child packages; keys all in upper case for guaranteed matching.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_PACKAGE"
                ]
            }
        },
        "scope": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "scope",
            "documentation": "Model element within which a referenceable element is known.",
            "is_mandatory": true,
            "type": "BMM_PACKAGE_CONTAINER"
        }
    },
    "functions": {
        "package_at_path": {
            "name": "package_at_path",
            "documentation": "Package at the path `_a_path_`.",
            "parameters": {
                "a_path": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_path",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_PACKAGE"
            },
            "is_nullable": true
        },
        "do_recursive_packages": {
            "name": "do_recursive_packages",
            "documentation": "Recursively execute `_action_`, which is a procedure taking a `BMM_PACKAGE` argument, on all members of packages.",
            "parameters": {
                "action": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "action",
                    "type": "EL_PROCEDURE_AGENT"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "void"
            }
        },
        "has_package_path": {
            "name": "has_package_path",
            "documentation": "True if there is a package at the path `_a_path_`; paths are delimited with delimiter `{BMM_DEFINITIONS}_Package_name_delimiter_`.",
            "parameters": {
                "a_path": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_path",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        }
    }
}
bmm package container

BMM_PACKAGE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PACKAGE

Description

Abstraction of a package as a tree structure whose nodes can contain other packages and classes.

The name may be qualified if it is a top-level package.

Inherit

BMM_PACKAGE_CONTAINER

Attributes

Signature

Meaning

0..1

classes: List<BMM_CLASS>

Classes listed as being in this package.

Functions

Signature

Meaning

0..1

root_classes (): List<BMM_CLASS>

Obtain the set of top-level classes in this package, either from this package itself or by recursing into the structure until classes are obtained from child packages. Recurse into each child only far enough to find the first level of classes.

1..1

path (): String

Full path of this package back to root package.

BMM_PACKAGE

Abstraction of a package as a tree structure whose nodes can contain other packages and classes.

The name may be qualified if it is a top-level package.

Inherits: BMM_DECLARATION, BMM_PACKAGE_CONTAINER

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_PACKAGE_CONTAINER [1..1]

Model element within which a referenceable element is known.
Inherited from BMM_PACKAGE_CONTAINER

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

packages: Hash<String,BMM_PACKAGE> [0..1]

Child packages; keys all in upper case for guaranteed matching.
Inherited from BMM_PACKAGE_CONTAINER

classes: List<BMM_CLASS> [0..1]

Classes listed as being in this package.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

package_at_path (
a_path: String[1]
): BMM_PACKAGE [0..1]

Package at the path a_path.
Inherited from BMM_PACKAGE_CONTAINER

do_recursive_packages (
action: EL_PROCEDURE_AGENT[1]
): void [1..1]

Recursively execute action, which is a procedure taking a BMM_PACKAGE argument, on all members of packages.
Inherited from BMM_PACKAGE_CONTAINER

has_package_path (
a_path: String[1]
): Boolean [1..1]

True if there is a package at the path a_path; paths are delimited with delimiter {BMM_DEFINITIONS}_Package_name_delimiter_.
Inherited from BMM_PACKAGE_CONTAINER

root_classes (): List<BMM_CLASS> [0..1]

Obtain the set of top-level classes in this package, either from this package itself or by recursing into the structure until classes are obtained from child packages. Recurse into each child only far enough to find the first level of classes.

path (): String [1..1]

Full path of this package back to root package.

{
    "name": "BMM_PACKAGE",
    "documentation": "Abstraction of a package as a tree structure whose nodes can contain other packages and classes.\n\nThe `_name_` may be qualified if it is a top-level package.",
    "ancestors": [
        "BMM_PACKAGE_CONTAINER"
    ],
    "properties": {
        "classes": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "classes",
            "documentation": "Classes listed as being in this package.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_CLASS"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "functions": {
        "root_classes": {
            "name": "root_classes",
            "documentation": "Obtain the set of top-level classes in this package, either from this package itself or by recursing into the structure until classes are obtained from child packages. Recurse into each child only far enough to find the first level of classes.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "BMM_CLASS"
            },
            "is_nullable": true
        },
        "path": {
            "name": "path",
            "documentation": "Full path of this package back to root package.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm package

BMM_TYPE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_TYPE (abstract)

Description

Abstract idea of specifying a type in some context. This is not the same as 'defining' a class. A type specification is essentially a reference of some kind, that defines the type of an attribute, or function result or argument. It may include generic parameters that might or might not be bound. See subtypes.

Functions

Signature

Meaning

1..1
(abstract)

type_name (): String

Formal string form of the type as per UML.

1..1

type_signature (): String

Signature form of the type name, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

Defaults to the value of type_name().

1..1
(abstract)

is_abstract (): Boolean

If true, indicates an abstract class in a BMM model, or a type based on an abstract class, i.e. a type that cannot be directly instantiated.

1..1
(abstract)

is_primitive (): Boolean

If True, indicates that the entity in a BMM model is considered to relate to a primitive type set, i.e. be a primitive type, or be a definer of one.

1..1
(abstract)

unitary_type (): BMM_UNITARY_TYPE

Type with any container abstracted away; may be a formal generic type.

1..1
(abstract)

effective_type (): BMM_EFFECTIVE_TYPE

Type with any container abstracted away, and any formal parameter replaced by its effective constraint type.

1..1
(abstract)

flattened_type_list (): List<String>

Completely flattened list of type names, flattening out all generic parameters.

BMM_TYPE (abstract)

Abstract idea of specifying a type in some context. This is not the same as 'defining' a class. A type specification is essentially a reference of some kind, that defines the type of an attribute, or function result or argument. It may include generic parameters that might or might not be bound. See subtypes.

Functions

(abstract) type_name (): String [1..1]

Formal string form of the type as per UML.

type_signature (): String [1..1]

Signature form of the type name, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

Defaults to the value of type_name().

(abstract) is_abstract (): Boolean [1..1]

If true, indicates an abstract class in a BMM model, or a type based on an abstract class, i.e. a type that cannot be directly instantiated.

(abstract) is_primitive (): Boolean [1..1]

If True, indicates that the entity in a BMM model is considered to relate to a primitive type set, i.e. be a primitive type, or be a definer of one.

(abstract) unitary_type (): BMM_UNITARY_TYPE [1..1]

Type with any container abstracted away; may be a formal generic type.

(abstract) effective_type (): BMM_EFFECTIVE_TYPE [1..1]

Type with any container abstracted away, and any formal parameter replaced by its effective constraint type.

(abstract) flattened_type_list (): List<String> [1..1]

Completely flattened list of type names, flattening out all generic parameters.

{
    "name": "BMM_TYPE",
    "documentation": "Abstract idea of specifying a type in some context. This is not the same as 'defining' a class. A type specification is essentially a reference of some kind, that defines the type of an attribute, or function result or argument. It may include generic parameters that might or might not be bound. See subtypes.",
    "is_abstract": true,
    "functions": {
        "type_name": {
            "name": "type_name",
            "documentation": "Formal string form of the type as per UML.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "type_signature": {
            "name": "type_signature",
            "documentation": "Signature form of the type name, which for generics includes generic parameter constrainer types E.g. `Interval<T:Ordered>`.\n\nDefaults to the value of `_type_name()_`.\n",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "is_abstract": {
            "name": "is_abstract",
            "documentation": "If true, indicates an abstract class in a BMM model, or a type based on an abstract class, i.e. a type that cannot be directly instantiated.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "is_primitive": {
            "name": "is_primitive",
            "documentation": "If True, indicates that the entity in a BMM model is considered to relate to a primitive type set, i.e. be a primitive type, or be a definer of one.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "unitary_type": {
            "name": "unitary_type",
            "documentation": "Type with any container abstracted away; may be a formal generic type.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_UNITARY_TYPE"
            }
        },
        "effective_type": {
            "name": "effective_type",
            "documentation": "Type with any container abstracted away, and any formal parameter replaced by its effective constraint type.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_EFFECTIVE_TYPE"
            }
        },
        "flattened_type_list": {
            "name": "flattened_type_list",
            "documentation": "Completely flattened list of type names, flattening out all generic parameters.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            }
        }
    }
}
bmm type

BMM_CLASS Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_CLASS (abstract)

Description

Meta-type corresponding a class definition in an object model. Inheritance is specified by the ancestors attribute, which contains a list of types rather than classes. Inheritance is thus understood in BMM as a stated relationship between classes. The equivalent relationship between types is conformance.

unlike UML, the name is just the root name, even if the class is generic. Use type_name() to obtain the qualified type name.

Inherit

BMM_MODULE

Attributes

Signature

Meaning

0..1

ancestors: List<String>

List of immediate inheritance parents.

1..1

package: BMM_PACKAGE

Package this class belongs to.

0..1

properties: Hash<String,BMM_PROPERTY>

List of attributes defined in this class.

1..1

source_schema_id: String

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.

0..1

immediate_descendants: List<BMM_CLASS>

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.

1..1

is_override: Boolean

True if this definition overrides a class of the same name in an included schema.

0..1

constants: Hash<String,BMM_CONSTANT>

List of constants defined in this class.

0..1

functions: Hash<String,BMM_FUNCTION>

List of functions defined in this class.

0..1

procedures: Hash<String,BMM_PROCEDURE>

List of procedures defined in this class.

0..1

is_primitive: Boolean
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.

0..1

is_abstract: Boolean
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.

0..1

invariants: List<BMM_ASSERTION>

0..1

creators: List<String>

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.

0..1

converters: List<String>

Subset of creators that create a new instance from a single argument of another type.

0..1

feature_groups: List<BMM_FEATURE_GROUP>

List of feature groups in this class.

Functions

Signature

Meaning

1..1
(abstract)

type (): BMM_MODEL_TYPE

Generate a type object that represents the type for which this class is the definer.

0..1

all_ancestors (): List<String>

List of all inheritance parent class names, recursively.

0..1

all_descendants (): List<String>

Compute all descendants by following immediate_descendants.

0..1

suppliers (): List<String>

List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.

0..1

suppliers_non_primitive (): List<String>

Same as suppliers minus primitive types, as defined in input schema.

0..1

supplier_closure (): List<String>

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.

1..1

package_path (): String

Fully qualified package name, of form: package.package.

1..1

class_path (): String

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.

1..1

is_primitive (): Boolean

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.

1..1

is_abstract (): Boolean

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.

0..1

features (): List<BMM_CLASS_FEATURE>

List of all feature definitions introduced in this class.

0..1

flat_features (): List<BMM_CLASS_FEATURE>

Consolidated list of all feature definitions from this class and all inheritance ancestors.

0..1

flat_properties (): List<BMM_PROPERTY>

List of all properties due to current and ancestor classes, keyed by property name.

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1

BMM_CLASS (abstract)

Meta-type corresponding a class definition in an object model. Inheritance is specified by the ancestors attribute, which contains a list of types rather than classes. Inheritance is thus understood in BMM as a stated relationship between classes. The equivalent relationship between types is conformance.

unlike UML, the name is just the root name, even if the class is generic. Use type_name() to obtain the qualified type name.

Inherits: BMM_DECLARATION, BMM_MODULE

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_MODEL [1..1]

Model within which module is defined.
Inherited from BMM_MODULE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

ancestors: List<String> [0..1]

List of immediate inheritance parents.

package: BMM_PACKAGE [1..1]

Package this class belongs to.

properties: Hash<String,BMM_PROPERTY> [0..1]

List of attributes defined in this class.

source_schema_id: String [1..1]

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.

immediate_descendants: List<BMM_CLASS> [0..1]

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.

is_override: Boolean [1..1]

True if this definition overrides a class of the same name in an included schema.

constants: Hash<String,BMM_CONSTANT> [0..1]

List of constants defined in this class.

functions: Hash<String,BMM_FUNCTION> [0..1]

List of functions defined in this class.

procedures: Hash<String,BMM_PROCEDURE> [0..1]

List of procedures defined in this class.

is_primitive: Boolean [0..1]
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.

is_abstract: Boolean [0..1]
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.

invariants: List<BMM_ASSERTION> [0..1]

creators: List<String> [0..1]

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.

converters: List<String> [0..1]

Subset of creators that create a new instance from a single argument of another type.

feature_groups: List<BMM_FEATURE_GROUP> [0..1]

List of feature groups in this class.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) type (): BMM_MODEL_TYPE [1..1]

Generate a type object that represents the type for which this class is the definer.

all_ancestors (): List<String> [0..1]

List of all inheritance parent class names, recursively.

all_descendants (): List<String> [0..1]

Compute all descendants by following immediate_descendants.

suppliers (): List<String> [0..1]

List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.

suppliers_non_primitive (): List<String> [0..1]

Same as suppliers minus primitive types, as defined in input schema.

supplier_closure (): List<String> [0..1]

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.

package_path (): String [1..1]

Fully qualified package name, of form: package.package.

class_path (): String [1..1]

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.

is_primitive (): Boolean [1..1]

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.

is_abstract (): Boolean [1..1]

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.

features (): List<BMM_CLASS_FEATURE> [0..1]

List of all feature definitions introduced in this class.

flat_features (): List<BMM_CLASS_FEATURE> [0..1]

Consolidated list of all feature definitions from this class and all inheritance ancestors.

flat_properties (): List<BMM_PROPERTY> [0..1]

List of all properties due to current and ancestor classes, keyed by property name.

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1

{
    "name": "BMM_CLASS",
    "documentation": "Meta-type corresponding a class definition in an object model. Inheritance is specified by the `_ancestors_` attribute, which contains a list of _types_ rather than classes. Inheritance is thus understood in BMM as a stated relationship between classes. The equivalent relationship between types is conformance.\n\nNOTE: unlike UML, the `_name_` is just the root name, even if the class is generic. Use `_type_name()_` to obtain the qualified type name.",
    "is_abstract": true,
    "ancestors": [
        "BMM_MODULE"
    ],
    "properties": {
        "ancestors": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "ancestors",
            "documentation": "List of immediate inheritance parents.",
            "type_def": {
                "container_type": "List",
                "type": "String"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "package": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "package",
            "documentation": "Package this class belongs to.",
            "is_mandatory": true,
            "type": "BMM_PACKAGE"
        },
        "properties": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "properties",
            "documentation": "List of attributes defined in this class.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_PROPERTY"
                ]
            }
        },
        "source_schema_id": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "source_schema_id",
            "documentation": "Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.",
            "is_mandatory": true,
            "type": "String"
        },
        "immediate_descendants": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "immediate_descendants",
            "documentation": "List of computed references to base classes of immediate inheritance descendants, derived when members of `_ancestors_` are attached at creation time.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_CLASS"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "is_override": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_override",
            "documentation": "True if this definition overrides a class of the same name in an included schema.",
            "is_mandatory": true,
            "type": "Boolean"
        },
        "constants": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "constants",
            "documentation": "List of constants defined in this class.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_CONSTANT"
                ]
            }
        },
        "functions": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "functions",
            "documentation": "List of functions defined in this class.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_FUNCTION"
                ]
            }
        },
        "procedures": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "procedures",
            "documentation": "List of procedures defined in this class.",
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_PROCEDURE"
                ]
            }
        },
        "is_primitive": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_primitive",
            "documentation": "True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as `String`, `Date`, `Hash<K,V>` etc.",
            "type": "Boolean",
            "default": false
        },
        "is_abstract": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_abstract",
            "documentation": "True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.",
            "type": "Boolean",
            "default": false
        },
        "invariants": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "invariants",
            "type_def": {
                "container_type": "List",
                "type": "BMM_ASSERTION"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "creators": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "creators",
            "documentation": "Subset of `_procedures_` that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.",
            "type_def": {
                "container_type": "List",
                "type": "String"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "converters": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "converters",
            "documentation": "Subset of `_creators_` that create a new instance from a single argument of another type.",
            "type_def": {
                "container_type": "List",
                "type": "String"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "feature_groups": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "feature_groups",
            "documentation": "List of feature groups in this class.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_FEATURE_GROUP"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "functions": {
        "type": {
            "name": "type",
            "documentation": "Generate a type object that represents the type for which this class is the definer.",
            "is_abstract": true,
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_MODEL_TYPE"
            }
        },
        "all_ancestors": {
            "name": "all_ancestors",
            "documentation": "List of all inheritance parent class names, recursively.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "all_descendants": {
            "name": "all_descendants",
            "documentation": "Compute all descendants by following `_immediate_descendants_`.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "suppliers": {
            "name": "suppliers",
            "documentation": "List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be `Any` and this can always be assumed anyway). This list includes primitive types.\n",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "suppliers_non_primitive": {
            "name": "suppliers_non_primitive",
            "documentation": "Same as `suppliers` minus primitive types, as defined in input schema.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "supplier_closure": {
            "name": "supplier_closure",
            "documentation": "List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be `Any` and this can always be assumed anyway).  This list includes primitive types.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "package_path": {
            "name": "package_path",
            "documentation": "Fully qualified package name, of form: `package.package`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "class_path": {
            "name": "class_path",
            "documentation": "Fully qualified class name, of form: `package.package.CLASS` with package path in lower-case and class in original case.\n",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "is_primitive": {
            "name": "is_primitive",
            "documentation": "True if this class is designated a primitive type within the overall type system of the schema. Set from schema.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "is_abstract": {
            "name": "is_abstract",
            "documentation": "True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "features": {
            "name": "features",
            "documentation": "List of all feature definitions introduced in this class.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "BMM_CLASS_FEATURE"
            },
            "is_nullable": true
        },
        "flat_features": {
            "name": "flat_features",
            "documentation": "Consolidated list of all feature definitions from this class and all inheritance ancestors.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "BMM_CLASS_FEATURE"
            },
            "is_nullable": true
        },
        "flat_properties": {
            "name": "flat_properties",
            "documentation": "List of all properties due to current and ancestor classes, keyed by property name.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "BMM_PROPERTY"
            },
            "is_nullable": true
        }
    },
    "invariants": {
        "Inv_constructors": "for_all p in creators : procedures.has(p)",
        "Inv_converters": "for_all p in converters : creators.has(p) and p.arity() = 1"
    }
}
bmm class

BMM_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_PROPERTY (abstract)

Description

Meta-type of a property definition within a class definition of an object model. The is_composition attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.

Inherit

BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

Signature

Meaning

0..1

is_im_runtime: Boolean
{default = false}

True if this property is marked with info model im_runtime property.

0..1

is_im_infrastructure: Boolean
{default = false}

True if this property was marked with info model im_infrastructure flag.

0..1

is_composition: Boolean
{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.

Functions

Signature

Meaning

1..1

existence (): Multiplicity_interval

Interval form of 0..1, 1..1 etc, derived from is_nullable.

1..1

display_name (): String

Name of this property to display in UI.

Invariants

Inv_signature_no_args: signature.arguments = Void

BMM_PROPERTY (abstract)

Meta-type of a property definition within a class definition of an object model. The is_composition attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE

Attributes

type: BMM_TYPE [1..1]

Declared or inferred static type of the entity.
Inherited from BMM_TYPED

is_nullable: Boolean [0..1]
{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean [0..1]
{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List<BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean [0..1]
{default = false}

True if this property is marked with info model im_runtime property.

is_im_infrastructure: Boolean [0..1]
{default = false}

True if this property was marked with info model im_infrastructure flag.

is_composition: Boolean [0..1]
{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.

Functions

is_boolean (): Boolean

Post_result: Result = type().equal( {BMM_MODEL}.boolean_type_definition()) [1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): Multiplicity_interval [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.

display_name (): String [1..1]

Name of this property to display in UI.

Invariants

Inv_signature_no_args: signature.arguments = Void

{
    "name": "BMM_PROPERTY",
    "documentation": "Meta-type of a property definition within a class definition of an object model. The `_is_composition_` attribute indicates whether the property has sub-part or an association semantics with respect to the owning class.",
    "is_abstract": true,
    "ancestors": [
        "BMM_INSTANTIABLE",
        "BMM_CLASS_FEATURE"
    ],
    "properties": {
        "is_im_runtime": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_im_runtime",
            "documentation": "True if this property is marked with info model `_im_runtime_` property.",
            "type": "Boolean",
            "default": false
        },
        "is_im_infrastructure": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_im_infrastructure",
            "documentation": "True if this property was marked with info model `_im_infrastructure_` flag.",
            "type": "Boolean",
            "default": false
        },
        "is_composition": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_composition",
            "documentation": "True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.",
            "type": "Boolean",
            "default": false
        }
    },
    "functions": {
        "existence": {
            "name": "existence",
            "documentation": "Interval form of `0..1`, `1..1` etc, derived from `_is_nullable_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Multiplicity_interval"
            }
        },
        "display_name": {
            "name": "display_name",
            "documentation": "Name of this property to display in UI.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    },
    "invariants": {
        "Inv_signature_no_args": "signature.arguments = Void"
    }
}
bmm property

BMM_CONTAINER_PROPERTY Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_CONTAINER_PROPERTY

Description

Meta-type of for properties of linear container type, such as List<T> etc.

Inherit

BMM_PROPERTY

Attributes

Signature

Meaning

0..1

cardinality: Multiplicity_interval

Cardinality of this container.

1..1
(redefined)

type: BMM_CONTAINER_TYPE

Declared or inferred static type of the entity.

Functions

Signature

Meaning

1..1
(redefined)

display_name (): String

Name of this property in form name: ContainerTypeName<>.

BMM_CONTAINER_PROPERTY

Meta-type of for properties of linear container type, such as List<T> etc.

Inherits: BMM_TYPED, BMM_TYPED_FEATURE, BMM_DECLARATION, BMM_CLASS_ENTITY, BMM_INSTANTIABLE, BMM_CLASS_FEATURE, BMM_PROPERTY

Attributes

type: BMM_CONTAINER_TYPE [1..1]

Declared or inferred static type of the entity.

is_nullable: Boolean [0..1]
{default = false}

True if this element can be null (Void) at execution time. May be interpreted as optionality in subtypes..
Inherited from BMM_TYPED_FEATURE

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_CLASS [1..1]

Class within which a referenceable element is known.
Inherited from BMM_CLASS_FEATURE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

is_synthesised_generic: Boolean [0..1]
{default = false}

True if this feature was synthesised due to generic substitution in an inherited type, or further constraining of a formal generic parameter.
Inherited from BMM_CLASS_ENTITY

visibility: BMM_VISIBILITY [0..1]

Visibility of this item to client entities.
Inherited from BMM_CLASS_FEATURE

feature_extensions: List<BMM_FEATURE_EXTENSION> [0..1]

Extensions to feature-level meta-types.
Inherited from BMM_CLASS_FEATURE

group: BMM_FEATURE_GROUP [1..1]

Group containing this feature.
Inherited from BMM_CLASS_FEATURE

is_im_runtime: Boolean [0..1]
{default = false}

True if this property is marked with info model im_runtime property.
Inherited from BMM_PROPERTY

is_im_infrastructure: Boolean [0..1]
{default = false}

True if this property was marked with info model im_infrastructure flag.
Inherited from BMM_PROPERTY

is_composition: Boolean [0..1]
{default = false}

True if this property instance is a compositional sub-part of the owning class instance. Equivalent to 'composition' in UML associations (but missing from UML properties without associations) and also 'cascade-delete' semantics in ER schemas.
Inherited from BMM_PROPERTY

cardinality: Multiplicity_interval [0..1]

Cardinality of this container.

Functions

is_boolean (): Boolean

Post_result: Result = type().equal( {BMM_MODEL}.boolean_type_definition()) [1..1]

True if type is notionally Boolean (i.e. a BMM_SIMPLE_TYPE with type_name() = 'Boolean').
Inherited from BMM_TYPED

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

(abstract) signature (): BMM_SIGNATURE [1..1]

Formal signature of this element, in the form:

name [arg1_name: T_arg1, …​][:T_value]

Specific implementations in descendants.
Inherited from BMM_CLASS_ENTITY

existence (): Multiplicity_interval [1..1]

Interval form of 0..1, 1..1 etc, derived from is_nullable.
Inherited from BMM_PROPERTY

display_name (): String [1..1]

Name of this property in form name: ContainerTypeName<>.

Invariants

Inv_signature_no_args: signature.arguments = Void
Inherited from BMM_PROPERTY

{
    "name": "BMM_CONTAINER_PROPERTY",
    "documentation": "Meta-type of for properties of linear container type, such as List<T> etc.",
    "ancestors": [
        "BMM_PROPERTY"
    ],
    "properties": {
        "cardinality": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "cardinality",
            "documentation": "Cardinality of this container.",
            "type": "Multiplicity_interval"
        },
        "type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "type",
            "documentation": "Declared or inferred static type of the entity.",
            "is_mandatory": true,
            "type": "BMM_CONTAINER_TYPE"
        }
    },
    "functions": {
        "display_name": {
            "name": "display_name",
            "documentation": "Name of this property in form `name: ContainerTypeName<>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm container property

BMM_SIMPLE_TYPE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_SIMPLE_TYPE

Description

Type reference to a single type i.e. not generic or container type.

Inherit

BMM_MODEL_TYPE

Attributes

Signature

Meaning

1..1
(redefined)

base_class: BMM_SIMPLE_CLASS

Defining class of this type.

Functions

Signature

Meaning

1..1
(effected)

type_name (): String

Result is base_class.name.

1..1
(effected)

is_abstract (): Boolean

Result is base_class.is_abstract.

1..1
(effected)

flattened_type_list (): List<String>

Result is base_class.name .

1..1

effective_base_class (): BMM_SIMPLE_CLASS

Main design class for this type, from which properties etc can be extracted.

BMM_SIMPLE_TYPE

Type reference to a single type i.e. not generic or container type.

Inherits: BMM_TYPE, BMM_UNITARY_TYPE, BMM_EFFECTIVE_TYPE, BMM_MODEL_TYPE

Attributes

value_constraint: BMM_VALUE_SET_SPEC [0..1]

+ Inherited from BMM_MODEL_TYPE

base_class: BMM_SIMPLE_CLASS [1..1]

Defining class of this type.

Functions

type_name (): String [1..1]

Result is base_class.name.

type_signature (): String [1..1]

Signature form of the type name, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

Defaults to the value of type_name().
Inherited from BMM_TYPE

is_abstract (): Boolean [1..1]

Result is base_class.is_abstract.

is_primitive (): Boolean

Post_validity: Result = base_class.is_primitive [1..1]

Result = base_class.is_primitive.
Inherited from BMM_MODEL_TYPE

unitary_type (): BMM_UNITARY_TYPE [1..1]

Result = self.
Inherited from BMM_UNITARY_TYPE

effective_type (): BMM_EFFECTIVE_TYPE [1..1]

Result = self.
Inherited from BMM_EFFECTIVE_TYPE

flattened_type_list (): List<String> [1..1]

Result is base_class.name .

type_base_name (): String [1..1]

Result = base_class.name.
Inherited from BMM_MODEL_TYPE

effective_base_class (): BMM_SIMPLE_CLASS [1..1]

Main design class for this type, from which properties etc can be extracted.

{
    "name": "BMM_SIMPLE_TYPE",
    "documentation": "Type reference to a single type i.e. not generic or container type.",
    "ancestors": [
        "BMM_MODEL_TYPE"
    ],
    "properties": {
        "base_class": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "base_class",
            "documentation": "Defining class of this type.",
            "is_mandatory": true,
            "type": "BMM_SIMPLE_CLASS"
        }
    },
    "functions": {
        "type_name": {
            "name": "type_name",
            "documentation": "Result is `_base_class.name_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "is_abstract": {
            "name": "is_abstract",
            "documentation": "Result is `_base_class.is_abstract_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "flattened_type_list": {
            "name": "flattened_type_list",
            "documentation": "Result is `_base_class.name_` .",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            }
        },
        "effective_base_class": {
            "name": "effective_base_class",
            "documentation": "Main design class for this type, from which properties etc can be extracted.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_SIMPLE_CLASS"
            }
        }
    }
}
bmm simple type

BMM_CONTAINER_TYPE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_CONTAINER_TYPE

Description

Meta-type that specifies linear containers with a generic parameter corresponding to the type of contained item, and whose container type is a generic type such as List<T>, Set<T> etc.

Inherit

BMM_TYPE

Attributes

Signature

Meaning

1..1

container_class: BMM_GENERIC_CLASS

The type of the container. This converts to the root_type in BMM_GENERIC_TYPE.

1..1

item_type: BMM_UNITARY_TYPE

The container item type.

0..1

is_ordered: Boolean
{default = true}

True indicates that order of the items in the container attribute is considered significant and must be preserved, e.g. across sessions, serialisation, deserialisation etc. Otherwise known as 'list' semantics.

0..1

is_unique: Boolean
{default = false}

True indicates that only unique instances of items in the container are allowed. Otherwise known as 'set' semantics.

Functions

Signature

Meaning

1..1
(effected)

type_name (): String

Return full type name, e.g. List<ELEMENT>.

1..1
(effected)

is_abstract (): Boolean

Post_is_abstract: Result = container_type.is_abstract

True if the container class is abstract.

1..1
(effected)

flattened_type_list (): List<String>

Post_result: Result = item_type.flattened_type_list

Flattened list of type names of item_type, i.e. item_type.flattened_type_list().

1..1
(effected)

unitary_type (): BMM_UNITARY_TYPE

Return item_type.

1..1
(effected)

is_primitive (): Boolean

Post_validity: Result = base_class.is_primitive
Post_result: Result = item_type.is_primitive

True if item_type is primitive.

1..1
(effected)

effective_type (): BMM_EFFECTIVE_TYPE

Return item_type.effective_type().

BMM_CONTAINER_TYPE

Meta-type that specifies linear containers with a generic parameter corresponding to the type of contained item, and whose container type is a generic type such as List<T>, Set<T> etc.

Inherits: BMM_TYPE

Attributes

container_class: BMM_GENERIC_CLASS [1..1]

The type of the container. This converts to the root_type in BMM_GENERIC_TYPE.

item_type: BMM_UNITARY_TYPE [1..1]

The container item type.

is_ordered: Boolean [0..1]
{default = true}

True indicates that order of the items in the container attribute is considered significant and must be preserved, e.g. across sessions, serialisation, deserialisation etc. Otherwise known as 'list' semantics.

is_unique: Boolean [0..1]
{default = false}

True indicates that only unique instances of items in the container are allowed. Otherwise known as 'set' semantics.

Functions

type_name (): String [1..1]

Return full type name, e.g. List<ELEMENT>.

type_signature (): String [1..1]

Signature form of the type name, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

Defaults to the value of type_name().
Inherited from BMM_TYPE

is_abstract (): Boolean

Post_is_abstract: Result = container_type.is_abstract [1..1]

True if the container class is abstract.

is_primitive (): Boolean

Post_validity: Result = base_class.is_primitive
Post_result: Result = item_type.is_primitive [1..1]

True if item_type is primitive.

unitary_type (): BMM_UNITARY_TYPE [1..1]

Return item_type.

effective_type (): BMM_EFFECTIVE_TYPE [1..1]

Return item_type.effective_type().

flattened_type_list (): List<String>

Post_result: Result = item_type.flattened_type_list [1..1]

Flattened list of type names of item_type, i.e. item_type.flattened_type_list().

{
    "name": "BMM_CONTAINER_TYPE",
    "documentation": "Meta-type that specifies linear containers with a generic parameter corresponding to the type of contained item, and whose container type is a generic type such as `List<T>`, `Set<T>` etc.",
    "ancestors": [
        "BMM_TYPE"
    ],
    "properties": {
        "container_class": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "container_class",
            "documentation": "The type of the container. This converts to the `_root_type_` in `BMM_GENERIC_TYPE`.",
            "is_mandatory": true,
            "type": "BMM_GENERIC_CLASS"
        },
        "item_type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "item_type",
            "documentation": "The container item type.",
            "is_mandatory": true,
            "type": "BMM_UNITARY_TYPE"
        },
        "is_ordered": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_ordered",
            "documentation": "True indicates that order of the items in the container attribute is considered significant and must be preserved, e.g. across sessions, serialisation, deserialisation etc. Otherwise known as 'list' semantics.",
            "type": "Boolean",
            "default": true
        },
        "is_unique": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "is_unique",
            "documentation": "True indicates that only unique instances of items in the container are allowed. Otherwise known as 'set' semantics.",
            "type": "Boolean",
            "default": false
        }
    },
    "functions": {
        "type_name": {
            "name": "type_name",
            "documentation": "Return full type name, e.g. `List<ELEMENT>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "is_abstract": {
            "name": "is_abstract",
            "documentation": "True if the container class is abstract.",
            "post_conditions": {
                "Post_is_abstract": "Result = container_type.is_abstract"
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "flattened_type_list": {
            "name": "flattened_type_list",
            "documentation": "Flattened list of type names of `_item_type_`, i.e. `_item_type.flattened_type_list_()`.",
            "post_conditions": {
                "Post_result": "Result = item_type.flattened_type_list"
            },
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            }
        },
        "unitary_type": {
            "name": "unitary_type",
            "documentation": "Return `_item_type_`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_UNITARY_TYPE"
            }
        },
        "is_primitive": {
            "name": "is_primitive",
            "documentation": "True if `_item_type_` is primitive.",
            "post_conditions": {
                "Post_validity": "Result = base_class.is_primitive",
                "Post_result": "Result = item_type.is_primitive"
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "effective_type": {
            "name": "effective_type",
            "documentation": "Return `_item_type.effective_type_()`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_EFFECTIVE_TYPE"
            }
        }
    }
}
bmm container type

BMM_INDEXED_CONTAINER_TYPE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_INDEXED_CONTAINER_TYPE

Description

Meta-type of linear container type that indexes the contained items in the manner of a standard Hash table, map or dictionary.

Inherit

BMM_CONTAINER_TYPE

Attributes

Signature

Meaning

1..1

index_type: BMM_SIMPLE_TYPE

Type of the element index, typically String or Integer, but may be a numeric type or indeed any type from which a hash value can be derived.

Functions

Signature

Meaning

1..1
(redefined)

type_name (): String

Return full type name, e.g. HashMap<String, ELEMENT>.

BMM_INDEXED_CONTAINER_TYPE

Meta-type of linear container type that indexes the contained items in the manner of a standard Hash table, map or dictionary.

Inherits: BMM_TYPE, BMM_CONTAINER_TYPE

Attributes

container_class: BMM_GENERIC_CLASS [1..1]

The type of the container. This converts to the root_type in BMM_GENERIC_TYPE.
Inherited from BMM_CONTAINER_TYPE

item_type: BMM_UNITARY_TYPE [1..1]

The container item type.
Inherited from BMM_CONTAINER_TYPE

is_ordered: Boolean [0..1]
{default = true}

True indicates that order of the items in the container attribute is considered significant and must be preserved, e.g. across sessions, serialisation, deserialisation etc. Otherwise known as 'list' semantics.
Inherited from BMM_CONTAINER_TYPE

is_unique: Boolean [0..1]
{default = false}

True indicates that only unique instances of items in the container are allowed. Otherwise known as 'set' semantics.
Inherited from BMM_CONTAINER_TYPE

index_type: BMM_SIMPLE_TYPE [1..1]

Type of the element index, typically String or Integer, but may be a numeric type or indeed any type from which a hash value can be derived.

Functions

type_name (): String [1..1]

Return full type name, e.g. HashMap<String, ELEMENT>.

type_signature (): String [1..1]

Signature form of the type name, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

Defaults to the value of type_name().
Inherited from BMM_TYPE

is_abstract (): Boolean

Post_is_abstract: Result = container_type.is_abstract [1..1]

True if the container class is abstract.
Inherited from BMM_CONTAINER_TYPE

is_primitive (): Boolean

Post_validity: Result = base_class.is_primitive
Post_result: Result = item_type.is_primitive [1..1]

True if item_type is primitive.
Inherited from BMM_CONTAINER_TYPE

unitary_type (): BMM_UNITARY_TYPE [1..1]

Return item_type.
Inherited from BMM_CONTAINER_TYPE

effective_type (): BMM_EFFECTIVE_TYPE [1..1]

Return item_type.effective_type().
Inherited from BMM_CONTAINER_TYPE

flattened_type_list (): List<String>

Post_result: Result = item_type.flattened_type_list [1..1]

Flattened list of type names of item_type, i.e. item_type.flattened_type_list().
Inherited from BMM_CONTAINER_TYPE

{
    "name": "BMM_INDEXED_CONTAINER_TYPE",
    "documentation": "Meta-type of linear container type that indexes the contained items in the manner of a standard Hash table, map or dictionary.",
    "ancestors": [
        "BMM_CONTAINER_TYPE"
    ],
    "properties": {
        "index_type": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "index_type",
            "documentation": "Type of the element index, typically `String` or `Integer`, but may be a numeric type or indeed any type from which a hash value can be derived.",
            "is_mandatory": true,
            "type": "BMM_SIMPLE_TYPE"
        }
    },
    "functions": {
        "type_name": {
            "name": "type_name",
            "documentation": "Return full type name, e.g. `HashMap<String, ELEMENT>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm indexed container type

BMM_GENERIC_TYPE Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_GENERIC_TYPE

Description

Meta-type based on a non-container generic class, e.g. Packet<Header>.

Inherit

BMM_MODEL_TYPE

Attributes

Signature

Meaning

1..1

generic_parameters: List<BMM_UNITARY_TYPE>

Generic parameters of the root_type in this type specifier. The order must match the order of the owning class’s formal generic parameter declarations, and the types may be defined types or formal parameter types.

1..1
(redefined)

base_class: BMM_GENERIC_CLASS

Defining generic class of this type.

Functions

Signature

Meaning

1..1
(effected)

type_name (): String

Return the full name of the type including generic parameters, e.g. DV_INTERVAL<T>, TABLE<List<THING>,String>.

1..1
(redefined)

type_signature (): String

Signature form of the type, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

1..1
(effected)

is_abstract (): Boolean

True if base_class.is_abstract or if any (non-open) parameter type is abstract.

1..1
(effected)

flattened_type_list (): List<String>

Result is base_class.name followed by names of all generic parameter type names, which may be open or closed.

1..1

is_partially_closed (): Boolean

Returns True if there is any substituted generic parameter.

1..1

effective_base_class (): BMM_GENERIC_CLASS

Effective underlying class for this type, abstracting away any container type.

1..1

is_open (): Boolean

True if all generic parameters from ancestor generic types have been substituted in this type.

BMM_GENERIC_TYPE

Meta-type based on a non-container generic class, e.g. Packet<Header>.

Inherits: BMM_TYPE, BMM_UNITARY_TYPE, BMM_EFFECTIVE_TYPE, BMM_MODEL_TYPE

Attributes

value_constraint: BMM_VALUE_SET_SPEC [0..1]

+ Inherited from BMM_MODEL_TYPE

base_class: BMM_GENERIC_CLASS [1..1]

Defining generic class of this type.

generic_parameters: List<BMM_UNITARY_TYPE> [1..1]

Generic parameters of the root_type in this type specifier. The order must match the order of the owning class’s formal generic parameter declarations, and the types may be defined types or formal parameter types.

Functions

type_name (): String [1..1]

Return the full name of the type including generic parameters, e.g. DV_INTERVAL<T>, TABLE<List<THING>,String>.

type_signature (): String [1..1]

Signature form of the type, which for generics includes generic parameter constrainer types E.g. Interval<T:Ordered>.

is_abstract (): Boolean [1..1]

True if base_class.is_abstract or if any (non-open) parameter type is abstract.

is_primitive (): Boolean

Post_validity: Result = base_class.is_primitive [1..1]

Result = base_class.is_primitive.
Inherited from BMM_MODEL_TYPE

unitary_type (): BMM_UNITARY_TYPE [1..1]

Result = self.
Inherited from BMM_UNITARY_TYPE

effective_type (): BMM_EFFECTIVE_TYPE [1..1]

Result = self.
Inherited from BMM_EFFECTIVE_TYPE

flattened_type_list (): List<String> [1..1]

Result is base_class.name followed by names of all generic parameter type names, which may be open or closed.

type_base_name (): String [1..1]

Result = base_class.name.
Inherited from BMM_MODEL_TYPE

is_partially_closed (): Boolean [1..1]

Returns True if there is any substituted generic parameter.

effective_base_class (): BMM_GENERIC_CLASS [1..1]

Effective underlying class for this type, abstracting away any container type.

is_open (): Boolean [1..1]

True if all generic parameters from ancestor generic types have been substituted in this type.

{
    "name": "BMM_GENERIC_TYPE",
    "documentation": "Meta-type based on a non-container generic class, e.g. `Packet<Header>`.",
    "ancestors": [
        "BMM_MODEL_TYPE"
    ],
    "properties": {
        "generic_parameters": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "generic_parameters",
            "documentation": "Generic parameters of the `_root_type_` in this type specifier. The order must match the order of the owning class's formal generic parameter declarations, and the types may be defined types or formal parameter types.",
            "is_mandatory": true,
            "type_def": {
                "container_type": "List",
                "type": "BMM_UNITARY_TYPE"
            },
            "cardinality": {
                "lower": 1,
                "upper_unbounded": true
            }
        },
        "base_class": {
            "_type": "P_BMM_SINGLE_PROPERTY",
            "name": "base_class",
            "documentation": "Defining generic class of this type.",
            "is_mandatory": true,
            "type": "BMM_GENERIC_CLASS"
        }
    },
    "functions": {
        "type_name": {
            "name": "type_name",
            "documentation": "Return the full name of the type including generic parameters, e.g. `DV_INTERVAL<T>`, `TABLE<List<THING>,String>`.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "type_signature": {
            "name": "type_signature",
            "documentation": "Signature form of the type, which for generics includes generic parameter constrainer types E.g. `Interval<T:Ordered>`.\n",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        },
        "is_abstract": {
            "name": "is_abstract",
            "documentation": "True if `_base_class.is_abstract_` or if any (non-open) parameter type is abstract.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "flattened_type_list": {
            "name": "flattened_type_list",
            "documentation": "Result is `_base_class.name_` followed by names of all generic parameter type names, which may be open or closed.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            }
        },
        "is_partially_closed": {
            "name": "is_partially_closed",
            "documentation": "Returns True if there is any substituted generic parameter.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        },
        "effective_base_class": {
            "name": "effective_base_class",
            "documentation": "Effective underlying class for this type, abstracting away any container type.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_GENERIC_CLASS"
            }
        },
        "is_open": {
            "name": "is_open",
            "documentation": "True if all generic parameters from ancestor generic types have been substituted in this type.",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "Boolean"
            }
        }
    }
}
bmm generic type

BMM_GENERIC_CLASS Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_GENERIC_CLASS

Description

Definition of a generic class in an object model.

Inherit

BMM_CLASS

Attributes

Signature

Meaning

1..1

generic_parameters: Hash<String,BMM_PARAMETER_TYPE>

List of formal generic parameters, keyed by name. These are defined either directly on this class or by the inclusion of an ancestor class which is generic.

Functions

Signature

Meaning

0..1
(redefined)

suppliers (): List<String>

Add suppliers from generic parameters.

1..1
(effected)

type (): BMM_GENERIC_TYPE

Generate a fully open BMM_GENERIC_TYPE instance that corresponds to this class definition

1..1

generic_parameter_conformance_type (
a_name: String[1]
): String

For a generic class, type to which generic parameter a_name conforms e.g. if this class is Interval <T:Comparable> then the Result will be the single type Comparable. For an unconstrained type T, the Result will be Any.

BMM_GENERIC_CLASS

Definition of a generic class in an object model.

Inherits: BMM_DECLARATION, BMM_MODULE, BMM_CLASS

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_MODEL [1..1]

Model within which module is defined.
Inherited from BMM_MODULE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

ancestors: List<String> [0..1]

List of immediate inheritance parents.
Inherited from BMM_CLASS

package: BMM_PACKAGE [1..1]

Package this class belongs to.
Inherited from BMM_CLASS

properties: Hash<String,BMM_PROPERTY> [0..1]

List of attributes defined in this class.
Inherited from BMM_CLASS

source_schema_id: String [1..1]

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.
Inherited from BMM_CLASS

immediate_descendants: List<BMM_CLASS> [0..1]

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.
Inherited from BMM_CLASS

is_override: Boolean [1..1]

True if this definition overrides a class of the same name in an included schema.
Inherited from BMM_CLASS

constants: Hash<String,BMM_CONSTANT> [0..1]

List of constants defined in this class.
Inherited from BMM_CLASS

functions: Hash<String,BMM_FUNCTION> [0..1]

List of functions defined in this class.
Inherited from BMM_CLASS

procedures: Hash<String,BMM_PROCEDURE> [0..1]

List of procedures defined in this class.
Inherited from BMM_CLASS

is_primitive: Boolean [0..1]
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.
Inherited from BMM_CLASS

is_abstract: Boolean [0..1]
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.
Inherited from BMM_CLASS

invariants: List<BMM_ASSERTION> [0..1]

+ Inherited from BMM_CLASS

creators: List<String> [0..1]

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.
Inherited from BMM_CLASS

converters: List<String> [0..1]

Subset of creators that create a new instance from a single argument of another type.
Inherited from BMM_CLASS

feature_groups: List<BMM_FEATURE_GROUP> [0..1]

List of feature groups in this class.
Inherited from BMM_CLASS

generic_parameters: Hash<String,BMM_PARAMETER_TYPE> [1..1]

List of formal generic parameters, keyed by name. These are defined either directly on this class or by the inclusion of an ancestor class which is generic.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

type (): BMM_GENERIC_TYPE [1..1]

Generate a fully open BMM_GENERIC_TYPE instance that corresponds to this class definition

all_ancestors (): List<String> [0..1]

List of all inheritance parent class names, recursively.
Inherited from BMM_CLASS

all_descendants (): List<String> [0..1]

Compute all descendants by following immediate_descendants.
Inherited from BMM_CLASS

suppliers (): List<String> [0..1]

Add suppliers from generic parameters.

suppliers_non_primitive (): List<String> [0..1]

Same as suppliers minus primitive types, as defined in input schema.
Inherited from BMM_CLASS

supplier_closure (): List<String> [0..1]

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

package_path (): String [1..1]

Fully qualified package name, of form: package.package.
Inherited from BMM_CLASS

class_path (): String [1..1]

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.
Inherited from BMM_CLASS

is_primitive (): Boolean [1..1]

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.
Inherited from BMM_CLASS

is_abstract (): Boolean [1..1]

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.
Inherited from BMM_CLASS

features (): List<BMM_CLASS_FEATURE> [0..1]

List of all feature definitions introduced in this class.
Inherited from BMM_CLASS

flat_features (): List<BMM_CLASS_FEATURE> [0..1]

Consolidated list of all feature definitions from this class and all inheritance ancestors.
Inherited from BMM_CLASS

flat_properties (): List<BMM_PROPERTY> [0..1]

List of all properties due to current and ancestor classes, keyed by property name.
Inherited from BMM_CLASS

generic_parameter_conformance_type (
a_name: String[1]
): String [1..1]

For a generic class, type to which generic parameter a_name conforms e.g. if this class is Interval <T:Comparable> then the Result will be the single type Comparable. For an unconstrained type T, the Result will be Any.

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)
Inherited from BMM_CLASS

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1
Inherited from BMM_CLASS

{
    "name": "BMM_GENERIC_CLASS",
    "documentation": "Definition of a generic class in an object model.",
    "ancestors": [
        "BMM_CLASS"
    ],
    "properties": {
        "generic_parameters": {
            "_type": "P_BMM_GENERIC_PROPERTY",
            "name": "generic_parameters",
            "documentation": "List of formal generic parameters, keyed by name. These are defined either directly on this class or by the inclusion of an ancestor class which is generic.",
            "is_mandatory": true,
            "type_def": {
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "BMM_PARAMETER_TYPE"
                ]
            }
        }
    },
    "functions": {
        "suppliers": {
            "name": "suppliers",
            "documentation": "Add suppliers from generic parameters.",
            "result": {
                "_type": "P_BMM_CONTAINER_TYPE",
                "container_type": "List",
                "type": "String"
            },
            "is_nullable": true
        },
        "type": {
            "name": "type",
            "documentation": "Generate a fully open `BMM_GENERIC_TYPE` instance that corresponds to this class definition",
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "BMM_GENERIC_TYPE"
            }
        },
        "generic_parameter_conformance_type": {
            "name": "generic_parameter_conformance_type",
            "documentation": "For a generic class, type to which generic parameter `a_name` conforms e.g. if this class is `Interval <T:Comparable>` then the Result will be the single type `Comparable`. For an unconstrained type `T`, the Result will be `Any`.",
            "parameters": {
                "a_name": {
                    "_type": "P_BMM_SINGLE_FUNCTION_PARAMETER",
                    "name": "a_name",
                    "type": "String"
                }
            },
            "result": {
                "_type": "P_BMM_SIMPLE_TYPE",
                "type": "String"
            }
        }
    }
}
bmm generic class

BMM_ENUMERATION Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_ENUMERATION

Description

Definition of an enumeration class, understood as a class whose value range is constrained extensionally, i.e. by an explicit enumeration of named singleton instances.

Only one inheritance ancestor is allowed in order to provide the base type to which the range constraint is applied.

The common notion of a set of literals with no explicit defined values is represented as the degenerate subtype BMM_ENUMERATION_INTEGER, whose values are 0, 1, …​

Inherit

BMM_SIMPLE_CLASS

Attributes

Signature

Meaning

0..1

item_names: List<String>

The list of names of the enumeration. If no values are supplied, the integer values 0, 1, 2, …​ are assumed.

0..1

item_values: List<BMM_PRIMITIVE_VALUE>

Optional list of specific values. Must be 1:1 with item_names list.

Functions

Signature

Meaning

1..1

name_map (): Hash<String,String>

Map of item_names to item_values (stringified).

BMM_ENUMERATION

Definition of an enumeration class, understood as a class whose value range is constrained extensionally, i.e. by an explicit enumeration of named singleton instances.

Only one inheritance ancestor is allowed in order to provide the base type to which the range constraint is applied.

The common notion of a set of literals with no explicit defined values is represented as the degenerate subtype BMM_ENUMERATION_INTEGER, whose values are 0, 1, …​

Inherits: BMM_DECLARATION, BMM_MODULE, BMM_CLASS, BMM_SIMPLE_CLASS

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_MODEL [1..1]

Model within which module is defined.
Inherited from BMM_MODULE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

ancestors: List<String> [0..1]

List of immediate inheritance parents.
Inherited from BMM_CLASS

package: BMM_PACKAGE [1..1]

Package this class belongs to.
Inherited from BMM_CLASS

properties: Hash<String,BMM_PROPERTY> [0..1]

List of attributes defined in this class.
Inherited from BMM_CLASS

source_schema_id: String [1..1]

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.
Inherited from BMM_CLASS

immediate_descendants: List<BMM_CLASS> [0..1]

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.
Inherited from BMM_CLASS

is_override: Boolean [1..1]

True if this definition overrides a class of the same name in an included schema.
Inherited from BMM_CLASS

constants: Hash<String,BMM_CONSTANT> [0..1]

List of constants defined in this class.
Inherited from BMM_CLASS

functions: Hash<String,BMM_FUNCTION> [0..1]

List of functions defined in this class.
Inherited from BMM_CLASS

procedures: Hash<String,BMM_PROCEDURE> [0..1]

List of procedures defined in this class.
Inherited from BMM_CLASS

is_primitive: Boolean [0..1]
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.
Inherited from BMM_CLASS

is_abstract: Boolean [0..1]
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.
Inherited from BMM_CLASS

invariants: List<BMM_ASSERTION> [0..1]

+ Inherited from BMM_CLASS

creators: List<String> [0..1]

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.
Inherited from BMM_CLASS

converters: List<String> [0..1]

Subset of creators that create a new instance from a single argument of another type.
Inherited from BMM_CLASS

feature_groups: List<BMM_FEATURE_GROUP> [0..1]

List of feature groups in this class.
Inherited from BMM_CLASS

item_names: List<String> [0..1]

The list of names of the enumeration. If no values are supplied, the integer values 0, 1, 2, …​ are assumed.

item_values: List<BMM_PRIMITIVE_VALUE> [0..1]

Optional list of specific values. Must be 1:1 with item_names list.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

type (): BMM_SIMPLE_TYPE [1..1]

Generate a type object that represents the type of this class. Can only be an instance of BMM_SIMPLE_TYPE or a descendant.
Inherited from BMM_SIMPLE_CLASS

all_ancestors (): List<String> [0..1]

List of all inheritance parent class names, recursively.
Inherited from BMM_CLASS

all_descendants (): List<String> [0..1]

Compute all descendants by following immediate_descendants.
Inherited from BMM_CLASS

suppliers (): List<String> [0..1]

List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

suppliers_non_primitive (): List<String> [0..1]

Same as suppliers minus primitive types, as defined in input schema.
Inherited from BMM_CLASS

supplier_closure (): List<String> [0..1]

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

package_path (): String [1..1]

Fully qualified package name, of form: package.package.
Inherited from BMM_CLASS

class_path (): String [1..1]

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.
Inherited from BMM_CLASS

is_primitive (): Boolean [1..1]

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.
Inherited from BMM_CLASS

is_abstract (): Boolean [1..1]

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.
Inherited from BMM_CLASS

features (): List<BMM_CLASS_FEATURE> [0..1]

List of all feature definitions introduced in this class.
Inherited from BMM_CLASS

flat_features (): List<BMM_CLASS_FEATURE> [0..1]

Consolidated list of all feature definitions from this class and all inheritance ancestors.
Inherited from BMM_CLASS

flat_properties (): List<BMM_PROPERTY> [0..1]

List of all properties due to current and ancestor classes, keyed by property name.
Inherited from BMM_CLASS

name_map (): Hash<String,String> [1..1]

Map of item_names to item_values (stringified).

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)
Inherited from BMM_CLASS

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1
Inherited from BMM_CLASS

{
    "name": "BMM_ENUMERATION",
    "documentation": "Definition of an enumeration class, understood as a class whose value range is constrained extensionally, i.e. by an explicit enumeration of named singleton instances.\n\nOnly one inheritance ancestor is allowed in order to provide the base type to which the range constraint is applied.\n\nThe common notion of a set of literals with no explicit defined values is represented as the degenerate subtype `BMM_ENUMERATION_INTEGER`, whose values are 0, 1, ...",
    "ancestors": [
        "BMM_SIMPLE_CLASS"
    ],
    "properties": {
        "item_names": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "item_names",
            "documentation": "The list of names of the enumeration. If no values are supplied, the integer values 0, 1, 2, ... are assumed.",
            "type_def": {
                "container_type": "List",
                "type": "String"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        },
        "item_values": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "item_values",
            "documentation": "Optional list of specific values. Must be 1:1 with `_item_names_` list.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_PRIMITIVE_VALUE"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    },
    "functions": {
        "name_map": {
            "name": "name_map",
            "documentation": "Map of `_item_names_` to `_item_values_` (stringified).",
            "result": {
                "_type": "P_BMM_GENERIC_TYPE",
                "root_type": "Hash",
                "generic_parameters": [
                    "String",
                    "String"
                ]
            }
        }
    }
}
bmm enumeration

BMM_ENUMERATION_STRING Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_ENUMERATION_STRING

Description

String-based enumeration meta-type.

Inherit

BMM_ENUMERATION

Attributes

Signature

Meaning

0..1
(redefined)

item_values: List<BMM_STRING_VALUE>

Optional list of specific values. Must be 1:1 with item_names list.

BMM_ENUMERATION_STRING

String-based enumeration meta-type.

Inherits: BMM_DECLARATION, BMM_MODULE, BMM_CLASS, BMM_SIMPLE_CLASS, BMM_ENUMERATION

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_MODEL [1..1]

Model within which module is defined.
Inherited from BMM_MODULE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

ancestors: List<String> [0..1]

List of immediate inheritance parents.
Inherited from BMM_CLASS

package: BMM_PACKAGE [1..1]

Package this class belongs to.
Inherited from BMM_CLASS

properties: Hash<String,BMM_PROPERTY> [0..1]

List of attributes defined in this class.
Inherited from BMM_CLASS

source_schema_id: String [1..1]

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.
Inherited from BMM_CLASS

immediate_descendants: List<BMM_CLASS> [0..1]

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.
Inherited from BMM_CLASS

is_override: Boolean [1..1]

True if this definition overrides a class of the same name in an included schema.
Inherited from BMM_CLASS

constants: Hash<String,BMM_CONSTANT> [0..1]

List of constants defined in this class.
Inherited from BMM_CLASS

functions: Hash<String,BMM_FUNCTION> [0..1]

List of functions defined in this class.
Inherited from BMM_CLASS

procedures: Hash<String,BMM_PROCEDURE> [0..1]

List of procedures defined in this class.
Inherited from BMM_CLASS

is_primitive: Boolean [0..1]
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.
Inherited from BMM_CLASS

is_abstract: Boolean [0..1]
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.
Inherited from BMM_CLASS

invariants: List<BMM_ASSERTION> [0..1]

+ Inherited from BMM_CLASS

creators: List<String> [0..1]

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.
Inherited from BMM_CLASS

converters: List<String> [0..1]

Subset of creators that create a new instance from a single argument of another type.
Inherited from BMM_CLASS

feature_groups: List<BMM_FEATURE_GROUP> [0..1]

List of feature groups in this class.
Inherited from BMM_CLASS

item_names: List<String> [0..1]

The list of names of the enumeration. If no values are supplied, the integer values 0, 1, 2, …​ are assumed.
Inherited from BMM_ENUMERATION

item_values: List<BMM_STRING_VALUE> [0..1]

Optional list of specific values. Must be 1:1 with item_names list.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

type (): BMM_SIMPLE_TYPE [1..1]

Generate a type object that represents the type of this class. Can only be an instance of BMM_SIMPLE_TYPE or a descendant.
Inherited from BMM_SIMPLE_CLASS

all_ancestors (): List<String> [0..1]

List of all inheritance parent class names, recursively.
Inherited from BMM_CLASS

all_descendants (): List<String> [0..1]

Compute all descendants by following immediate_descendants.
Inherited from BMM_CLASS

suppliers (): List<String> [0..1]

List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

suppliers_non_primitive (): List<String> [0..1]

Same as suppliers minus primitive types, as defined in input schema.
Inherited from BMM_CLASS

supplier_closure (): List<String> [0..1]

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

package_path (): String [1..1]

Fully qualified package name, of form: package.package.
Inherited from BMM_CLASS

class_path (): String [1..1]

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.
Inherited from BMM_CLASS

is_primitive (): Boolean [1..1]

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.
Inherited from BMM_CLASS

is_abstract (): Boolean [1..1]

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.
Inherited from BMM_CLASS

features (): List<BMM_CLASS_FEATURE> [0..1]

List of all feature definitions introduced in this class.
Inherited from BMM_CLASS

flat_features (): List<BMM_CLASS_FEATURE> [0..1]

Consolidated list of all feature definitions from this class and all inheritance ancestors.
Inherited from BMM_CLASS

flat_properties (): List<BMM_PROPERTY> [0..1]

List of all properties due to current and ancestor classes, keyed by property name.
Inherited from BMM_CLASS

name_map (): Hash<String,String> [1..1]

Map of item_names to item_values (stringified).
Inherited from BMM_ENUMERATION

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)
Inherited from BMM_CLASS

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1
Inherited from BMM_CLASS

{
    "name": "BMM_ENUMERATION_STRING",
    "documentation": "String-based enumeration meta-type.",
    "ancestors": [
        "BMM_ENUMERATION"
    ],
    "properties": {
        "item_values": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "item_values",
            "documentation": "Optional list of specific values. Must be 1:1 with `_item_names_` list.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_STRING_VALUE"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    }
}
bmm enumeration string

BMM_ENUMERATION_INTEGER Class

  • Definition

  • Effective

  • BMM

  • UML

Class

BMM_ENUMERATION_INTEGER

Description

Integer-based enumeration meta-type.

Inherit

BMM_ENUMERATION

Attributes

Signature

Meaning

0..1
(redefined)

item_values: List<BMM_INTEGER_VALUE>

Optional list of specific values. Must be 1:1 with item_names list.

BMM_ENUMERATION_INTEGER

Integer-based enumeration meta-type.

Inherits: BMM_DECLARATION, BMM_MODULE, BMM_CLASS, BMM_SIMPLE_CLASS, BMM_ENUMERATION

Attributes

name: String [1..1]

Name of this model element.
Inherited from BMM_DECLARATION

documentation: Hash<String,Any> [0..1]

Optional documentation of this element, as a keyed list.

It is strongly recommended to use the following key /type combinations for the relevant purposes:

  • "purpose": String

  • "keywords": List<String>

  • "use": String

  • "misuse": String

  • "references": String

Other keys and value types may be freely added.
Inherited from BMM_DECLARATION

scope: BMM_MODEL [1..1]

Model within which module is defined.
Inherited from BMM_MODULE

extensions: Hash<String,Any> [0..1]

Optional meta-data of this element, as a keyed list. May be used to extend the meta-model.
Inherited from BMM_DECLARATION

ancestors: List<String> [0..1]

List of immediate inheritance parents.
Inherited from BMM_CLASS

package: BMM_PACKAGE [1..1]

Package this class belongs to.
Inherited from BMM_CLASS

properties: Hash<String,BMM_PROPERTY> [0..1]

List of attributes defined in this class.
Inherited from BMM_CLASS

source_schema_id: String [1..1]

Reference to original source schema defining this class. Useful for UI tools to determine which original schema file to open for a given class for manual editing.
Inherited from BMM_CLASS

immediate_descendants: List<BMM_CLASS> [0..1]

List of computed references to base classes of immediate inheritance descendants, derived when members of ancestors are attached at creation time.
Inherited from BMM_CLASS

is_override: Boolean [1..1]

True if this definition overrides a class of the same name in an included schema.
Inherited from BMM_CLASS

constants: Hash<String,BMM_CONSTANT> [0..1]

List of constants defined in this class.
Inherited from BMM_CLASS

functions: Hash<String,BMM_FUNCTION> [0..1]

List of functions defined in this class.
Inherited from BMM_CLASS

procedures: Hash<String,BMM_PROCEDURE> [0..1]

List of procedures defined in this class.
Inherited from BMM_CLASS

is_primitive: Boolean [0..1]
{default = false}

True if this class represents a type considered to be primitive in the type system, i.e. any typically built-in or standard library type such as String, Date, Hash<K,V> etc.
Inherited from BMM_CLASS

is_abstract: Boolean [0..1]
{default = false}

True if this class is marked as abstract, i.e. direct instances cannot be created from its direct type.
Inherited from BMM_CLASS

invariants: List<BMM_ASSERTION> [0..1]

+ Inherited from BMM_CLASS

creators: List<String> [0..1]

Subset of procedures that may be used to initialise a new instance of an object, and whose execution will guarantee that class invariants are satisfied.
Inherited from BMM_CLASS

converters: List<String> [0..1]

Subset of creators that create a new instance from a single argument of another type.
Inherited from BMM_CLASS

feature_groups: List<BMM_FEATURE_GROUP> [0..1]

List of feature groups in this class.
Inherited from BMM_CLASS

item_names: List<String> [0..1]

The list of names of the enumeration. If no values are supplied, the integer values 0, 1, 2, …​ are assumed.
Inherited from BMM_ENUMERATION

item_values: List<BMM_INTEGER_VALUE> [0..1]

Optional list of specific values. Must be 1:1 with item_names list.

Functions

is_root_scope (): Boolean

Post_result: Result = (scope = self) [1..1]

True if this declaration entity is the root of the declaration hierarchy.
Inherited from BMM_DECLARATION

type (): BMM_SIMPLE_TYPE [1..1]

Generate a type object that represents the type of this class. Can only be an instance of BMM_SIMPLE_TYPE or a descendant.
Inherited from BMM_SIMPLE_CLASS

all_ancestors (): List<String> [0..1]

List of all inheritance parent class names, recursively.
Inherited from BMM_CLASS

all_descendants (): List<String> [0..1]

Compute all descendants by following immediate_descendants.
Inherited from BMM_CLASS

suppliers (): List<String> [0..1]

List of names of immediate supplier classes, including concrete generic parameters, concrete descendants of abstract statically defined types, and inherited suppliers. (Where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

suppliers_non_primitive (): List<String> [0..1]

Same as suppliers minus primitive types, as defined in input schema.
Inherited from BMM_CLASS

supplier_closure (): List<String> [0..1]

List of names of all classes in full supplier closure, including concrete generic parameters; (where generics are unconstrained, no class name is added, since logically it would be Any and this can always be assumed anyway). This list includes primitive types.
Inherited from BMM_CLASS

package_path (): String [1..1]

Fully qualified package name, of form: package.package.
Inherited from BMM_CLASS

class_path (): String [1..1]

Fully qualified class name, of form: package.package.CLASS with package path in lower-case and class in original case.
Inherited from BMM_CLASS

is_primitive (): Boolean [1..1]

True if this class is designated a primitive type within the overall type system of the schema. Set from schema.
Inherited from BMM_CLASS

is_abstract (): Boolean [1..1]

True if this class is abstract in its model. Value provided from an underlying data property set at creation or construction time.
Inherited from BMM_CLASS

features (): List<BMM_CLASS_FEATURE> [0..1]

List of all feature definitions introduced in this class.
Inherited from BMM_CLASS

flat_features (): List<BMM_CLASS_FEATURE> [0..1]

Consolidated list of all feature definitions from this class and all inheritance ancestors.
Inherited from BMM_CLASS

flat_properties (): List<BMM_PROPERTY> [0..1]

List of all properties due to current and ancestor classes, keyed by property name.
Inherited from BMM_CLASS

name_map (): Hash<String,String> [1..1]

Map of item_names to item_values (stringified).
Inherited from BMM_ENUMERATION

Invariants

Inv_constructors: for_all p in creators : procedures.has(p)
Inherited from BMM_CLASS

Inv_converters: for_all p in converters : creators.has(p) and p.arity() = 1
Inherited from BMM_CLASS

{
    "name": "BMM_ENUMERATION_INTEGER",
    "documentation": "Integer-based enumeration meta-type.",
    "ancestors": [
        "BMM_ENUMERATION"
    ],
    "properties": {
        "item_values": {
            "_type": "P_BMM_CONTAINER_PROPERTY",
            "name": "item_values",
            "documentation": "Optional list of specific values. Must be 1:1 with `_item_names_` list.",
            "type_def": {
                "container_type": "List",
                "type": "BMM_INTEGER_VALUE"
            },
            "cardinality": {
                "lower": 0,
                "upper_unbounded": true
            }
        }
    }
}
bmm enumeration integer