...
The metadata structure of object types has to be defined in the schema. In this definition, properties are selected that should be connected to the object type. Each property itself is in turn defined in the schema as well by the specification of its attributes. The properties can be selected or not selected in object type definitions, but their attributes are fixed and can not be modified. There required
attribute is the only one exception for the required
attribute, that can actually exception as it can be overwritten by a propertyReference
in object type definitions. This provides the possibility makes it possible to decide for each property if individually whether it is required or not in each every single object type or not. Since schema structures can even be changed at runtime, yuuvis® Momentum offers a high flexibility in terms of document lifecycle management.
...
To work through this tutorial, the following is required:
- Set-up yuuvis® API Momentumsystem (see minikube setup, for example)
- A user with read and write permissions on a document type in the system (see tutorial for permissions)
Overwriting the
...
required
...
Attribute of Properties
Any All property definition in definitions in the schema needs need the specification of the required
attribute. Its boolean value decides if the corresponding property is mandatory (true
) or optional (false
) for an object. However, the value of the required
attribute can be overwritten by a propertyReference
in object type definitions or secondary object type definitions.
...
In an import management system, documents might be imported with less properties than they will have later lateron in their lifecycle. A fresh freshly imported object for example , does not necessarily have an editor. Later in the document lifecycle, this information might may be required. By overwriting the required
attribute of the property editor
, it is possible to use the same property throughout the whole entire lifecycle.
In the example code below, the editor
property editor
is defined. The required
attribute of the editor
property editor
is set to true
. If not overwritten by a propertyReference
, the property the editor
will property will be mandatory for any object of a type including the editor
property in its definition.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<propertyStringDefinition> <id>editor</id> <propertyType>string</propertyType> <cardinality>single</cardinality> <required>true</required> </propertyStringDefinition> |
...
Overwriting Using an Object Type Definition
In an object type definition, a propertyReference
can be used to set a value for the required
attribute for of a property. This value can be different from the value specified in the property definition. In this case, the required
attribute will have the value from soecified in the object type definition.
Since for an imported1
document the editor
property should be optional for an imported1
document, the required
attribute is set to false
by means of a propertyReference
.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<typeDocumentDefinition> <id>imported1</id> <baseId>system:document</baseId> <propertyReference required="false">editor</propertyReference> <contentStreamAllowed>allowed</contentStreamAllowed> </typeDocumentDefinition> |
Overwriting
...
Using a Secondary Object Type Definition
An alternative possibility is the usage of using a secondary object type on which the object type definition can be based. Also in the definition of the secondary object type, a , a propertyReference
can be used to set a value for the required
attribute for a property in the definition of the secondary object type. The required
attribute value specified in the original property definition is again overwritten.
In the example code below, the editor
property editor
is not included directly in the imported2
document type definition. But it is based on the non-static secondary object type noeditor
. The definition of noeditor
uses the property editor
property and sets its required
attribute to false
by means of a propertyReference
. Thus, for objects of the type imported2
, the property editor
property will be available and optional.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<typeDocumentDefinition> <id>imported2</id> <baseId>system:document</baseId> <contentStreamAllowed>allowed</contentStreamAllowed> <secondaryObjectTypeId static="false">noeditor</secondaryObjectTypeId> </typeDocumentDefinition> <typeSecondaryDefinition> <id>noeditor</id> <baseId>system:secondary</baseId> <propertyReference required="false">editor</propertyReference> </typeSecondaryDefinition> |
Handling
...
Multiple Property References
In an object type definition, it is possible to set a value for the required
attribute, and additionally include multiple secondary object types specifying the required
attribute as well. If at least in one definition among the others implies required=true
, it this attribute will be true
for every object of the corresponding type. The value true
dominates over false
independently on regardless of the location of the propertyReference
.
In the example code below, an object type imported3
is defined. The property editor
property is included, but the required
attribute is overwritten to false
. Thus, the property editor
would property would be optional. But there are However, the two secondary object types included noeditor
and witheditor
, that might may have specified different values values specified for the required
attribute of the editor
property editor
.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<typeDocumentDefinition> <id>imported3</id> <baseId>system:document</baseId> <propertyReference required="false">editor</propertyReference> <contentStreamAllowed>allowed</contentStreamAllowed> <secondaryObjectTypeId static="false">noeditor</secondaryObjectTypeId> <secondaryObjectTypeId static="false">witheditor</secondaryObjectTypeId> </typeDocumentDefinition> <typeSecondaryDefinition> <id>noeditor</id> <baseId>system:secondary</baseId> <propertyReference required="false">editor</propertyReference> </typeSecondaryDefinition> <typeSecondaryDefinition> <id>witheditor</id> <baseId>system:secondary</baseId> <propertyReference>editor</propertyReference> </typeSecondaryDefinition> |
The definition of the secondary object type noeditor
overwrites the required
attribute of the property editor
to property to false
. This value equals the specification in the imported3
object type. In contrast, the definition of witheditor
includes the editor
property editor
by means of a propertyReference
but does not explicitly specify a value for the required
attribute. This means , that the value true
from the property definition will be used for witheditor
.
If an object of type imported3
has none of the two secondary object types, the editor
property editor
is optional.
If an object of type imported3
has the secondary object type noeditor
, it does not change anythingnothing changes. The editor
property editor
is still optional.
But if an object of type imported3
has the secondary object type witheditor
, the property editor
is mandatory in this object.
...