ocel-transform
Recipe-driven OCEL 2.0 log transformation: clean, rename, and filter event logs before mining — noise is best removed in the data, not worked around in the algorithms.
A recipe is a named, ordered list of steps; the output is a new, valid OCEL log (every step preserves referential integrity, and the result is re-validated). Each step reports what it changed — events and objects before and after — on stderr and as contract-v2 NDJSON progress on stdout, so ocel-studio can run recipes as data sources with a live progress bar.
Steps
| Step | Effect |
|---|---|
dropEventTypes / keepEventTypes |
drop/keep events by type; objects stay |
dropEventsWhere |
drop events matching a predicate: eventType, and/or attr with equals / matches (regex) / min / max — all set conditions must hold |
renameEventTypes |
rename activity types; several old names may merge into one |
timeWindow |
keep events in the half-open window [from, to) (RFC 3339 or YYYY-MM-DD; a date-only to includes that day) |
keepObjectTypes |
keep objects of these types; events no longer related to any kept object are dropped |
dropObjectsWithoutEvents |
drop objects no remaining event references |
mapObjectIds |
re-key objects through an { "aliases": { "old": "canonical" } } table — identity resolution as data; ids mapping to one canonical id merge, references follow |
Deterministic only: no step invents data. Semantic classification (e.g. ML-flagging low-value comments) belongs in annotation attributes written by other tools; recipes then filter on those attributes like any other.
The ocel family
| Layer | Repo | License |
|---|---|---|
| Core model, I/O, validation | ocel-rs (crates.io: ocel) |
MIT |
| ETL engine (StagingLog → OCEL) | ocel-etl | MIT |
| Backlog connector | ocel-etl-backlog | MIT |
| GitHub connector | ocel-etl-github | MIT |
| Log transformation (this repo) | ocel-transform | MIT |
| Analysis library | ocel-mine (crates.io: ocel-mine) |
MIT |
| Studio — UI + data sources | ocel-studio | ELv2 |
License
MIT