Structured data are stored in the TypeDeclarations section of an XPDL
file according to the XPDL standard.
<xpdl:TypeDeclaration Id="Address" Name="Address">
<xpdl:SchemaType>
<xsd:schema xmlns:Cou="http://www.infinity.com/bpm/model/NewWorkflowModel/Country"
xmlns:tns="http://www.infinity.com/bpm/model/NewWorkflowModel/Address" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.infinity.com/bpm/model/NewWorkflowModel/Address">
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="Street" type="xsd:string"/>
<xsd:element name="Number" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Country" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Address" type="tns:Address"/>
</xsd:schema>
</xpdl:SchemaType>
</xpdl:TypeDeclaration>
Per default, a strict xpath validation will be performed on XSD schemas. To change
the validation behavior, you can set
the property XPath.StrictEvaluation in your carnot.properties file.
If this property is set to true, which is the default value, strict XPath
evaluation will be performed. The following error is thrown in that case:
IllegalOperationException: MDL01123 - XPath 'FullName' is not defined.
If the property is set to false, a warning is logged. Dereferentiation paths on
structured data are invoked, even if the XSD schema
has changed, provided the path is still compatible with the new schema. Otherwise invocation
fails.
In case a structured data is marked as volatile, the following extended attribute will be serialized into the XPDL:
<carnot:Attribute Name="carnot:engine:volatile" Value="true"/>
Global annotations are stored as XSD annotations in the following structure:
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:infinity="...">
<xsd:element name="customer" type="Customer"> <xsd:annotation>
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="someString" type="xsd:string" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<infinity:storage>
<infinity:indexed>false</infinity:indexed>
<infinity:persistent>false</infinity:persistent>
</infinity:storage>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Other formats may specify how to store their annotations in a corresponding XSD structure in the implementation of the Message Format extension point. For example combining upcoming SWIFT standards and global annotations from the Process Workbench, an XSD representation of a data structure definition would look like:
<xs:annotation>
<xs:appinfo>
<info:FinFormat value="16c"/>
</xs:appinfo>
</xs:annotation>
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:infinity="http://www.carnot.ag/xpdl/3.1">
<xsd:element name="customer" type="Customer">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="someString" type="xsd:string" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<!--Stardust global annotations-->
<infinity:storage>
<infinity:indexed>false</infinity:indexed>
<infinity:persistent>false</infinity:persistent>
</infinity:storage>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Indexed fields store a separate copy of data that is used by the query API to perform filtering/sorting/grouping based on these fields. If the structure type element is marked as non-index (Index=False), then the data value row in database table does not get added.
The persistent property allows you to select which fields you want to store and which not. If Persistence is True then the data value persist in process instance event if it is not indexed in database. If False, data value does not persist with data.
Annotations and categories can be dynamically added to the modeling environment with an Eclipse extension point, which: