Skip to content
logoBack to home screen

Meta Model

meta-model is a model that describes models.

The name

If the name was analogous to other models it would be called model-model, just like a model for animals would be called animal-model.

General

The main entity type is GmMetaModel which denotes a model.

Note this name is slightly misleading, the correct name would be GmModel, but because of the type's importance it would be hard to change it.

A model instance reflects the types the model declares and what other models it depends on.

In this article, we will explore its structure and inspect its elements.

For general information about models, see Models.

Basic Structure

Below you can find an overview of the meta-model's basic structure, depicting its most relevant elements.

Important Elements

TypeAbstractPurposeProperties
GmMetaModel
extends:
GmModelElement
falseDepicts models and the meta-model itselfname: string

version: string

types: set<GmType>
GmModelElement
extends:
StandardIdentifiable
trueSuper type for meta-model elements
GmType
extends:
GmModelElement
trueSuper type for all typestypeSignature: string

declaringModel: GmMetaModel
GmEntityType
extends:
GmCustomType
falseCustom GM-typessuperTypes: set<GmEntityType>

properties: set<GmProperty>

evaluatesTo: GmType

isAbstract: boolean
GmProperty
extends:
GmPropertyInfo
falseCustom GM-model element to depict details of an entity typename: string

isAbstract: boolean

type: GmType
declaringType: GmEntityType
GmMapType
extends:
GmCollectionType
falseGM-collection type allowing to hold elements
depicted by key-type and value-type
keyType: GmType

valueType: GmType
GmLinearCollectionType
extends:
GmCollectionType
trueSuper type for linear collection typeselementType: GmType
GmListType
extends:
GmLinearCollectionType
falseLinear GM-collection type allowing to hold
a number of ordered elements depicted by elementType
GmSetType
extends:
GmLinearCollectionType
falseLinear GM-collection type allowing to hold
a number of un-ordered elements depicted by elementType
GmBaseType
extends:
GmType
falseGmType of properties with the type object
GmSimpleType
extends:
GmScalarType
trueSuper type for simple scalar types
GmBooleanType
extends:
GmSimpleType
falseGmType of properties with the type boolean
GmDateType
extends:
GmSimpleType
falseGmType of properties with the type date
GmDecimalType
extends:
GmSimpleType
falseGmType of properties with the type decimal
GmFloatType
extends:
GmSimpleType
falseGmType of properties with the type float
GmIntegerType
extends:
GmSimpleType
falseGmType of properties with the type integer
GmLongType
extends:
GmSimpleType
falseGmType of properties with the type long
GmStringType
extends:
GmSimpleType
falseGmType of properties with the type string
GmDoubleType
extends:
GmSimpleType
falseGmType of properties with the type double

GmProperty

Allows to instantiate properties, which depict the details of an entity type.

Important Elements

TypeAbstractPurposeProperties
GmProperty
extends:
GmPropertyInfo
falseCustom GM-model element
to depict details of an entity type
name: string

nullable: boolean

type: GmType
declaringType: GmEntityType

typeRestriction: GmTypeRestriction
GmTypeRestriction
extends:
GmModelElement
falseAllows to restrict
which type a property can have
types: list<GmType>
Definition of allowed types

keyTypes: list<GmType>
Used for restriction on map-keys

allowVd: boolean
Allow the use of value descriptors, e.g. now() for date-values

keyAllowVd: boolean
Similar to allowVd, but for map-keys
QualifiedProperty
extends:
StandardIdentifiable
falseUsed to reference a property
along with a given entity
property: GmProperty

entityType: GmEntityType
PropertyPath
extends:
StandardIdentifiable
falseStandard representation of property path, e.g. Company.ceo.companyCar.brandproperties: list<GmProperty>

Info Types

Info-Types allow to enrich model elements to make them more specific to their nature.

Important Elements

