Within Metrici, any node version (child) can inherit from one or more other node version (parent), provided that the person setting up the inheritance has link-to permission on the parent node. Parent nodes are listed using the Inherit From (system.INHERIT_FROM) member type.
Conceptually, inheritance works by assigning a precedence to each parent node and to the child node, with the parent nodes being assigned a precedence equal to their position in the inherit from list, and the child node having the highest precedence.
Members are merged in precedence sequence, with those of lower precedence at the top of the list. If maximum cardinality is reached, then the earlier items in the list are removed. With cardinality of 1, this means that parents listed later in the inherit from list take precedence over those listed earlier, and members defined on the child take precedence over any on the parents. If there are duplicate targets, the targets with the lower precedence are removed. This means property-like structures (with values and targets) take the value from the node with the highest precedence.
To switch off inheritance for a member type, list it in the Do Not Inherit (system.DO_NOT_INHERIT) list.
Types created with Type (library.core.TypeType) and its derivatives can use the template feature to specifiy that all instances of the type inherit from one or more prototype nodes.
The template feature creates an inheritance link between instances of the type and the prototype nodes listed in the node type's Template (library.core.template) members.
Templates do not support the Do Not Inherit (system.DO_NOT_INHERIT) list.