@startuml class concerto.metamodel_0_4_0.Position { + Integer line + Integer column + Integer offset } class concerto.metamodel_0_4_0.Range { + Position start + Position end + String source } concerto.metamodel_0_4_0.Range "1" *-- "1" concerto.metamodel_0_4_0.Position : start concerto.metamodel_0_4_0.Range "1" *-- "1" concerto.metamodel_0_4_0.Position : end class concerto.metamodel_0_4_0.TypeIdentifier { + String name + String namespace } class concerto.metamodel_0_4_0.DecoratorLiteral { + Range location } concerto.metamodel_0_4_0.DecoratorLiteral "1" *-- "1" concerto.metamodel_0_4_0.Range : location class concerto.metamodel_0_4_0.DecoratorString { + String value } concerto.metamodel_0_4_0.DecoratorString --|> concerto.metamodel_0_4_0.DecoratorLiteral class concerto.metamodel_0_4_0.DecoratorNumber { + Double value } concerto.metamodel_0_4_0.DecoratorNumber --|> concerto.metamodel_0_4_0.DecoratorLiteral class concerto.metamodel_0_4_0.DecoratorBoolean { + Boolean value } concerto.metamodel_0_4_0.DecoratorBoolean --|> concerto.metamodel_0_4_0.DecoratorLiteral class concerto.metamodel_0_4_0.DecoratorTypeReference { + TypeIdentifier type + Boolean isArray } concerto.metamodel_0_4_0.DecoratorTypeReference "1" *-- "1" concerto.metamodel_0_4_0.TypeIdentifier : type concerto.metamodel_0_4_0.DecoratorTypeReference --|> concerto.metamodel_0_4_0.DecoratorLiteral class concerto.metamodel_0_4_0.Decorator { + String name + DecoratorLiteral[] arguments + Range location } concerto.metamodel_0_4_0.Decorator "1" *-- "*" concerto.metamodel_0_4_0.DecoratorLiteral : arguments concerto.metamodel_0_4_0.Decorator "1" *-- "1" concerto.metamodel_0_4_0.Range : location class concerto.metamodel_0_4_0.Identified { } class concerto.metamodel_0_4_0.IdentifiedBy { + String name } concerto.metamodel_0_4_0.IdentifiedBy --|> concerto.metamodel_0_4_0.Identified class concerto.metamodel_0_4_0.Declaration { + String name + Decorator[] decorators + Range location } concerto.metamodel_0_4_0.Declaration "1" *-- "*" concerto.metamodel_0_4_0.Decorator : decorators concerto.metamodel_0_4_0.Declaration "1" *-- "1" concerto.metamodel_0_4_0.Range : location class concerto.metamodel_0_4_0.EnumDeclaration { + EnumProperty[] properties } concerto.metamodel_0_4_0.EnumDeclaration "1" *-- "*" concerto.metamodel_0_4_0.EnumProperty : properties concerto.metamodel_0_4_0.EnumDeclaration --|> concerto.metamodel_0_4_0.Declaration class concerto.metamodel_0_4_0.EnumProperty { + String name + Decorator[] decorators + Range location } concerto.metamodel_0_4_0.EnumProperty "1" *-- "*" concerto.metamodel_0_4_0.Decorator : decorators concerto.metamodel_0_4_0.EnumProperty "1" *-- "1" concerto.metamodel_0_4_0.Range : location class concerto.metamodel_0_4_0.ConceptDeclaration { + Boolean isAbstract + Identified identified + TypeIdentifier superType + Property[] properties } concerto.metamodel_0_4_0.ConceptDeclaration "1" *-- "1" concerto.metamodel_0_4_0.Identified : identified concerto.metamodel_0_4_0.ConceptDeclaration "1" *-- "1" concerto.metamodel_0_4_0.TypeIdentifier : superType concerto.metamodel_0_4_0.ConceptDeclaration "1" *-- "*" concerto.metamodel_0_4_0.Property : properties concerto.metamodel_0_4_0.ConceptDeclaration --|> concerto.metamodel_0_4_0.Declaration class concerto.metamodel_0_4_0.AssetDeclaration { } concerto.metamodel_0_4_0.AssetDeclaration --|> concerto.metamodel_0_4_0.ConceptDeclaration class concerto.metamodel_0_4_0.ParticipantDeclaration { } concerto.metamodel_0_4_0.ParticipantDeclaration --|> concerto.metamodel_0_4_0.ConceptDeclaration class concerto.metamodel_0_4_0.TransactionDeclaration { } concerto.metamodel_0_4_0.TransactionDeclaration --|> concerto.metamodel_0_4_0.ConceptDeclaration class concerto.metamodel_0_4_0.EventDeclaration { } concerto.metamodel_0_4_0.EventDeclaration --|> concerto.metamodel_0_4_0.ConceptDeclaration class concerto.metamodel_0_4_0.Property { + String name + Boolean isArray + Boolean isOptional + Decorator[] decorators + Range location } concerto.metamodel_0_4_0.Property "1" *-- "*" concerto.metamodel_0_4_0.Decorator : decorators concerto.metamodel_0_4_0.Property "1" *-- "1" concerto.metamodel_0_4_0.Range : location class concerto.metamodel_0_4_0.RelationshipProperty { + TypeIdentifier type } concerto.metamodel_0_4_0.RelationshipProperty "1" *-- "1" concerto.metamodel_0_4_0.TypeIdentifier : type concerto.metamodel_0_4_0.RelationshipProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.ObjectProperty { + String defaultValue + TypeIdentifier type } concerto.metamodel_0_4_0.ObjectProperty "1" *-- "1" concerto.metamodel_0_4_0.TypeIdentifier : type concerto.metamodel_0_4_0.ObjectProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.BooleanProperty { + Boolean defaultValue } concerto.metamodel_0_4_0.BooleanProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.DateTimeProperty { } concerto.metamodel_0_4_0.DateTimeProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.StringProperty { + String defaultValue + StringRegexValidator validator } concerto.metamodel_0_4_0.StringProperty "1" *-- "1" concerto.metamodel_0_4_0.StringRegexValidator : validator concerto.metamodel_0_4_0.StringProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.StringRegexValidator { + String pattern + String flags } class concerto.metamodel_0_4_0.DoubleProperty { + Double defaultValue + DoubleDomainValidator validator } concerto.metamodel_0_4_0.DoubleProperty "1" *-- "1" concerto.metamodel_0_4_0.DoubleDomainValidator : validator concerto.metamodel_0_4_0.DoubleProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.DoubleDomainValidator { + Double lower + Double upper } class concerto.metamodel_0_4_0.IntegerProperty { + Integer defaultValue + IntegerDomainValidator validator } concerto.metamodel_0_4_0.IntegerProperty "1" *-- "1" concerto.metamodel_0_4_0.IntegerDomainValidator : validator concerto.metamodel_0_4_0.IntegerProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.IntegerDomainValidator { + Integer lower + Integer upper } class concerto.metamodel_0_4_0.LongProperty { + Long defaultValue + LongDomainValidator validator } concerto.metamodel_0_4_0.LongProperty "1" *-- "1" concerto.metamodel_0_4_0.LongDomainValidator : validator concerto.metamodel_0_4_0.LongProperty --|> concerto.metamodel_0_4_0.Property class concerto.metamodel_0_4_0.LongDomainValidator { + Long lower + Long upper } class concerto.metamodel_0_4_0.Import { + String namespace + String uri } class concerto.metamodel_0_4_0.ImportAll { } concerto.metamodel_0_4_0.ImportAll --|> concerto.metamodel_0_4_0.Import class concerto.metamodel_0_4_0.ImportType { + String name } concerto.metamodel_0_4_0.ImportType --|> concerto.metamodel_0_4_0.Import class concerto.metamodel_0_4_0.Model { + String namespace + String sourceUri + String concertoVersion + Import[] imports + Declaration[] declarations } concerto.metamodel_0_4_0.Model "1" *-- "*" concerto.metamodel_0_4_0.Import : imports concerto.metamodel_0_4_0.Model "1" *-- "*" concerto.metamodel_0_4_0.Declaration : declarations class concerto.metamodel_0_4_0.Models { + Model[] models } concerto.metamodel_0_4_0.Models "1" *-- "*" concerto.metamodel_0_4_0.Model : models @enduml