Defining a content model is expressed in terms of the content metamodel.
The content metamodel comprises the following:
- Type: A type is at the heart of the content metamodel, and represents objects in the real world with support for properties and the ability to inherit the definition of a parent type.
- Properties: Properties are named items of metadata associated with the type, where each property is of a given data type. Applying constraints let you restrict the values of a property.
- Associations: Associations model relationships between types. Child associations provide the ability to model compositions where the parent effectively owns the children and, therefore, operations like delete will propagate through to the children. Peer associations define a relationship between two objects where neither object is superior to the other.
- Aspects; An aspect supports the same capabilities as a type, meaning it supports properties and may be related to and inherit the definition of a parent aspect. Aspects can be shared across types, allowing cross-cutting of the content model, which is the sharing of property and association definitions by attaching them to multiple types. This is the content metamodel equivalent of multiple inheritance.
Content models constrain the structure of nodes held in the content repository. When a node is created, it is given a type. The type may change over time, as long as the new type is compatible with the old type; however, a node is only ever of one type at any given time. In contrast, a node may be attached to one or more aspects. On creation, a node inherits the aspects attached to its type as defined by the content model at design time. At runtime, you can adjust the aspects attached to a node. This allows content held in the content repository to be loosely constrained and for content to dynamically inherit features and capabilities.