Skip to main content

Concepts

Concepts are similar to class declarations in most object-oriented languages, in that they may have a super-type and a set of typed properties:

abstract concept Animal {
o DateTime dob
}

concept Dog extends Animal {
o String breed
}

Concepts can be declared abstract if it should not be instantiated (must be subclassed).

Identity

Concepts may optionally declare an identifying field, using either the identified by (explicitly named identity field) or identified ($identifier system identity field) syntax. Identifying fields must have type String or a String facet.

Person below is defined to use the email property as its identifying field.

concept Person identified by email {
o String email
o String firstName
o String lastName
}

While Product below will use $identifier as its identifying field.

concept Product identified {
o String name
o Double price
}

Assets

An asset is a class declaration that has a single String property which acts as an identifier. You can use the modelManager.getAssetDeclarations API to look up all assets.

asset Vehicle identified by vin {
o String vin
}

Assets are implicitly identified if you do not specify your own identifing property. The property name is $identifier.

Assets are typically used in your models for the long-lived identifiable Things (or nouns) in the model: cars, orders, shipping containers, products, etc.

Participants

Participants are class declarations that have a single String property acting as an identifier. You can use the modelManager.getParticipantDeclarations API to look up all participants.

participant Customer identified by email {
o String email
}

Participants are implicitly identified if you do not specify your own identifing property. The property name is $identifier.

Participants are typically used for the identifiable people or organizations in the model: person, customer, company, business, auditor, etc.

Transactions

Transactions have an implicit $timestamp property with type DateTime. You can use the modelManager.getTransactionDeclarations API to look up all transactions.

transaction Order {
}

Transactions are typically used in models for the identifiable business events or messages that are submitted by Participants to change the state of Assets: cart check out, change of address, identity verification, place order, etc.

Events

Events are similar to Transactions in that they are also class declarations that have a $timestamp property. You can use the modelManager.getEventDeclarations API to look up all events.

event LateDelivery {
}

Events are typically used in models for the identifiable business events or messages that are emitted by logic to signify that something of interest has occurred.