Usages can have a multiplicity specifying how many values they can have for the instances of their featuring definition or usage. The multiplicity is indicated as a range of natural numbers in square brackets, e.g., [lowerBound..upperBound].

  • The lower bound must be finite. If the lower bound is unspecified, then it is taken to be equal to the upper bound, except when the upper bound is *, in which case it is treated as 0.
  • The upper bound must be equal to or greater than the lower bound number. It can be unbounded, indicated by the * sign.

If a multiplicity is not declared for a usage, then the usage inherits the multiplicity constraints of any other usages it subsets or redefines. If no tighter constraint is inherited, the effective default is the most general multiplicity [0..*]. However, a tighter default of [1..1] is implicitly declared for the usage if all of the following conditions hold:

  • The usage is an attribute usage, an item usage (including a part usage, except if it is a connection usage), or a port usage.
  • The usage is owned by a definition or another usage (not a package).
  • The usage does not have any explicit owned subsettings or owned redefinitions.

The following keywords can also be used after the multiplicity or in place of it:

  • nonunique – a non-unique usage indicates that the same usage value can appear more than once. Usages are unique by default, i.e., two usage values can be the same.
  • ordered – an ordered usage indicates that the usage values can be placed in an order from 1 to the number of values. The features are unordered by default.

For information on cross multiplicity, which is used only within the context of cross features and is usually specified for the end elements of a connector, see the Cross features page.

Specifying usage multiplicity

Specifying usage multiplicity via the Textual Editor

To specify usage multiplicity via the Textual Editor


  1. In the Textual Editor, follow the part name with brackets.
  2. Specify a range of natural numbers in square brackets, e.g., [lowerBound..upperBound].
  3. Click the Synchronize button.

part bodyAssy : BodyAssy {
    part doors [2..4] : Door;
    part body;
    part sunroof [0..1] : Sunroof;
}

Specifying usage multiplicity via the Specification panel

To specify usage multiplicity via the Specification panel