Each property definition contains the following information:
The name of the property to which this definition applies.
The required type of the property (though it may be specified as UNDEFINED).
The value constraints on the property. That is, what range of possible values may be assigned to this property.
The default value that the property will have if it is auto-created.
Whether this property will be auto-created when its parent node is created. Only properties with a default value can be auto-created.
Whether the property is mandatory. A mandatory property is one that must exist. If a node of a type that specifies a mandatory property is created then any attempt to save that node without adding the mandatory property will fail. Since single-value properties either have a value or do not exist (there being no concept of the null value) this implies that a mandatory single-value property must have a value. A mandatory multi-value property on the other hand may have zero or more values.
The onParentVersion status of the property. This specifies what happens to this property if a new version of its parent node is checked-in.
Whether the property is protected. A protected property is one which cannot be modified or removed (except by removing its parent) directly through this API but which may be modified or removed by the repository implementation itself.
Whether this property can have multiple values, meaning that it stores an array of values, not just one. Note that this “multiple values” flag is special in that a given node type may have two property definitions that are identical in every respect except for the their “multiple values” status. For example, a node type can specify two string properties both called X, one of which is multi-valued and the other that is not. An example of such a node type is nt:unstructured (see 6.7.22.4 nt:unstructured).