activity(ex:a,[prov:type="workflow execution"]) agent(ex:ag1,[prov:type="operator"]) agent(ex:ag2,[prov:type="designer"]) wasAssociatedWith(ex:a,ex:ag1,[prov:role="loggedInUser", ex:how="webapp"]) wasAssociatedWith(ex:a,ex:ag2,ex:wf,[prov:role="designer", ex:context="project1"]) entity(ex:wf,[prov:type="prov:Plan"%% xsd:QName, ex:label="Workflow 1", ex:url="http://example.org/workflow1.bpel" %% xsd:anyURI])Since the workflow ex:wf is itself an entity, its provenance can also be expressed in PROV-DM: it can be generated by some activity and derived from other entities, for instance.
activity(ex:a,[prov:type="workflow execution"]) wasAssociatedWith(ex:a,-,ex:wf) entity(ex:wf,[prov:type="prov:Plan"%% xsd:QName, ex:label="Workflow 1", ex:url="http://example.org/workflow1.bpel" %% xsd:anyURI])In this case, it is assumed that an agent exists, but simply it has not been specified.
In associations, prov-dm assumes that an agent always exists, even if it has not been specified. This is formalized by the following inference.
Given an activity a and a plan pl, and a set of attribute-value pairs attrs, if wasAssociatedWith(a,-,pl, attrs) holds, then there exists an agent ag, such that wasAssociatedWith(a,ag,pl, attrs) also holds.