pub struct OcelLog { /* private fields */ }Expand description
A complete object-centric event log: objects, events, E2O & O2O links, and object changes.
This is the OCEL canon as one value. OcelLog::validate checks structural
integrity (no dangling links, no duplicate ids, no empty types); it does not
mine anything.
Structure-only: an admitted OcelLog is a substrate for object-centric
discovery and conformance, which graduate to wasm4pm.
Implementations§
Source§impl OcelLog
impl OcelLog
Sourcepub fn new(
objects: impl IntoIterator<Item = OcelObject>,
events: impl IntoIterator<Item = OcelEvent>,
e2o: impl IntoIterator<Item = EventObjectLink>,
o2o: impl IntoIterator<Item = ObjectObjectLink>,
changes: impl IntoIterator<Item = ObjectChange>,
) -> Self
pub fn new( objects: impl IntoIterator<Item = OcelObject>, events: impl IntoIterator<Item = OcelEvent>, e2o: impl IntoIterator<Item = EventObjectLink>, o2o: impl IntoIterator<Item = ObjectObjectLink>, changes: impl IntoIterator<Item = ObjectChange>, ) -> Self
Construct an OCEL log from its five constituent tables.
use wasm4pm_compat::ocel::{OcelObject, OcelEvent, EventObjectLink, OcelLog};
let log = OcelLog::new(
[OcelObject::new("ord-1", "order")],
[OcelEvent::new("e1", "place_order")],
[EventObjectLink::new("e1", "ord-1")],
[],
[],
);
assert!(log.validate().is_ok());Sourcepub fn objects(&self) -> &[OcelObject]
pub fn objects(&self) -> &[OcelObject]
The declared objects.
Sourcepub fn event_object_links(&self) -> &[EventObjectLink]
pub fn event_object_links(&self) -> &[EventObjectLink]
The event-to-object (E2O) links.
Sourcepub fn object_object_links(&self) -> &[ObjectObjectLink]
pub fn object_object_links(&self) -> &[ObjectObjectLink]
The object-to-object (O2O) links.
Sourcepub fn object_changes(&self) -> &[ObjectChange]
pub fn object_changes(&self) -> &[ObjectChange]
The recorded object changes.
Sourcepub fn validate(&self) -> Result<(), OcelRefusal>
pub fn validate(&self) -> Result<(), OcelRefusal>
Structurally validate the OCEL log.
This is a structure check, not mining. It verifies, in order:
- there is at least one object (
OcelRefusal::MissingObject) and one event (OcelRefusal::MissingEvent); - object and event ids are each unique
(
OcelRefusal::DuplicateObjectId,OcelRefusal::DuplicateEventId); - every object names a non-empty type (
OcelRefusal::MissingObjectType); - at least one E2O link exists (
OcelRefusal::EmptyEventObjectLinks); - every E2O link references a declared event and object
(
OcelRefusal::DanglingEventObjectLink); - every O2O link references declared objects
(
OcelRefusal::DanglingObjectObjectLink); - every object change references a declared object and names an attribute
(
OcelRefusal::InvalidObjectChange).
use wasm4pm_compat::ocel::{OcelObject, OcelEvent, EventObjectLink, OcelLog, OcelRefusal};
// Dangling E2O link: references object "ghost" that was never declared.
let log = OcelLog::new(
[OcelObject::new("ord-1", "order")],
[OcelEvent::new("e1", "a")],
[EventObjectLink::new("e1", "ghost")],
[],
[],
);
assert_eq!(log.validate(), Err(OcelRefusal::DanglingEventObjectLink));Trait Implementations§
Source§impl<'a> IntoIterator for &'a OcelLog
impl<'a> IntoIterator for &'a OcelLog
Source§fn into_iter(self) -> Self::IntoIter
fn into_iter(self) -> Self::IntoIter
Iterate over the OcelEvents of this log.
The idiomatic OCEL iteration surface. Objects, E2O links, and O2O links
are accessible via OcelLog::objects, OcelLog::event_object_links,
and OcelLog::object_object_links respectively.
use wasm4pm_compat::ocel::{OcelLog, OcelObject, OcelEvent, EventObjectLink};
let log = OcelLog::new(
[OcelObject::new("o1", "order")],
[OcelEvent::new("e1", "place"), OcelEvent::new("e2", "ship")],
[EventObjectLink::new("e1", "o1"), EventObjectLink::new("e2", "o1")],
[],
[],
);
let activities: Vec<&str> = (&log).into_iter().map(|e| e.activity()).collect();
assert_eq!(activities, ["place", "ship"]);Source§impl IntoIterator for OcelLog
impl IntoIterator for OcelLog
Source§fn into_iter(self) -> Self::IntoIter
fn into_iter(self) -> Self::IntoIter
Consume the log and iterate over its OcelEvents by value.
use wasm4pm_compat::ocel::{OcelLog, OcelObject, OcelEvent, EventObjectLink};
let log = OcelLog::new(
[OcelObject::new("o1", "order")],
[OcelEvent::new("e1", "place")],
[EventObjectLink::new("e1", "o1")],
[],
[],
);
let v: Vec<OcelEvent> = log.into_iter().collect();
assert_eq!(v.len(), 1);