Skip to content

Examples

Direct CLI Mode

Persist a file into a fresh container

delorean-cli \
  -h localhost \
  -p 5432 \
  -d aixm \
  -U delorean \
  -a persist \
  -f data/aerodromes.xml

You'll be prompted interactively for the password.

Extract a AIXM message feature by hjid

delorean-cli \
  -h localhost -p 5432 -d aixm -U delorean -W \
  -a extract \
  -f out/extracted.xml \
  --id 4457231

This marshals the container to out/extracted.xml, then extracts the AIXM message whose hjid matches --id.

Merge an update file

delorean-cli \
  -h db.internal -p 5432 -d aixm_prod -U etl_svc -W \
  -a merge \
  -f data/delta.xml

YAML Mode

Minimal single-container round trip

name: single-container-roundtrip

containers:
  - container: main
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: create

pipeline:
  - action: startup
    target: main
  - action: unmarshal
    target: main
    path: data/input.xml
  - action: persist
    target: main
  - action: render
    target: main
delorean-cli -y single-container-roundtrip.yaml

Minimal single-container round trip with logging

name: single-container-roundtrip

logging:
  level: INFO
  log_to_file: true
  file_path: log/logs.txt

containers:
  - container: main
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: create

pipeline:
  - action: startup
    target: main
  - action: unmarshal
    target: main
    path: data/input.xml
  - action: persist
    target: main
  - action: render
    target: main

Minimal single-container round trip with system config

name: single-container-roundtrip

service:
  worker_threads: 16
  io_threads: 16
  batch_size: 200

containers:
  - container: main
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: create

pipeline:
  - action: startup
    target: main
  - action: unmarshal
    target: main
    path: data/input.xml
  - action: persist
    target: main
  - action: render
    target: main

Startup with domain check, then extract and marshal out

name: extract-workflow

containers:
  - container: main
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: none

pipeline:
  - action: startup
    target: main
    domain-check: true
  - action: extract
    target: main
    field: identifier
    value: a90c57de-c1bf-43a4-9d0d-f3503c4edee8
  - action: marshal
    target: main
    path: out/lfpg.xml

Time-sliced predicate lookup

name: predicate-workflow

containers:
  - container: main
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: none

pipeline:
  - action: startup
    target: main
  - action: predicate
    target: main
    time: "2026-01-01T00:00:00Z"   # must be a full ISO-8601 instant with offset
    field: designator
    value: RWY09L
  - action: marshal
    target: main
    path: out/lfpg.xml

time also accepts the macros MIN / MAX (case-insensitive) to pull the earliest/latest valid timeslice without pinning to a specific instant:

  - action: predicate
    target: main
    time: MAX
    field: designator
    value: RWY09L

Integrating a delta file onto a unmarshalled message

pipeline:
  - action: startup
    target: main
  - action: unmarshal
    target: main
    path: data/baseline.xml
  - action: integrate
    target: main
    path: data/delta.xml
  - action: persist
    target: main
  - action: render
    target: main

integrate unmarshals path as a standalone payload, then asks the engine to merge it temporally onto whatever is already loaded in the container.

Integrating a delta file onto a persisted message

pipeline:
  - action: startup
    target: main
  - action: extract
    target: main
    field: designator
    value: RWY09L
  - action: unmarshal
    target: main
    path: data/baseline.xml
  - action: integrate
    target: main
    path: data/delta.xml
  - action: merge
    target: main
    field: designator
    value: RWY09L
  - action: shutdown
    target: main

integrate unmarshals path as a standalone payload, then asks the engine to merge it temporally onto whatever is already loaded in the container.

Context management inside a pipeline

pipeline:
  - action: register_context
    salt: run-2026-09-01
    description: Nightly ETL batch
  - action: startup
    target: main
  - action: unmarshal
    target: main
    path: data/nightly.xml
  - action: persist
    target: main
  - action: render
    target: main
  - action: clear_contexts

Multiple containers processed independently in one run

name: multi-airport-load

containers:
  - container: lfpg
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: update
  - container: lfpo
    database:
      url: jdbc:postgresql://localhost:5432/aixm
      username: delorean
      password: secret
      hbm2ddl: update

pipeline:
  - action: startup
    target: lfpg
  - action: unmarshal
    target: lfpg
    path: data/lfpg.xml
  - action: persist
    target: lfpg
  - action: render
    target: lfpg

  - action: startup
    target: lfpo
  - action: unmarshal
    target: lfpo
    path: data/lfpo.xml
  - action: persist
    target: lfpo
  - action: render
    target: lfpo