Model

Petri Net 

XSD schema

<xs:element name="document">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id" minOccurs="0"/>
            <xs:element ref="version" minOccurs="0"/>
            <xs:element ref="initials" minOccurs="0"/>
            <xs:element name="title" minOccurs="0" type="i18nStringType"/>
            <xs:element ref="icon" minOccurs="0"/>
            <xs:element ref="defaultRole" minOccurs="0"/>
            <xs:element ref="transitionRole" minOccurs="0"/>
            <xs:element ref="caseName" minOccurs="0"/>
            <xs:element ref="transaction" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="role" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="data" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="mapping" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="i18n" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="transition" maxOccurs="unbounded"/>
            <xs:element ref="place" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="arc" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Net document

<document
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="petriflow_schema.xsd">
	<id>1</id>
	<defaultRole>true</defaultRole>
	<caseName>New quote</caseName>
	<transaction>...</transaction>
		...
	<role>...</role>
		...
	<data>...</data>
		...
	<mapping>...</mapping>
		...
	<i18n>...</i18n>
		...
	<transition>...</transition>
		...
	<place>...</place>
		...
	<arc>...</arc>
		...
</document>

Object

PetriNet
	- ObjectId _id
	- String importId
    - String identifier
    - I18nString title
    - I18nString defaultCaseName
    - String initials
    - String icon
    - LocalDateTime creationDate
    - String version
    - Author author
    - Map<String, Place> places
    - Map<String, Transition> transitions
    - Map<String, List<Arc>> arcs
    - Map<String, Field> dataSet
    - Map<String, ProcessRole> roles
    - Map<String, Transaction> transactions
    - boolean initialized
    - String importXmlPath

Transition 

XSD schema

<xs:element name="transition">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:element ref="x"/>
            <xs:element ref="y"/>
            <xs:element ref="label"/>
            <xs:element ref="icon" minOccurs="0"/>
            <xs:element ref="priority" minOccurs="0"/>
            <xs:element ref="assignPolicy" minOccurs="0"/>
            <xs:element ref="dataFocusPolicy" minOccurs="0"/>
            <xs:element ref="finishPolicy" minOccurs="0"/>
            <xs:element ref="trigger" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="transactionRef" minOccurs="0"/>
            <xs:element ref="roleRef" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="dataRef" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="dataGroup" maxOccurs="unbounded" minOccurs="0"/>
            <xs:element ref="event" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Object

Transition
	- ObjectId _id
	- String importId
	- Position position
	- I18nString title;
    - Map<String, DataGroup> dataGroups
    - LinkedHashMap<String, DataFieldLogic> dataSet
    - Map<String, Set<RolePermission>> roles
    - List<Trigger> triggers
    - Integer priority
    - AssignPolicy assignPolicy
    - String icon
    - DataFocusPolicy dataFocusPolicy
    - FinishPolicy finishPolicy
    - Map<EventType, Event> events
    - String defaultRoleId

Place

XSD schema

<xs:element name="place">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:element ref="x"/>
            <xs:element ref="y"/>
            <xs:element ref="label"/>
            <xs:element ref="tokens"/>
            <xs:choice>
                <xs:element ref="isStatic"/>
                <xs:element ref="static"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Arc

XSD schema

<xs:element name="arc">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:element name="type" type="arc_type" default="regular"/>
            <xs:element ref="sourceId"/>
            <xs:element ref="destinationId"/>
            <xs:element ref="multiplicity"/>
            <xs:element ref="breakPoint" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Element type is restricted to values:

Regular arc

XSD schema

<arc>
    <id>1</id>
    <type>regular</type>
    <sourceId>2</sourceId>
    <destinationId>3</destinationId>
    <multiplicity>1</multiplicity>
</arc>

Reset arc

XSD schema

<arc>
    <id>1</id>
    <type>reset</type>
    <sourceId>2</sourceId>
    <destinationId>3</destinationId>
    <multiplicity>1</multiplicity>
</arc>

Inhibitor arc

XSD schema

<arc>
    <id>1</id>
    <type>inhibitor</type>
    <sourceId>2</sourceId>
    <destinationId>3</destinationId>
    <multiplicity>1</multiplicity>
</arc>

Read arc

XSD schema

<arc>
    <id>1</id>
    <type>read</type>
    <sourceId>2</sourceId>
    <destinationId>3</destinationId>
    <multiplicity>1</multiplicity>
</arc>

Variable arc

Variable arcs have the same behaviour as regular arcs except the multiplicity is read from a number data field. Data field is identified by multiplicity tag which contains fields id.

Variable arc

<data type="number">
    <id>500001</id>
    <title>vararc_byt_true</title>
    <init>0.0</init>
</data>
...
<arc>
    <id>3270</id>
    <type>variable</type>
    <sourceId>414</sourceId>
    <destinationId>2284</destinationId>
    <multiplicity>500001</multiplicity>
</arc>

Transaction

XSD schema

<xs:element name="transaction">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:element ref="title"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Roles

XSD schema

<xs:element name="role">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:choice>
                <xs:element ref="title"/>
                <xs:element ref="name"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Data fields 

XSD schema

<xs:element name="data">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="id"/>
            <xs:element ref="title"/>
            <xs:element ref="placeholder" minOccurs="0"/>
            <xs:element ref="desc" minOccurs="0"/>
            <xs:element ref="values" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="valid" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="init" minOccurs="0"/>
            <xs:element ref="encryption" minOccurs="0"/>
            <xs:element ref="action" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="actionRef" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="documentRef" minOccurs="0"/>
            <xs:element ref="remote" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute type="data_type" name="type" use="required"/>
        <xs:attribute type="xs:boolean" name="immediate"/>
    </xs:complexType>
</xs:element>

Object

Field
    - ObjectId _id
	- String importId
    - I18nString name
    - I18nString description
    - I18nString placeholder
    - ObjectNode behavior
    - T value
    - Long order
	- boolean immediate
	- String encryption

Instance

Case 

Object

Case
    - ObjectId _id
    - String visualId
    - PetriNet petriNet
    - String processIdentifier
    - Map<String, Integer> activePlaces
    - String title
    - String color
    - String icon
    - LocalDateTime creationDate
    - LinkedHashMap<String, DataField> dataSet
    - LinkedHashSet<String> immediateDataFields
    - List<Field> immediateData
    - Author author
    - Map<String, Integer> resetArcTokens
    - Set<TaskPair> tasks

Task 

Object

Task
    - ObjectId _id
    - String processId
    - String caseId
    - String transitionId
    - I18nString title
    - String caseColor
    - String caseTitle
    - Integer priority
    - Long userId
    - User user
    - List<Trigger> triggers
    - Map<String, Map<String, Boolean>> roles
    - LocalDateTime startDate
    - LocalDateTime finishDate
    - Long finishedBy
    - String transactionId
    - Boolean requiredFilled
    - LinkedHashSet<String> immediateDataFields
    - List<Field> immediateData
    - String icon
    - AssignPolicy assignPolicy
    - DataFocusPolicy dataFocusPolicy
    - FinishPolicy finishPolicy