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 | GmTypeof properties with the typeobject | |
| GmSimpleTypeextends: GmScalarType | true | Super type for simple scalar types | |
| GmBooleanTypeextends: GmSimpleType | false | GmTypeof properties with the typeboolean | |
| GmDateTypeextends: GmSimpleType | false | GmTypeof properties with the typedate | |
| GmDecimalTypeextends: GmSimpleType | false | GmTypeof properties with the typedecimal | |
| GmFloatTypeextends: GmSimpleType | false | GmTypeof properties with the typefloat | |
| GmIntegerTypeextends: GmSimpleType | false | GmTypeof properties with the typeinteger | |
| GmLongTypeextends: GmSimpleType | false | GmTypeof properties with the typelong | |
| GmStringTypeextends: GmSimpleType | false | GmTypeof properties with the typestring | |
| GmDoubleTypeextends: GmSimpleType | false | GmTypeof properties with the typedouble | 
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 metadataanddeclaringModelto 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 GmMetaModelviatypeOverrides | |
| 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 metadatato 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 |