Skip to content

Commit cf1c940

Browse files
authored
Merge pull request #136 from casework/BugFix-Issue-135
Issue 135: Rename and document function and internals to clarify InstantaneousEvent vs. Influence
2 parents 0d16edf + c99c90b commit cf1c940

2 files changed

Lines changed: 29 additions & 29 deletions

File tree

case_prov/__init__.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def interval_end_should_exist(
202202
return None
203203

204204

205-
def infer_prov_instantaneous_influence_event(
205+
def infer_prov_influence(
206206
in_graph: rdflib.Graph,
207207
n_prov_thing: rdflib.term.IdentifiedNode,
208208
n_predicate: rdflib.URIRef,
@@ -213,7 +213,9 @@ def infer_prov_instantaneous_influence_event(
213213
**kwargs: typing.Any,
214214
) -> typing.Tuple[rdflib.term.IdentifiedNode, TmpTriplesType]:
215215
"""
216-
PROV InstantaneousEvents that are also Influences need to be defined inhering in the two things related by the unqualified property.
216+
The PROV InstantaneousEvents that are also Influences need to be defined inhering in the two things related by the unqualified property.
217+
218+
This handles qualifying influences of a form "Given 'x u y', 'u' an unqualified influence property, qualify the influence as 'x q I , I p y'." E.g., 'x prov:wasGeneratedBy y' -> 'x prov:qualifiedGeneration G; G a prov:Generation; G prov:activity y .'" Other influences reverse direction or involve multiple links, and are handled with logic not in this function.
217219
218220
:returns: Returns a node N matching the pattern 'n_prov_thing n_predicate N', as well as a supplemental set of triples. If a node N is not found in the graph, a node is created and linked in the supplemental triples; hence the length of the supplemental triples being >0 can be used as an indicator that the node was created.
219221
"""
@@ -226,13 +228,13 @@ def infer_prov_instantaneous_influence_event(
226228
}[n_predicate]
227229

228230
ret_triples: TmpTriplesType = set()
229-
n_instantaneous_event: typing.Optional[rdflib.IdentifiedNode] = None
231+
n_influence: typing.Optional[rdflib.IdentifiedNode] = None
230232
for n_value in in_graph.objects(n_prov_thing, n_predicate):
231233
assert isinstance(n_value, rdflib.term.IdentifiedNode)
232-
n_instantaneous_event = n_value
234+
n_influence = n_value
233235
break
234-
if n_instantaneous_event is None:
235-
# Define event node.
236+
if n_influence is None:
237+
# Define influence node.
236238
if isinstance(n_prov_thing, rdflib.URIRef) and isinstance(
237239
n_prov_related_thing, rdflib.URIRef
238240
):
@@ -248,32 +250,30 @@ def infer_prov_instantaneous_influence_event(
248250
)
249251
else:
250252
node_uuid = local_uuid()
251-
n_instantaneous_event = rdf_namespace[slug + node_uuid]
253+
n_influence = rdf_namespace[slug + node_uuid]
252254
else:
253-
n_instantaneous_event = rdflib.BNode()
254-
# Link event node.
255-
ret_triples.add((n_prov_thing, n_predicate, n_instantaneous_event))
256-
# Type event node.
257-
n_instantaneous_event_type = {
255+
n_influence = rdflib.BNode()
256+
# Link influence node.
257+
ret_triples.add((n_prov_thing, n_predicate, n_influence))
258+
# Type influence node.
259+
n_influence_type = {
258260
NS_PROV.qualifiedCommunication: NS_PROV.Communication,
259261
NS_PROV.qualifiedDerivation: NS_PROV.Derivation,
260262
NS_PROV.qualifiedGeneration: NS_PROV.Generation,
261263
NS_PROV.qualifiedInvalidation: NS_PROV.Invalidation,
262264
NS_PROV.qualifiedUsage: NS_PROV.Usage,
263265
}[n_predicate]
264-
ret_triples.add(
265-
(n_instantaneous_event, NS_RDF.type, n_instantaneous_event_type)
266-
)
267-
# Port timestamp to event node.
268-
if n_instantaneous_event_type == NS_PROV.Generation:
266+
ret_triples.add((n_influence, NS_RDF.type, n_influence_type))
267+
# Port timestamp to influence node if also an instantaneous event node.
268+
if n_influence_type == NS_PROV.Generation:
269269
for l_object in in_graph.objects(n_prov_thing, NS_PROV.generatedAtTime):
270270
assert isinstance(l_object, rdflib.Literal)
271-
ret_triples.add((n_instantaneous_event, NS_PROV.atTime, l_object))
272-
elif n_instantaneous_event_type == NS_PROV.Invalidation:
271+
ret_triples.add((n_influence, NS_PROV.atTime, l_object))
272+
elif n_influence_type == NS_PROV.Invalidation:
273273
for l_object in in_graph.objects(n_prov_thing, NS_PROV.invalidatedAtTime):
274274
assert isinstance(l_object, rdflib.Literal)
275-
ret_triples.add((n_instantaneous_event, NS_PROV.atTime, l_object))
276-
# Link provenentially-tied node to event node.
275+
ret_triples.add((n_influence, NS_PROV.atTime, l_object))
276+
# Link provenentially-tied node to influence node.
277277
n_inherent_influence_predicate = {
278278
NS_PROV.qualifiedCommunication: NS_PROV.activity,
279279
NS_PROV.qualifiedDerivation: NS_PROV.entity,
@@ -283,12 +283,12 @@ def infer_prov_instantaneous_influence_event(
283283
}[n_predicate]
284284
ret_triples.add(
285285
(
286-
n_instantaneous_event,
286+
n_influence,
287287
n_inherent_influence_predicate,
288288
n_prov_related_thing,
289289
)
290290
)
291-
return (n_instantaneous_event, ret_triples)
291+
return (n_influence, ret_triples)
292292

293293

294294
def infer_interval_terminus(

case_prov/case_prov_rdf.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def main() -> None:
333333

334334
def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None:
335335
"""
336-
This subroutine is provided to supplement case_prov.infer_prov_instantaneous_influence_event usage.
336+
This subroutine is provided to supplement case_prov.infer_prov_influence usage.
337337
"""
338338
nonlocal tmp_triples
339339
for inference_triple in inference_triples:
@@ -360,7 +360,7 @@ def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None
360360
(
361361
n_communication,
362362
inference_triples,
363-
) = case_prov.infer_prov_instantaneous_influence_event(
363+
) = case_prov.infer_prov_influence(
364364
tmp_graph,
365365
n_informed_activity,
366366
NS_PROV.qualifiedCommunication,
@@ -385,7 +385,7 @@ def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None
385385
(
386386
n_derivation,
387387
inference_triples,
388-
) = case_prov.infer_prov_instantaneous_influence_event(
388+
) = case_prov.infer_prov_influence(
389389
tmp_graph,
390390
n_action_result,
391391
NS_PROV.qualifiedDerivation,
@@ -418,7 +418,7 @@ def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None
418418
(
419419
n_generation,
420420
inference_triples,
421-
) = case_prov.infer_prov_instantaneous_influence_event(
421+
) = case_prov.infer_prov_influence(
422422
tmp_graph,
423423
n_entity,
424424
NS_PROV.qualifiedGeneration,
@@ -443,7 +443,7 @@ def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None
443443
(
444444
n_invalidation,
445445
inference_triples,
446-
) = case_prov.infer_prov_instantaneous_influence_event(
446+
) = case_prov.infer_prov_influence(
447447
tmp_graph,
448448
n_entity,
449449
NS_PROV.qualifiedInvalidation,
@@ -468,7 +468,7 @@ def _pull_inference_triples(inference_triples: case_prov.TmpTriplesType) -> None
468468
(
469469
n_usage,
470470
inference_triples,
471-
) = case_prov.infer_prov_instantaneous_influence_event(
471+
) = case_prov.infer_prov_influence(
472472
tmp_graph,
473473
n_activity,
474474
NS_PROV.qualifiedUsage,

0 commit comments

Comments
 (0)