A «Category» is a rigid mixin that does not require a dependency to be specified. It is used to aggregate essential properties to individuals which following different identity principles. Let’s see some examples:

Category examples

Categories are usually used in a refactoring process. For example, let’s suppose that you defined two classes in your model, Person and Animal. Now you want to state that either people and animals have a weight. You than create a «Category», which has weight, and generalize the existing classes into it.


C1: A «Category» is always abstract. Notice that abstract classes are represented with an italic label.

Category application 1

C2: A «Category» aggregate individuals that follow different identity principles, therefore it may not have as ancestor the following constructs: «Kind», «Quantity», «Collective», «Subkind», «Role», «Phase», «Relator», «Mode», «Quality».

Category forbidden 1

C3: A «Category» is a rigid construct, therefore it cannot have as ancestor an anti-rigid type, as: «Role», «RoleMixin», «Phase».

Category forbidden 2

C4: Categories cannot have as descendants the following types: «Mixin», «Role», «Phase».

Category forbidden 3

Common questions

Ask us some question if something is not clear …


EX1: Fragment from the ECG Ontology (see more):

Example ECG

EX2: Fragment from UFO-S, a commitment-based service ontology (see more):

Example UFO-S