TypeAbstractPurposeProperties
GmCustomModelElement
extends:
GmModelElement
trueSuper-type for all info-types
GmCustomTypeInfo
extends:
GmCustomModelElement
HasMetadata
trueProvides the properties metadata and declaringModel to its sub-types.declaringModel: GmMetaModel
GmEntityTypeInfo
extends:
GmCustomTypeInfo
trueEnriching of entity types.See Overrides and Metadata
GmEnumTypeInfo
extends:
GmCustomTypeInfo
trueEnriching of enum types.See Overrides and Metadata
GmEnumConstantInfo
extends:
GmCustomModelElement,
HasMetadata
trueEnriching of enum constants.See Overrides and Metadata
GmPropertyInfo
extends:
GmCustomModelElement,
HasMetadata
trueEnriching of properties.initializer: object
See Overrides and Metadata

Overrides

Overrides allow to apply metadata without changing the original entity. Without an override a metadata configuration on a type from model dependency will apply on that model globally. With an override this can be avoided - the configuration will only apply to your local model.

In addition, metadata allows you to change the declaringTypeInfo, i.e. although a property might be inherited, its origin can be mimicked such, that the sub-type seems to be the declaring type. Further, overrides allow to specify initial values on inherited properties without changing them at the origin.

See the Metadata section for a use-case.

Important Elements

TypeAbstractPurposeProperties
GmCustomTypeOverride
extends:
GmCustomTypeInfo
falseAbstract super-type for
GmEntityOverride and GmEnumTypeOverride.
Referenced from GmMetaModel via typeOverrides
GmEntityTypeOverride
extends:
GmCustomTypeInfo
falseSpecific override for entity typespropertyOverrides: list<GmPropertyOverride>

entityType: GmEntityType
GmEnumTypeOverride
extends:
GmCustomTypeInfo
falseSpecific override for enum typesconstantOverrides: list<GmEnumConstantOverride>

enumType: GmEnumType
GmEnumConstantOverride
extends:
GmEnumConstantInfo
falseOverrides enum constantsdeclaringTypeOverride: GmEnumOverride

enumConstant: GmEnumConstant
GmPropertyOverride
extends:
GmCustomModelElement
falseOverrides propertiesdeclaringTypeInfo: GmEntityTypeInfo

property: GmProperty

Metadata

Metadata are used to configure models specifically to use cases. To enable this, the meta-model has a dependency to the basic meta-data-model.

For more information, see Metadata.

Important Elements

TypeAbstractPurposePropertiesOverrides
HasMetadata
extends:
GenericEntity
trueAbstract type from meta-data-model.
Has property metadata to be inherited by
custom types, properties and enum constants
metadata: Metadata
Metadata
extends:
StandardIdentifiable
trueAbstract type from meta-data-model.
Provides the actual metadata configuration.
conflictPriority: double

important: boolean

inherited: boolean

selector: MetaDataSelector
GmEntityTypeInfo
extends:
GmCustomTypeInfo
trueEnriching of entity types.
Makes use of overriding.
propertyMetadata: set<Metadata>propertyOverride:TypeRestriction

types:PropertyMetaData
UniversalMetaData
GmEnumTypeInfo
extends:
GmCustomTypeInfo
trueEnriching of entity types.
Makes use of overriding.
enumConstantMetadata: set<Metadata>propertyOverride:TypeRestriction

types:
EnumConstantMetaData
UniversalMetaData

propertyOverride:
metadata

declaringTypeInfo:
GmEntityTypeInfo
GmPropertyInfo
extends:
GmCustomModelElement,
HasMetadata
trueEnriching of properties.
Makes use of overriding.
initializer: object
propertyOverride:metadata

declaringTypeInfo:
GmPropertyInfo
GmEnumConstantInfo
extends:
GmCustomModelElement,
HasMetadata
trueEnriching of enum constants.
Makes use of overriding.
initializer: object
propertyOverride:metadata

declaringTypeInfo:

GmEnumConstantInfo