bmm_version = <"2.4"> rm_publisher = <"openehr"> schema_name = <"lang"> rm_release = <"1.1.0"> schema_revision = <"1.1.0.2"> schema_lifecycle_state = <"stable"> schema_description = <"lang"> schema_author = <"Thomas Beale , code-generator"> includes = < ["openehr_base_1.3.0"] = < id = <"openehr_base_1.3.0"> > > packages = < ["org.openehr.lang.bmm"] = < name = <"org.openehr.lang.bmm"> packages = < ["core"] = < name = <"core"> classes = <"BMM_DEFINITIONS", "BMM_MODEL_ELEMENT", "BMM_CLASSIFIER", "BMM_CLASS", "BMM_GENERIC_CLASS", "BMM_ENUMERATION", "BMM_ENUMERATION_INTEGER", "BMM_ENUMERATION_STRING", "BMM_TYPE_ELEMENT", "BMM_TYPE", "BMM_SIMPLE_TYPE", "BMM_OPEN_TYPE", "BMM_CONTAINER_TYPE", "BMM_INDEXED_CONTAINER_TYPE", "BMM_GENERIC_TYPE", "BMM_GENERIC_PARAMETER", "BMM_PROPERTY", "BMM_CONTAINER_PROPERTY", "BMM_PACKAGE_CONTAINER", "BMM_PACKAGE", "BMM_MODEL", "BMM_SCHEMA_CORE", "BMM_INCLUDE_SPEC"> > ["rm_access"] = < name = <"rm_access"> classes = <"REFERENCE_MODEL_ACCESS", "SCHEMA_DESCRIPTOR"> > > > ["org.openehr.lang.bmm_persistence"] = < name = <"org.openehr.lang.bmm_persistence"> classes = <"P_BMM_CLASS", "P_BMM_INTERFACE", "P_BMM_ENUMERATION", "P_BMM_SCHEMA", "P_BMM_PROPERTY", "P_BMM_GENERIC_PARAMETER", "P_BMM_TYPE", "P_BMM_CONTAINER_TYPE", "P_BMM_SIMPLE_TYPE", "P_BMM_OPEN_TYPE", "P_BMM_GENERIC_TYPE", "P_BMM_PACKAGE", "P_BMM_PACKAGE_CONTAINER", "P_BMM_CONTAINER_PROPERTY", "P_BMM_SINGLE_PROPERTY", "P_BMM_SINGLE_PROPERTY_OPEN", "P_BMM_GENERIC_PROPERTY", "P_BMM_CONSTANT", "P_BMM_FUNCTION", "P_BMM_FUNCTION_PARAMETER", "P_BMM_SINGLE_FUNCTION_PARAMETER", "P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN", "P_BMM_CONTAINER_FUNCTION_PARAMETER", "P_BMM_GENERIC_FUNCTION_PARAMETER", "P_BMM_ENUMERATION_INTEGER", "P_BMM_ENUMERATION_STRING", "P_BMM_MODEL_ELEMENT", "P_BMM_BASE_TYPE", "P_BMM_SCHEMA_DESCRIPTOR", "P_BMM_INDEXED_CONTAINER_PROPERTY", "P_BMM_INDEXED_CONTAINER_TYPE"> > ["org.openehr.lang.beom"] = < name = <"org.openehr.lang.beom"> packages = < ["core"] = < name = <"core"> classes = <"ASSERTION", "ASSIGNMENT", "EXPR_BINARY_OPERATOR", "EXPR_FUNCTION_CALL", "EXPRESSION", "EXPR_LEAF", "EXPR_LITERAL", "EXPR_OPERATOR", "EXPR_UNARY_OPERATOR", "EXPR_VARIABLE_REF", "EXTERNAL_QUERY", "EXPR_VALUE", "STATEMENT_SET", "STATEMENT", "VARIABLE_DECLARATION", "EXPR_VALUE_REF", "EXPR_FOR_ALL", "OPERATOR_KIND"> > ["types"] = < name = <"types"> classes = <"EXPR_TYPE_DEF", "TYPE_DEF_BOOLEAN", "TYPE_DEF_DATE", "TYPE_DEF_DATE_TIME", "TYPE_DEF_DURATION", "TYPE_DEF_INTEGER", "TYPE_DEF_OBJECT_REF", "TYPE_DEF_REAL", "TYPE_DEF_STRING", "TYPE_DEF_TERMINOLOGY_CODE", "TYPE_DEF_TIME", "TYPE_DEF_URI"> > > > > class_definitions = < ["BMM_DEFINITIONS"] = < name = <"BMM_DEFINITIONS"> documentation = <"Definitions used by all BMM packages."> 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\""> > > > ["BMM_INCLUDE_SPEC"] = < name = <"BMM_INCLUDE_SPEC"> documentation = <"Schema inclusion structure."> properties = < ["id"] = (P_BMM_SINGLE_PROPERTY) < name = <"id"> documentation = <"Full identifier of the included schema, e.g. \"openehr_primitive_types_1.0.2\"."> is_mandatory = type = <"String"> > > > ["BMM_MODEL_ELEMENT"] = < name = <"BMM_MODEL_ELEMENT"> documentation = <"Ancestor class of most BMM model elements."> ancestors = <"BMM_DEFINITIONS", ...> is_abstract = properties = < ["documentation"] = (P_BMM_SINGLE_PROPERTY) < name = <"documentation"> documentation = <"Optional documentation of this element."> type = <"String"> > > > ["BMM_CONTAINER_PROPERTY"] = < name = <"BMM_CONTAINER_PROPERTY"> documentation = <"Subtype of BMM_PROPERTY that represents a container type based on one of the inbuilt types List <>, Set <>, Array <>."> ancestors = <"BMM_PROPERTY", ...> properties = < ["cardinality"] = (P_BMM_SINGLE_PROPERTY) < name = <"cardinality"> documentation = <"Cardinality of this container."> type = <"Multiplicity_interval"> > ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Redefined to BMM_CONTAINER_TYPE."> is_mandatory = type = <"BMM_CONTAINER_TYPE"> > > functions = < ["display_name"] = < name = <"display_name"> documentation = <"Name of this attribute to display in UI."> result = (P_BMM_SIMPLE_TYPE) < type = <"String"> > > > > ["BMM_PROPERTY"] = < name = <"BMM_PROPERTY"> documentation = <"Model of a property definition within a class definition of an object model. Generic parameter takes care of variants."> ancestors = <"BMM_MODEL_ELEMENT", ...> generic_parameter_defs = < ["T"] = < name = <"T"> conforms_to_type = <"BMM_TYPE"> > > properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this property in the model."> is_mandatory = type = <"String"> > ["is_mandatory"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_mandatory"> documentation = <"True if this property is mandatory in its class."> type = <"Boolean"> > ["is_computed"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_computed"> documentation = <"True if this property is computed rather than stored in objects of this class."> type = <"Boolean"> > ["type"] = (P_BMM_SINGLE_PROPERTY_OPEN) < name = <"type"> documentation = <"Formal type of this property."> is_mandatory = type = <"T"> > ["is_im_runtime"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_im_runtime"> documentation = <"True if this property is marked with info model `_im_runtime_` property."> type = <"Boolean"> default = > ["is_im_infrastructure"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_im_infrastructure"> documentation = <"True if this property was marked with info model `_im_infrastructure_` flag."> type = <"Boolean"> default = > > functions = < ["existence"] = < name = <"existence"> documentation = <"Interval form of `0..1`, `1..1` etc, generated from `_is_mandatory_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"Multiplicity_interval"> > > ["display_name"] = < name = <"display_name"> documentation = <"Name of this attribute to display in UI."> result = (P_BMM_SIMPLE_TYPE) < type = <"String"> > > > > ["BMM_MODEL"] = < name = <"BMM_MODEL"> documentation = <"Model of a BMM schema (along with what is inherited from BMM_SCHEMA_CORE)."> ancestors = <"BMM_SCHEMA_CORE", "BMM_PACKAGE_CONTAINER"> properties = < ["class_definitions"] = (P_BMM_GENERIC_PROPERTY) < name = <"class_definitions"> documentation = <"All classes in this schema."> type_def = < generic_parameters = <"String", "BMM_CLASS"> root_type = <"Hash"> > > > functions = < ["primitive_types"] = < name = <"primitive_types"> documentation = <"List of keys in `class_definitions' of items marked as primitive types, as defined in input schema."> result = (P_BMM_CONTAINER_TYPE) < container_type = <"List"> type = <"String"> > is_nullable = > ["enumeration_types"] = < name = <"enumeration_types"> documentation = <"List of keys in `class_definitions' of items that are enumeration types, as defined in input schema."> result = (P_BMM_CONTAINER_TYPE) < container_type = <"List"> type = <"String"> > is_nullable = > ["class_definition"] = < name = <"class_definition"> documentation = <"Retrieve the class definition corresponding to `a_type_name' (which may contain a generic part)."> result = (P_BMM_SIMPLE_TYPE) < type = <"BMM_CLASS"> > parameters = < ["a_name"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_name"> type = <"String"> > > > ["enumeration_definition"] = < name = <"enumeration_definition"> documentation = <"Retrieve the enumeration definition corresponding to `a_type_name'."> result = (P_BMM_SIMPLE_TYPE) < type = <"BMM_ENUMERATION"> > parameters = < ["a_name"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_name"> type = <"String"> > > > ["property_definition"] = < name = <"property_definition"> documentation = <"Retrieve the property definition for `a_prop_name' in flattened class corresponding to `a_type_name'."> result = (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."> result = (P_BMM_SIMPLE_TYPE) < type = <"Boolean"> > parameters = < ["a_bmm_type_name"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_type_name"> type = <"String"> > ["a_bmm_property_name"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_property_name"> type = <"String"> > ["a_ms_property_name"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_ms_property_name"> type = <"String"> > > > ["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 = (P_BMM_SIMPLE_TYPE) < type = <"BMM_PROPERTY"> > > ["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."> result = (P_BMM_CONTAINER_TYPE) < container_type = <"List"> type = <"String"> > parameters = < ["a_class"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_class"> type = <"String"> > > is_nullable = > ["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."> result = (P_BMM_SIMPLE_TYPE) < type = <"Boolean"> > parameters = < ["a_desc_type"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_desc_type"> type = <"String"> > ["an_anc_type"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"an_anc_type"> type = <"String"> > > > > > ["BMM_PACKAGE"] = < name = <"BMM_PACKAGE"> documentation = <"Abstraction of a package as a tree structure whose nodes can contain other packages and classes."> ancestors = <"BMM_PACKAGE_CONTAINER", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this package. This name may be qualified if it is a top-level package."> is_mandatory = type = <"String"> > ["classes"] = (P_BMM_CONTAINER_PROPERTY) < name = <"classes"> documentation = <"Classes listed as being in this package."> type_def = < container_type = <"List"> type = <"BMM_CLASS"> > cardinality = <|>=0|> > > 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 = (P_BMM_CONTAINER_TYPE) < container_type = <"List"> type = <"BMM_CLASS"> > is_nullable = > ["path"] = < name = <"path"> documentation = <"Full path of this package back to root package."> result = (P_BMM_SIMPLE_TYPE) < type = <"String"> > > > > ["BMM_PACKAGE_CONTAINER"] = < name = <"BMM_PACKAGE_CONTAINER"> documentation = <"Abstraction of a BMM model component that contains packages and classes."> ancestors = <"BMM_MODEL_ELEMENT", ...> properties = < ["packages"] = (P_BMM_GENERIC_PROPERTY) < name = <"packages"> documentation = <"Child packages; keys all in upper case for guaranteed matching."> type_def = < generic_parameters = <"String", "BMM_PACKAGE"> root_type = <"Hash"> > > > functions = < ["package_at_path"] = < name = <"package_at_path"> documentation = <"Package at the path `a_path'."> result = (P_BMM_SIMPLE_TYPE) < type = <"BMM_PACKAGE"> > parameters = < ["a_path"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_path"> type = <"String"> > > > ["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"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"action"> type = <"PROCEDURE"> > > > ["has_package_path"] = < name = <"has_package_path"> documentation = <"True if there is a package at the path `a_path'; paths are delimited with Package_name_delimiter."> result = (P_BMM_SIMPLE_TYPE) < type = <"Boolean"> > parameters = < ["a_path"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_path"> type = <"String"> > > > > > ["P_BMM_CLASS"] = < name = <"P_BMM_CLASS"> documentation = <"Definition of persistent form of `BMM_CLASS` for serialisation to ODIN, JSON, XML etc."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of the class. Persisted attribute."> is_mandatory = type = <"String"> > ["ancestors"] = (P_BMM_CONTAINER_PROPERTY) < name = <"ancestors"> documentation = <"List of immediate inheritance parents. If there are generic ancestors, use `_ancestor_defs_` instead. Persisted attribute."> type_def = < container_type = <"List"> type = <"String"> > cardinality = <|>=0|> > ["constants"] = (P_BMM_GENERIC_PROPERTY) < name = <"constants"> documentation = <"Constants defined in this class, keyed by name. Persistent attribute."> type_def = < generic_parameters = <"String", "P_BMM_CONSTANT"> root_type = <"Hash"> > > ["properties"] = (P_BMM_GENERIC_PROPERTY) < name = <"properties"> documentation = <"List of attributes defined in this class. Persistent attribute."> type_def = < generic_parameters = <"String", "P_BMM_PROPERTY"> root_type = <"Hash"> > > ["functions"] = (P_BMM_GENERIC_PROPERTY) < name = <"functions"> documentation = <"List of functions (routines) defined in this class, keyed by name. Persistent attribute."> type_def = < generic_parameters = <"String", "P_BMM_FUNCTION"> root_type = <"Hash"> > > ["invariants"] = (P_BMM_GENERIC_PROPERTY) < name = <"invariants"> documentation = <"Invariants defined on this class, as a Hash of assertion expressions keyed by tag. Persisted attribute."> type_def = < generic_parameters = <"String", "String"> root_type = <"Hash"> > > ["is_abstract"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_abstract"> documentation = <"True if this is an abstract type. Persisted attribute."> type = <"Boolean"> > ["is_override"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_override"> documentation = <"True if this class definition overrides one found in an included schema."> type = <"Boolean"> > ["generic_parameter_defs"] = (P_BMM_GENERIC_PROPERTY) < name = <"generic_parameter_defs"> documentation = <"List of generic parameter definitions. Persisted attribute."> type_def = < generic_parameters = <"String", "P_BMM_GENERIC_PARAMETER"> root_type = <"Hash"> > > ["source_schema_id"] = (P_BMM_SINGLE_PROPERTY) < name = <"source_schema_id"> documentation = <"Reference to original source schema defining this class. Set during `BMM_SCHEMA` materialise. Useful for GUI tools to enable user to edit the schema file containing a given class (i.e. taking into account that a class may be in any of the schemas in a schema inclusion hierarchy)."> is_mandatory = type = <"String"> > ["bmm_class"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_class"> documentation = <"`BMM_CLASS` object built by `_create_bmm_class_definition_` and `_populate_bmm_class_definition_`."> type = <"BMM_CLASS"> > ["uid"] = (P_BMM_SINGLE_PROPERTY) < name = <"uid"> documentation = <"Unique id generated for later comparison during merging, in order to detect if two classes are the same. Assigned in post-load processing."> is_mandatory = type = <"Integer"> > ["ancestor_defs"] = (P_BMM_CONTAINER_PROPERTY) < name = <"ancestor_defs"> documentation = <"List of structured inheritance ancestors, used only in the case of generic inheritance. Persisted attribute."> type_def = < container_type = <"List"> type = <"P_BMM_GENERIC_TYPE"> > cardinality = <|>=0|> > > functions = < ["is_generic"] = < name = <"is_generic"> documentation = <"True if this class is a generic class."> result = (P_BMM_SIMPLE_TYPE) < type = <"Boolean"> > post_conditions = < ["Post"] = <"Result := generic_parameter_defs /= Void"> > > ["create_bmm_class"] = < name = <"create_bmm_class"> documentation = <"Create `_bmm_class_definition_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > > ["populate_bmm_class"] = < name = <"populate_bmm_class"> documentation = <"Add remaining model elements from Current to `_bmm_class_definition_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["a_bmm_schema"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_schema"> type = <"BMM_MODEL"> > > > > > ["P_BMM_INTERFACE"] = < name = <"P_BMM_INTERFACE"> documentation = <"Persistent form of a BMM interface, i.e. a class-like definition consisting only of functions (no state). Used to capture pure operation interfaces."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this interface. Persisted attribute."> is_mandatory = type = <"String"> > ["functions"] = (P_BMM_GENERIC_PROPERTY) < name = <"functions"> documentation = <"Functions (routines) declared by this interface, keyed by name. Persistent attribute."> type_def = < generic_parameters = <"String", "P_BMM_FUNCTION"> root_type = <"Hash"> > > > > ["P_BMM_ENUMERATION"] = < name = <"P_BMM_ENUMERATION"> documentation = <"Persistent form of `BMM_ENUMERATION` attributes."> ancestors = <"P_BMM_CLASS", ...> properties = < ["item_names"] = (P_BMM_CONTAINER_PROPERTY) < name = <"item_names"> type_def = < container_type = <"List"> type = <"String"> > cardinality = <|>=0|> > ["item_values"] = (P_BMM_CONTAINER_PROPERTY) < name = <"item_values"> type_def = < container_type = <"List"> type = <"Any"> > cardinality = <|>=0|> > ["item_documentations"] = (P_BMM_CONTAINER_PROPERTY) < name = <"item_documentations"> documentation = <"Optional documentation strings for the enumeration items, in the same order as `_item_names_`. Persisted attribute."> type_def = < container_type = <"List"> type = <"String"> > cardinality = <|>=0|> > ["bmm_class"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_class"> documentation = <"`BMM_CLASS` object build by `_create_bmm_class_definition_` and `_populate_bmm_class_definition_`."> type = <"BMM_ENUMERATION"> > > > ["P_BMM_SCHEMA"] = < name = <"P_BMM_SCHEMA"> documentation = <"Persisted form of `BMM_SCHEMA`."> ancestors = <"P_BMM_PACKAGE_CONTAINER", "BMM_SCHEMA_CORE"> properties = < ["bmm_version"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_version"> documentation = <"Version of the BMM (P_BMM) meta-model to which this schema conforms, e.g. `2.4`. Persisted attribute."> is_mandatory = type = <"String"> > ["includes"] = (P_BMM_GENERIC_PROPERTY) < name = <"includes"> documentation = <"Other schemas included by this schema, keyed by schema id. Persisted attribute."> type_def = < generic_parameters = <"String", "BMM_INCLUDE_SPEC"> root_type = <"Hash"> > > ["primitive_types"] = (P_BMM_CONTAINER_PROPERTY) < name = <"primitive_types"> documentation = <"Primitive type definitions. Persisted attribute."> type_def = < container_type = <"List"> type = <"P_BMM_CLASS"> > cardinality = <|>=0|> > ["class_definitions"] = (P_BMM_CONTAINER_PROPERTY) < name = <"class_definitions"> documentation = <"Class definitions. Persisted attribute."> type_def = < container_type = <"List"> type = <"P_BMM_CLASS"> > cardinality = <|>=0|> > > functions = < ["validate_created"] = < name = <"validate_created"> documentation = <"Implementation of `_validate_created()_`"> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > pre_conditions = < ["Pre_state"] = <"state = State_created"> > post_conditions = < ["Post_state"] = <"passed implies state = State_validated_created"> > > ["load_finalise"] = < name = <"load_finalise"> documentation = <"Implementation of `_load_finalise()_`"> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > pre_conditions = < ["Pre_state"] = <"state = State_validated_created"> > post_conditions = < ["Post_state"] = <"state = State_includes_processed or state = State_includes_pending"> > > ["merge"] = < name = <"merge"> documentation = <"Implementation of `_merge()_`"> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["other"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"other"> type = <"P_BMM_SCHEMA"> > > pre_conditions = < ["Pre_state"] = <"state = State_includes_pending"> ["Pre_other_valid"] = <"includes_to_process.has (included_schema.schema_id)"> > > ["validate"] = < name = <"validate"> documentation = <"Implementation of `_validate()_`"> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > > ["create_bmm_model"] = < name = <"create_bmm_model"> documentation = <"Implementation of `_create_bmm_model()_`"> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > pre_conditions = < ["Pre_state"] = <"state = P_BMM_PACKAGE_STATE.State_includes_processed"> > > ["canonical_packages"] = < name = <"canonical_packages"> documentation = <"Package structure in which all top-level qualified package names like `xx.yy.zz` have been expanded out to a hierarchy of `BMM_PACKAGE` objects."> result = (P_BMM_SIMPLE_TYPE) < type = <"P_BMM_PACKAGE"> > > > > ["P_BMM_PROPERTY"] = < name = <"P_BMM_PROPERTY"> documentation = <"Persistent form of `BMM_PROPERTY`."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> is_abstract = properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this property within its class. Persisted attribute."> is_mandatory = type = <"String"> > ["is_mandatory"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_mandatory"> documentation = <"True if this property is mandatory in its class. Persisted attribute."> type = <"Boolean"> > ["is_computed"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_computed"> documentation = <"True if this property is computed rather than stored in objects of this class. Persisted Attribute."> type = <"Boolean"> > ["is_im_infrastructure"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_im_infrastructure"> documentation = <"True if this property is info model 'infrastructure' rather than 'data'. Persisted attribute."> type = <"Boolean"> > ["is_im_runtime"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_im_runtime"> documentation = <"True if this property is info model 'runtime' settable property. Persisted attribute."> type = <"Boolean"> > ["type_def"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_def"> documentation = <"Type definition of this property, if not a simple String type reference. Persisted attribute."> type = <"P_BMM_TYPE"> > ["bmm_property"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_property"> documentation = <"BMM_PROPERTY created by create_bmm_property_definition."> type = <"BMM_PROPERTY"> > > functions = < ["create_bmm_property"] = < name = <"create_bmm_property"> documentation = <"Create `_bmm_property_definition_` from `P_BMM_XX` parts."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["a_bmm_schema"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_schema"> type = <"BMM_MODEL"> > ["a_class_def"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_class_def"> type = <"BMM_CLASS"> > > > > > ["P_BMM_GENERIC_PARAMETER"] = < name = <"P_BMM_GENERIC_PARAMETER"> documentation = <"Persistent form of `BMM_GENERIC_PARAMETER`."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of the parameter, e.g. 'T' etc. Persisted attribute. Name is limited to 1 character, upper case."> is_mandatory = type = <"String"> > ["conforms_to_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"conforms_to_type"> documentation = <"Optional conformance constraint - the name of a type to which a concrete substitution of this generic parameter must conform. Persisted attribute."> type = <"String"> > ["bmm_generic_parameter"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_generic_parameter"> documentation = <"`BMM_GENERIC_PARAMETER` created by `_create_bmm_generic_parameter_`."> type = <"BMM_GENERIC_PARAMETER"> > > functions = < ["create_bmm_generic_parameter"] = < name = <"create_bmm_generic_parameter"> documentation = <"Create `_bmm_generic_parameter_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["a_bmm_schema"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_schema"> type = <"BMM_MODEL"> > > > > invariants = < ["Post_name"] = <"name.count = 1 and name.is_upper"> > > ["P_BMM_TYPE"] = < name = <"P_BMM_TYPE"> documentation = <"Persistent form of `BMM_TYPE`."> is_abstract = properties = < ["bmm_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_type"> documentation = <"Result of `_create_bmm_type()_` call."> type = <"BMM_TYPE"> > > functions = < ["create_bmm_type"] = < name = <"create_bmm_type"> documentation = <"Create appropriate `BMM_XXX` object; effected in descendants."> is_abstract = result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["a_schema"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_schema"> type = <"BMM_MODEL"> > ["a_class_def"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_class_def"> type = <"BMM_CLASS"> > > > ["as_type_string"] = < name = <"as_type_string"> documentation = <"Formal name of the type for display."> is_abstract = result = (P_BMM_SIMPLE_TYPE) < type = <"String"> > > > > ["P_BMM_CONTAINER_TYPE"] = < name = <"P_BMM_CONTAINER_TYPE"> documentation = <"Persistent form of `BMM_CONTAINER_TYPE`."> ancestors = <"P_BMM_TYPE", ...> properties = < ["container_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"container_type"> documentation = <"The type of the container. This converts to the `_root_type_` in `BMM_GENERIC_TYPE`. Persisted attribute."> is_mandatory = type = <"String"> > ["type_def"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_def"> documentation = <"Type definition of `_type_`, if not a simple String type reference. Persisted attribute."> type = <"P_BMM_BASE_TYPE"> > ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"The target type; this converts to the first parameter in `_generic_parameters_` in `BMM_GENERIC_TYPE`. Persisted attribute."> type = <"String"> > ["bmm_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_type"> documentation = <"Result of `_create_bmm_type()_` call."> type = <"BMM_CONTAINER_TYPE"> > > functions = < ["type_ref"] = < name = <"type_ref"> documentation = <"The target type; this converts to the first parameter in `_generic_parameters_` in `BMM_GENERIC_TYPE`. Persisted attribute."> result = (P_BMM_SIMPLE_TYPE) < type = <"P_BMM_BASE_TYPE"> > > > > ["P_BMM_SIMPLE_TYPE"] = < name = <"P_BMM_SIMPLE_TYPE"> documentation = <"Persistent form of `BMM_SIMPLE_TYPE`."> ancestors = <"P_BMM_BASE_TYPE", ...> properties = < ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Name of type - must be a simple class name."> is_mandatory = type = <"String"> > ["bmm_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_type"> documentation = <"Result of `_create_bmm_type()_` call."> type = <"BMM_SIMPLE_TYPE"> > > > ["P_BMM_OPEN_TYPE"] = < name = <"P_BMM_OPEN_TYPE"> documentation = <"Persistent form of `BMM_GENERIC_PARAMETER` or `BMM_PARAMETER_TYPE` (in BMM v3)."> ancestors = <"P_BMM_BASE_TYPE", ...> properties = < ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Simple type parameter as a single letter like 'T', 'G' etc."> is_mandatory = type = <"String"> > ["bmm_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_type"> documentation = <"Result of `_create_bmm_type()_` call."> type = <"BMM_OPEN_TYPE"> > > > ["P_BMM_GENERIC_TYPE"] = < name = <"P_BMM_GENERIC_TYPE"> documentation = <"Persistent form of `BMM_GENERIC_TYPE`."> ancestors = <"P_BMM_BASE_TYPE", ...> properties = < ["root_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"root_type"> documentation = <"Root type of this generic type, e.g. `Interval` in `Interval`."> is_mandatory = type = <"String"> > ["generic_parameter_defs"] = (P_BMM_CONTAINER_PROPERTY) < name = <"generic_parameter_defs"> documentation = <"Generic parameters of the root_type in this type specifier if non-simple types. The order must match the order of the owning class's formal generic parameter declarations. Persistent attribute."> is_mandatory = type_def = < container_type = <"List"> type = <"P_BMM_TYPE"> > cardinality = <|>=1|> > ["generic_parameters"] = (P_BMM_CONTAINER_PROPERTY) < name = <"generic_parameters"> documentation = <"Generic parameters of the `_root_type_` in this type specifier, if simple types. The order must match the order of the owning class's formal generic parameter declarations. Persistent attribute."> type_def = < container_type = <"List"> type = <"String"> > cardinality = <|>=0|> > ["bmm_type"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_type"> documentation = <"Result of `_create_bmm_type()_` call."> type = <"BMM_GENERIC_TYPE"> > > functions = < ["generic_parameter_refs"] = < name = <"generic_parameter_refs"> 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"> result = (P_BMM_CONTAINER_TYPE) < container_type = <"List"> type = <"P_BMM_TYPE"> > is_nullable = > > > ["P_BMM_PACKAGE"] = < name = <"P_BMM_PACKAGE"> documentation = <"Persisted form of a package as a tree structure whose nodes can contain more packages and/or classes."> ancestors = <"P_BMM_PACKAGE_CONTAINER", "P_BMM_MODEL_ELEMENT"> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of the package from schema; this name may be qualified if it is a top-level package within the schema, or unqualified. Persistent attribute."> is_mandatory = type = <"String"> > ["classes"] = (P_BMM_CONTAINER_PROPERTY) < name = <"classes"> documentation = <"List of classes in this package. Persistent attribute."> type_def = < container_type = <"List"> type = <"String"> > cardinality = <|>=0|> > ["bmm_package_definition"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_package_definition"> documentation = <"`BMM_PACKAGE` created by `_create_bmm_package_definition_`."> type = <"BMM_PACKAGE"> > > functions = < ["merge"] = < name = <"merge"> documentation = <"Merge packages and classes from other (from an included `P_BMM_SCHEMA`) into this package."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["other"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"other"> type = <"P_BMM_PACKAGE"> > > > ["create_bmm_package_definition"] = < name = <"create_bmm_package_definition"> documentation = <"Generate a `BMM_PACKAGE_DEFINITION` object and write it to `_bmm_package_definition_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > > > > ["P_BMM_PACKAGE_CONTAINER"] = < name = <"P_BMM_PACKAGE_CONTAINER"> documentation = <"Persisted form of a model component that contains packages."> properties = < ["packages"] = (P_BMM_GENERIC_PROPERTY) < name = <"packages"> documentation = <"Package structure as a hierarchy of packages each potentially containing names of classes in that package in the original model."> is_mandatory = type_def = < generic_parameters = <"String", "P_BMM_PACKAGE"> root_type = <"Hash"> > > > > ["P_BMM_CONTAINER_PROPERTY"] = < name = <"P_BMM_CONTAINER_PROPERTY"> documentation = <"Persistent form of `BMM_CONTAINER_PROPERTY`."> ancestors = <"P_BMM_PROPERTY", ...> properties = < ["cardinality"] = (P_BMM_GENERIC_PROPERTY) < name = <"cardinality"> documentation = <"Cardinality of this property in its class. Persistent attribute."> type_def = < generic_parameters = <"Integer", ...> root_type = <"Interval"> > > ["type_def"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_def"> documentation = <"Type definition of this property, if not a simple String type reference. Persistent attribute."> type = <"P_BMM_CONTAINER_TYPE"> > ["bmm_property"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_property"> documentation = <"`BMM_PROPERTY` created by `_create_bmm_property_`."> type = <"BMM_CONTAINER_PROPERTY"> > > functions = < ["create_bmm_property"] = < name = <"create_bmm_property"> documentation = <"Create `_bmm_property_definition_`."> result = (P_BMM_SIMPLE_TYPE) < type = <"void"> > parameters = < ["a_bmm_schema"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_bmm_schema"> type = <"BMM_MODEL"> > ["a_class_def"] = (P_BMM_SINGLE_FUNCTION_PARAMETER) < name = <"a_class_def"> type = <"BMM_CLASS"> > > > > > ["P_BMM_SINGLE_PROPERTY"] = < name = <"P_BMM_SINGLE_PROPERTY"> documentation = <"Persistent form of `BMM_SINGLE_PROPERTY`."> ancestors = <"P_BMM_PROPERTY", ...> properties = < ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"If the type is a simple type, then this attribute will hold the type name. If the type is a container or generic, then type_ref will hold the type definition. The resulting type is generated in type_def."> type = <"String"> > ["type_ref"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_ref"> documentation = <"Type definition of this property computed from `_type_` for later use in `_bmm_property_`."> type = <"P_BMM_SIMPLE_TYPE"> > ["bmm_property"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_property"> documentation = <"`BMM_PROPERTY` created by `_create_bmm_property_definition_`."> type = <"BMM_PROPERTY"> > > functions = < ["type_def"] = < name = <"type_def"> documentation = <"Generate `_type_ref_` from `_type_` and save."> result = (P_BMM_SIMPLE_TYPE) < type = <"P_BMM_SIMPLE_TYPE"> > > > > ["P_BMM_SINGLE_PROPERTY_OPEN"] = < name = <"P_BMM_SINGLE_PROPERTY_OPEN"> documentation = <"Persistent form of a `BMM_SINGLE_PROPERTY_OPEN`."> ancestors = <"P_BMM_PROPERTY", ...> properties = < ["type_ref"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_ref"> documentation = <"Type definition of this property computed from `_type_` for later use in `_bmm_property_`."> type = <"P_BMM_OPEN_TYPE"> > ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Type definition of this property, if a simple String type reference. Really we should use `_type_def_` to be regular in the schema, but that makes the schema more wordy and less clear. So we use this persisted String value, and compute the `_type_def_` on the fly. Persisted attribute."> type = <"String"> > ["bmm_property"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_property"> documentation = <"`BMM_PROPERTY` created by `_create_bmm_property_definition_`."> type = <"BMM_PROPERTY"> > > functions = < ["type_def"] = < name = <"type_def"> documentation = <"Generate `_type_ref_` from `_type_` and save."> result = (P_BMM_SIMPLE_TYPE) < type = <"P_BMM_OPEN_TYPE"> > > > > ["P_BMM_GENERIC_PROPERTY"] = < name = <"P_BMM_GENERIC_PROPERTY"> documentation = <"Persistent form of `BMM_GENERIC_PROPERTY`."> ancestors = <"P_BMM_PROPERTY", ...> properties = < ["type_def"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_def"> documentation = <"Type definition of this property, if not a simple String type reference. Persistent attribute."> type = <"P_BMM_GENERIC_TYPE"> > ["bmm_property"] = (P_BMM_SINGLE_PROPERTY) < name = <"bmm_property"> documentation = <"`BMM_PROPERTY` created by `_create_bmm_property_definition_`."> type = <"BMM_PROPERTY"> > > > ["P_BMM_CONSTANT"] = < name = <"P_BMM_CONSTANT"> documentation = <"Persistent form of a BMM constant, i.e. a named, typed literal value defined on a class."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this constant within its class. Persisted attribute."> is_mandatory = type = <"String"> > ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Type name of this constant, as a simple class name. Persisted attribute."> is_mandatory = type = <"String"> > ["value"] = (P_BMM_SINGLE_PROPERTY) < name = <"value"> documentation = <"The literal value of this constant, in its persisted (serialised) form. Persisted attribute."> type = <"String"> > > > ["P_BMM_FUNCTION"] = < name = <"P_BMM_FUNCTION"> documentation = <"Persistent form of a BMM function (routine) definition within a class definition."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this function within its class. Persisted attribute."> is_mandatory = type = <"String"> > ["aliases"] = (P_BMM_GENERIC_PROPERTY) < name = <"aliases"> documentation = <"Optional alias names for this function, keyed by alias. Persisted attribute."> type_def = < generic_parameters = <"String", "String"> root_type = <"Hash"> > > ["is_abstract"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_abstract"> documentation = <"True if this function is abstract in its class, i.e. has no implementation. Persisted attribute."> type = <"Boolean"> > ["parameters"] = (P_BMM_GENERIC_PROPERTY) < name = <"parameters"> documentation = <"Formal parameters of the function, keyed by parameter name. Persisted attribute."> type_def = < generic_parameters = <"String", "P_BMM_FUNCTION_PARAMETER"> root_type = <"Hash"> > > ["pre_conditions"] = (P_BMM_GENERIC_PROPERTY) < name = <"pre_conditions"> documentation = <"Optional pre-condition assertions on this function, keyed by tag. Persisted attribute."> type_def = < generic_parameters = <"String", "String"> root_type = <"Hash"> > > ["post_conditions"] = (P_BMM_GENERIC_PROPERTY) < name = <"post_conditions"> documentation = <"Optional post-condition assertions on this function, keyed by tag. Persisted attribute."> type_def = < generic_parameters = <"String", "String"> root_type = <"Hash"> > > ["result"] = (P_BMM_SINGLE_PROPERTY) < name = <"result"> documentation = <"Type definition of the function result, if any (absent for procedures). Persisted attribute."> type = <"P_BMM_TYPE"> > ["is_nullable"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_nullable"> documentation = <"True if the result of this function is allowed to be Void (null). Persisted attribute."> type = <"Boolean"> > > > ["P_BMM_FUNCTION_PARAMETER"] = < name = <"P_BMM_FUNCTION_PARAMETER"> documentation = <"Persistent form of a BMM function (routine) parameter; abstract parent of the concrete persisted parameter kinds."> ancestors = <"P_BMM_MODEL_ELEMENT", ...> is_abstract = properties = < ["name"] = (P_BMM_SINGLE_PROPERTY) < name = <"name"> documentation = <"Name of this parameter within its function signature. Persisted attribute."> is_mandatory = type = <"String"> > ["is_nullable"] = (P_BMM_SINGLE_PROPERTY) < name = <"is_nullable"> documentation = <"True if this parameter is allowed to be Void (null) in a call. Persisted attribute."> type = <"Boolean"> > > > ["P_BMM_SINGLE_FUNCTION_PARAMETER"] = < name = <"P_BMM_SINGLE_FUNCTION_PARAMETER"> documentation = <"Persistent form of a single-valued function parameter, i.e. one whose type is a simple class reference."> ancestors = <"P_BMM_FUNCTION_PARAMETER", ...> properties = < ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Type name of this parameter, as a simple class name. Persisted attribute."> is_mandatory = type = <"String"> > > > ["P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN"] = < name = <"P_BMM_SINGLE_FUNCTION_PARAMETER_OPEN"> documentation = <"Persistent form of a single-valued function parameter whose type is an open generic parameter, e.g. `T`."> ancestors = <"P_BMM_FUNCTION_PARAMETER", ...> properties = < ["type"] = (P_BMM_SINGLE_PROPERTY) < name = <"type"> documentation = <"Open type parameter, i.e. a generic parameter name such as `T`, `G` etc. Persisted attribute."> is_mandatory = type = <"String"> > > > ["P_BMM_CONTAINER_FUNCTION_PARAMETER"] = < name = <"P_BMM_CONTAINER_FUNCTION_PARAMETER"> documentation = <"Persistent form of a function parameter whose type is a container type such as `List`."> ancestors = <"P_BMM_FUNCTION_PARAMETER", ...> properties = < ["type_def"] = (P_BMM_SINGLE_PROPERTY) < name = <"type_def"> documentation = <"Type definition of this parameter. Persisted attribute."> is_mandatory = type = <"P_BMM_CONTAINER_TYPE"> > ["cardinality"] = (P_BMM_GENERIC_PROPERTY) < name = <"cardinality"> documentation = <"Cardinality of this parameter, if a container type. Persisted attribute."> type_def = < generic_parameters = <"Integer", ...> root_type = <"Interval"> > > > > ["P_BMM_GENERIC_FUNCTION_PARAMETER"] = < name = <"P_BMM_GENERIC_FUNCTION_PARAMETER"> documentation = <"Persistent form of a function parameter whose type is a generic type such as `Interval