Syntax
YAML workflow files contain four parts, ensuring optimal configuration of all required settings.
name: <string> # optional, defaults to "Unnamed Workflow"
logging: <object|string> # optional
service: <object> # optional
containers: [ ... ] # optional list of container definitions
pipeline: [ ... ] # ordered list of pipeline steps
logging
Per default, logging is be enabled at the INFO level and log_to_file as false, no logs are written to files as default.
Logging accepts a logging level, a log_to_file option and a file_path used as logging path.
logging:
level: DEBUG # default "INFO"
log_to_file: true # default false
file_path: logs/delorean.log
service
Per default service is configured with worker_threads : 4, io_threads: 4 and 200 batch_size.
worker_threads opnes as many threads and sess
worker_threads
The worker_threads setting dictates how many concurrent Hibernate sessions process incoming inserts/reads/updates concurrently.
- Set this to a maximum of 2× the physical CPU core count on the host machine to prevent context-switching overhead.
- Higher thread counts increase connection pool usage and database lock contention, spiking end-to-end insertion latency instead of improving throughput.
io_threads
The io_threads setting determines the number of concurrent, non-blocking database sessions that execute geometry rendering on unlogged staging tables through inserts.
- Set this to a maximum of 1x the physical CPU core count allocated to the database hosting machine to prevent context-switching overhead.
- Databases that require their displayed geometry to be re-rendered should first be over-provisioned, with only a portion of their CPU being allocated to geometry rendering. A database hosted on a single CPU will be unavailable during the rendering process.
batch_size
The batch_size setting controls how many entities are held in the Hibernate Session state and flushed via JDBC batch statements before resetting session memory.
- Hibernate must hold all managed entity instances in the First-Level Cache (Session memory). For complex AIXM top-level features with deep, geometry-heavy child object graphs, setting batch_size too high causes memory pressure, excessive Garbage Collection pauses, or
OutOfMemoryErrorprior to the final commit.
service:
worker_threads: 8 # default 4
io_threads: 4 # default 4
batch_size: 500 # default 200
containers
A container comprises a name, a database connection, and an AIXM message. Multiple containers can be opened simultaneously to handle different or split datasets in different ways. A database-less container can be created that only operates with AIXM message file in memory.
containers:
- container: main # container name
database:
url: jdbc:postgresql://localhost:5432/aixm # database connection string jdbc:postgresql://<host>:<port>/<database name>
username: delorean # database user
password: secret # database password
hbm2ddl: update # Hibernate schema generation strategy (none, create)
pipeline
An ordered array of steps. Every step needs an action, certain action require a target, some additional parameters are also required.
pipeline:
- action: startup # action name
target: main # target container
- action: unmarshal # action name
target: main # target container
path: data/input.xml # additomal attribut path
- action: persist
target: main
- action: shutdown
target: main
startup
Initializes the target container's runtime state (Hibernate session, connection pool, etc.) so it can accept unmarshal/persist/extract calls.
Parameters
| Key | Required | Description |
|---|---|---|
domain-check |
no | Boolean. If true, build postgresql domain in the database schema as part of startup. Defaults to false. |
- action: startup
target: main
domain-check: true
shutdown
Gracefully releases the target container's database connections and runtime resources. No additional parameters.
- action: shutdown
target: main
unmarshal
Loads an AIXM XML file from disk and loads it into the target container's in-memory model, accepts .xml and .zip extension (as long as it is zipped xml file).
Parameters
| Key | Required | Description |
|---|---|---|
path |
yes | Path to the source AIXM XML file. |
description |
no | Free-text label recorded against this unmarshal operation. |
- action: unmarshal
target: main
path: data/input.xml
description: Initial AIP snapshot
marshal
Serializes the target container's current in-memory model back out to an AIXM XML file, accepts .xml and .zip extension and will automatically zip the serialized AIXM message.
Parameters
| Key | Required | Description |
|---|---|---|
path |
yes | Destination path for the output XML file. |
- action: marshal
target: main
path: out/result.xml
sax_inspection
Runs a SAX-based structural pass over the target container's loaded AIXM message and reports parsing-level issues. No additional parameters.
- action: sax_inspection
target: main
temporality_inspection
Inspects the target container's AIXM message time-slice structure for temporal consistency issues (overlaps, gaps, ordering). No additional parameters.
- action: temporality_inspection
target: main
inspect_persisted_message
Using the container database connection, inspects already persisted AIXM message. No additional parameters.
- action: inspect_persisted_message
target: main
summary_inspection
Produces a summary inspection report (feature counts, type breakdown) for the target container AIXM message. No additional parameters.
- action: summary_inspection
target: main
persist
Writes the target container's AIXM message into the database. No additional parameters.
- action: persist
target: main
merge
Merges the target container's AIXM message into an persisted AIXM message using the target container database connections, matched by a field/value pair (e.g. merging by hjid).
This will add new timeslices to existing features, ignore old or duplicate timeslices, and add new features that have not yet been persisted in the existing message.
Parameters
| Key | Required | Description |
|---|---|---|
field |
yes | Field name to match on (e.g. hjid). |
value |
yes | Value to match against. Integers are parsed as int, otherwise treated as text. |
- action: merge
target: main
field: hjid
value: 10432
diff
Computes a diff for the target container's AIXM message and unmarshalling the output to a AIXM file at path. This turn a BASELINE AIXM message containing all the features and timeslices into a PERMDELTA AIXM message by keeping only the changed features. The time range is assumed to have been defined previously, either by a predicate or a timeslice action.
Parameters
| Key | Required | Description |
|---|---|---|
path |
yes | Path to the AIXM XML file to diff against. |
- action: diff
target: main
path: data/previous.xml
extract
Extracts AIXM message from the target container matching a field/value pair, staging them for a subsequent marshal.
Parameters
| Key | Required | Description |
|---|---|---|
field |
yes | Field name to match on. |
value |
yes | Value to match against. Integers are parsed as int, otherwise treated as text. |
- action: extract
target: main
field: hjid
value: 10432
predicate
Extracts AIXM message from the target container that are active past a given timestamp, filtered further by a field/value pair.
Parameters
| Key | Required | Description |
|---|---|---|
time |
yes | ISO-8601 timestamp (e.g. 2026-09-01T12:00:00Z) defining the active time slice. |
field |
yes | Field name to match on. |
value |
yes | Value to match against. Integers are parsed as int, otherwise treated as text. |
- action: predicate
target: main
time: "2026-09-01T12:00:00Z"
field: hjid
value: 10432
integrate
Integrates an external PERMDELTA AIXM message file into the target container's AIXM message. Merges a PERMDELTA AIXM message into a existing Baseline that converting partial timelice into full timelices. Can then be merged into the persisted AIXM messaege.
Parameters
| Key | Required | Description |
|---|---|---|
path |
yes | Path to the AIXM XML file to integrate. |
- action: integrate
target: main
path: data/patch.xml
render
Triggers rendering of geometry and materialized views for the target container. No additional parameters.
- action: render
target: main
set_status
Sets a status flag on the target container.
Parameters
| Key | Required | Description |
|---|---|---|
status |
yes | Status value to apply. |
- action: set_status
target: main
status: ACTIVE
filter
set_context
Set a new registerd context as global context that converts gml:ID into UUID. This process allows multiple AIXM messages to coexist in the same database, mapping the same gml:ID to the same UUID using the same context.
Parameters
| Key | Required | Description |
|---|---|---|
description |
yes | Description to set as the active context. |
- action: set_context
description: EAD cycle 2026-09
register_context
Set a existing registerd context as global context that converts gml:ID into UUID. This process allows multiple AIXM messages to coexist in the same database, mapping the same gml:ID to the same UUID using the same context.
Parameters
| Key | Required | Description |
|---|---|---|
salt |
yes | Unique key/identifier for the context. |
description |
yes | Description associated with the context. |
- action: register_context
salt: cycle-2026-09
description: EAD cycle 2026-09
clear_contexts
Clears all registered contexts from the processor. No additional parameters, no target.
- action: clear_contexts
un_set_active_context
Unsets the currently active context on the processor, without clearing the registered contexts. No additional parameters, no target.
- action: un_set_active_context
filter
Applies a filter to the target container's feature or time-slice model, narrowing what subsequent actions operate on.
Parameters
| Key | Required | Description |
|---|---|---|
type |
yes | One of feature_indentifier, feature_type, timeslice_valid_time. |
nullHandling |
yes | How to treat missing/null data during evaluation (consumed by the base filter specification). |
evaluationType |
yes | Evaluation mode for the filter (consumed by the base filter specification). |
Filter types
type value |
Specification class | Applies to |
|---|---|---|
feature_indentifier |
FeatureIdentifierSpecification |
Feature filter |
feature_type |
FeatureTypeSpecification |
Feature filter |
timeslice_valid_time |
TimeSliceValidTimeSpecification |
Time-slice filter |
feature_indentifier
Matches features whose gml:identifier value is in a given list (case-insensitive).
| Key | Required | Description |
|---|---|---|
identifiers |
yes | Array of feature identifier strings to match against. |
- action: filter
target: main
type: feature_indentifier
nullHandling: EXCLUDE
evaluationType: INCLUDE
identifiers:
- EG-RWY-0001
- EG-RWY-0002
feature_type
Matches features by Java class simple name is in a given list types.
| Key | Required | Description |
|---|---|---|
types |
yes | Array of feature type names (matched against feature.getClass().getSimpleName(), lowercased). |
- action: filter
target: main
type: feature_type
nullHandling: EXCLUDE
evaluationType: INCLUDE
types:
- RunwayElement
timeslice_valid_time
Matches time slices whose valid-time begin/end fall before, after, or at given instants. All fields are optional individually, but at least one is needed for the filter to do anything.
| Key | Required | Description |
|---|---|---|
beforeBegin |
no | ISO-8601 instant — valid-time begin must be strictly before this. |
afterBegin |
no | ISO-8601 instant — valid-time begin must be strictly after this. |
atBegin |
no | ISO-8601 instant — valid-time begin must equal this. |
beforeEnd |
no | ISO-8601 instant — valid-time end must be strictly before this. |
afterEnd |
no | ISO-8601 instant — valid-time end must be strictly after this. |
atEnd |
no | ISO-8601 instant — valid-time end must equal this. |
- action: filter
target: main
type: timeslice_valid_time
nullHandling: EXCLUDE
evaluationType: INCLUDE
afterBegin: "2026-01-01T00:00:00Z"
beforeEnd: "2026-12-31T23:59:59Z"
prune
Prunes data from one container into another, using the same filter-specification types and JSON shape as filter (see above) to select what gets pruned. Uses from/to instead of target.
Parameters
| Key | Required | Description |
|---|---|---|
from |
yes | Name of the source container. |
to |
yes | Name of the destination container. |
type |
yes | One of feature_indentifier, feature_type, timeslice_valid_time — same filter types as filter. |
| (additional) | depends | Same per-type keys as filter (see above). |
- action: prune
from: staging
to: main
type: timeslice_valid_time
nullHandling: EXCLUDE
evaluationType: INCLUDE
afterBegin: "2026-01-01T00:00:00Z"
clone
Clones one container's state into another. Uses from/to instead of target.
Parameters
| Key | Required | Description |
|---|---|---|
from |
yes | Name of the container to clone into. |
to |
yes | Name of the container being cloned. |
- action: clone
from: backup
to: main