Meta Model
meta-model is a model that describes models.
On this page
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
| Type | Abstract | Purpose | Properties |
|---|---|---|---|
GmMetaModelextends: GmModelElement | false | Depicts models and the meta-model itself | name: stringversion: stringtypes: set<GmType> |
GmModelElementextends: StandardIdentifiable | true | Super type for meta-model elements | |
GmTypeextends: GmModelElement | true | Super type for all types | typeSignature: stringdeclaringModel: GmMetaModel |
GmEntityTypeextends: GmCustomType | false | Custom GM-types | superTypes: set<GmEntityType>properties: set<GmProperty>evaluatesTo: GmTypeisAbstract: boolean |
GmPropertyextends: GmPropertyInfo | false | Custom GM-model element to depict details of an entity type | name: stringisAbstract: booleantype: GmTypedeclaringType: GmEntityType |
GmMapTypeextends: GmCollectionType | false | GM-collection type allowing to hold elements depicted by key-type and value-type | keyType: GmTypevalueType: GmType |
GmLinearCollectionTypeextends: GmCollectionType | true | Super type for linear collection types | elementType: GmType |
GmListTypeextends: GmLinearCollectionType | false | Linear GM-collection type allowing to hold a number of ordered elements depicted by elementType | |
GmSetTypeextends: GmLinearCollectionType | false | Linear GM-collection type allowing to hold a number of un-ordered elements depicted by elementType | |
GmBaseTypeextends: GmType | false | GmType of properties with the type object | |
GmSimpleTypeextends: GmScalarType | true | Super type for simple scalar types | |
GmBooleanTypeextends: GmSimpleType | false | GmType of properties with the type boolean | |
GmDateTypeextends: GmSimpleType | false | GmType of properties with the type date | |
GmDecimalTypeextends: GmSimpleType | false | GmType of properties with the type decimal | |
GmFloatTypeextends: GmSimpleType | false | GmType of properties with the type float | |
GmIntegerTypeextends: GmSimpleType | false | GmType of properties with the type integer | |
GmLongTypeextends: GmSimpleType | false | GmType of properties with the type long | |
GmStringTypeextends: GmSimpleType | false | GmType of properties with the type string | |
GmDoubleTypeextends: GmSimpleType | false | GmType of properties with the type double |
GmProperty
Allows to instantiate properties, which depict the details of an entity type.

Important Elements
| Type | Abstract | Purpose | Properties |
|---|---|---|---|
GmPropertyextends: GmPropertyInfo | false | Custom GM-model element to depict details of an entity type | name: stringnullable: booleantype: GmTypedeclaringType: GmEntityTypetypeRestriction: GmTypeRestriction |
GmTypeRestrictionextends: GmModelElement | false | Allows 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: booleanAllow the use of value descriptors, e.g. now() for date-valueskeyAllowVd: booleanSimilar to allowVd, but for map-keys |
QualifiedPropertyextends: StandardIdentifiable | false | Used to reference a property along with a given entity | property: GmPropertyentityType: GmEntityType |
PropertyPathextends: StandardIdentifiable | false | Standard representation of property path, e.g. Company.ceo.companyCar.brand | properties: list<GmProperty> |
Info Types
Info-Types allow to enrich model elements to make them more specific to their nature.

Important Elements
| Type | Abstract | Purpose | Properties |
|---|---|---|---|
GmCustomModelElementextends: GmModelElement | true | Super-type for all info-types | |
GmCustomTypeInfoextends: GmCustomModelElementHasMetadata | true | Provides the properties metadata and declaringModel to its sub-types. | declaringModel: GmMetaModel |
GmEntityTypeInfoextends: GmCustomTypeInfo | true | Enriching of entity types. | See Overrides and Metadata |
GmEnumTypeInfoextends: GmCustomTypeInfo | true | Enriching of enum types. | See Overrides and Metadata |
GmEnumConstantInfoextends: GmCustomModelElement,HasMetadata | true | Enriching of enum constants. | See Overrides and Metadata |
GmPropertyInfoextends: GmCustomModelElement,HasMetadata | true | Enriching of properties. | initializer: objectSee 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
| Type | Abstract | Purpose | Properties |
|---|---|---|---|
GmCustomTypeOverrideextends: GmCustomTypeInfo | false | Abstract super-type for GmEntityOverride and GmEnumTypeOverride. Referenced from GmMetaModel via typeOverrides | |
GmEntityTypeOverrideextends: GmCustomTypeInfo | false | Specific override for entity types | propertyOverrides: list<GmPropertyOverride>entityType: GmEntityType |
GmEnumTypeOverrideextends: GmCustomTypeInfo | false | Specific override for enum types | constantOverrides: list<GmEnumConstantOverride>enumType: GmEnumType |
GmEnumConstantOverrideextends: GmEnumConstantInfo | false | Overrides enum constants | declaringTypeOverride: GmEnumOverrideenumConstant: GmEnumConstant |
GmPropertyOverrideextends: GmCustomModelElement | false | Overrides properties | declaringTypeInfo: GmEntityTypeInfoproperty: 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
| Type | Abstract | Purpose | Properties | Overrides |
|---|---|---|---|---|
HasMetadataextends: GenericEntity | true | Abstract type from meta-data-model. Has property metadata to be inherited bycustom types, properties and enum constants | metadata: Metadata | |
Metadataextends: StandardIdentifiable | true | Abstract type from meta-data-model. Provides the actual metadata configuration. | conflictPriority: doubleimportant: booleaninherited: booleanselector: MetaDataSelector | |
GmEntityTypeInfoextends: GmCustomTypeInfo | true | Enriching of entity types. Makes use of overriding. | propertyMetadata: set<Metadata> | propertyOverride:TypeRestrictiontypes: PropertyMetaDataUniversalMetaData |
GmEnumTypeInfoextends: GmCustomTypeInfo | true | Enriching of entity types. Makes use of overriding. | enumConstantMetadata: set<Metadata> | propertyOverride:TypeRestrictiontypes: EnumConstantMetaDataUniversalMetaDatapropertyOverride: metadatadeclaringTypeInfo: GmEntityTypeInfo |
GmPropertyInfoextends: GmCustomModelElement,HasMetadata | true | Enriching of properties. Makes use of overriding. | initializer: object | propertyOverride:metadatadeclaringTypeInfo: GmPropertyInfo |
GmEnumConstantInfoextends: GmCustomModelElement,HasMetadata | true | Enriching of enum constants. Makes use of overriding. | initializer: object | propertyOverride:metadatadeclaringTypeInfo: GmEnumConstantInfo |