From 113e7404e8e2afe54d34cc14687768989cdbfc38 Mon Sep 17 00:00:00 2001 From: Alex Nelson Date: Tue, 30 May 2023 20:30:48 -0400 Subject: [PATCH 1/2] Re-flow case_prov_dot This patch revises `case_prov_dot` to make use of updates in code review practice and upstream typing support since the script was originally written. The original version of `case_prov_dot` relied on many conversions of RDFLib types to strings. This induced some reinvention of logical organization of concepts into IRI strings vs. quickly-instantiated and -discarded `rdflib.URIRef` objects. Some usage of `URIRef`s as strings was covered by `URIRef`s being implemented in RDFLib as subclasses of string. As work progressed on adding TIME concept support (see PR 54), it became unnecessarily burdensome to handle some work with managing untyped strings under specialized consideration, versus constructing sets of `rdflib.URIRef`s to designate nodes. Managing potential blank nodes also became a challenge with casts to strings. This patch revises the base work in `case_prov_dot` to be oriented on analyzing sets of `rdflib.term.IdentifiedNode`s (encompassing `URIRef`s and `BNode`s). A roadmap/codemap is also added in inline documentation to describe sections of code behavior. Revision of the code flow also settled some design issues that were previously unnecessarily isolating the various chains from one another, especially where some chains needed to be handled as a mutual union, and another needed to be handled as an intersection, when various subsets of the provenance graph are requested. So this patch also adds the various pairs of chains as demonstrations under the Urgent Evidence example. A follow-on patch will regenerate Make-managed files. References: * https://github.com/casework/CASE-Implementation-PROV-O/pull/54 Signed-off-by: Alex Nelson --- case_prov/case_prov_dot.py | 885 ++++++++++-------- .../illustrations/src/illustration.mk | 39 + .../examples/src/example.mk | 39 + .../examples/urgent_evidence/Makefile | 6 +- .../examples/urgent_evidence/README.md | 4 + 5 files changed, 594 insertions(+), 379 deletions(-) diff --git a/case_prov/case_prov_dot.py b/case_prov/case_prov_dot.py index 7977091..be6144a 100644 --- a/case_prov/case_prov_dot.py +++ b/case_prov/case_prov_dot.py @@ -29,7 +29,6 @@ import hashlib import logging import os -import pprint import textwrap import typing @@ -37,12 +36,11 @@ import prov.dot # type: ignore import pydot # type: ignore import rdflib.plugins.sparql -from case_utils.namespace import NS_CASE_INVESTIGATION, NS_UCO_CORE +from case_utils.namespace import NS_CASE_INVESTIGATION, NS_RDFS, NS_UCO_CORE _logger = logging.getLogger(os.path.basename(__file__)) NS_PROV = rdflib.PROV -NS_RDFS = rdflib.RDFS # This one isn't among the prov constants. PROV_COLLECTION = NS_PROV.Collection @@ -68,9 +66,9 @@ def clone_style(prov_constant: rdflib.URIRef) -> typing.Dict[str, str]: return retval -def iri_to_gv_node_id(iri: str) -> str: +def iri_to_gv_node_id(n_thing: rdflib.term.IdentifiedNode) -> str: hasher = hashlib.sha256() - hasher.update(iri.encode()) + hasher.update(str(n_thing).encode()) return "_" + hasher.hexdigest() @@ -99,21 +97,23 @@ def main() -> None: default=60, help="Number of characters to have before a line wrap in rdfs:label renders.", ) - subset_group = parser.add_argument_group() + subset_group = parser.add_argument_group( + description="Use of any of these flags will reduce the displayed nodes to those pertaining to the chain of Communication (Activities), Delegation (Agents), or Derivation (Entities). More than one of the flags can be used." + ) subset_group.add_argument( "--activity-informing", action="store_true", - help="Only display Activity nodes and wasInformedBy relationships.", + help="Display Activity nodes and wasInformedBy relationships.", ) subset_group.add_argument( "--agent-delegating", action="store_true", - help="Only display Agent nodes and actedOnBehalfOf relationships.", + help="Display Agent nodes and actedOnBehalfOf relationships.", ) subset_group.add_argument( "--entity-deriving", action="store_true", - help="Only display Entity nodes and wasDerivedBy relationships.", + help="Display Entity nodes and wasDerivedBy relationships.", ) parser.add_argument("out_dot") parser.add_argument("in_graph", nargs="+") @@ -135,142 +135,101 @@ def main() -> None: graph.add((NS_PROV.Person, NS_RDFS.subClassOf, NS_PROV.Agent)) graph.add((NS_PROV.SoftwareAgent, NS_RDFS.subClassOf, NS_PROV.Agent)) - # An include-list. - filter_iris: typing.Optional[typing.Set[str]] = None - if args.from_empty_set: - filter_iris = set() - filter_iris.add(str(NS_PROV.EmptyCollection)) - select_query_actions_text = """\ -SELECT ?nDerivingAction + # The rest of this script follows this flow: + # S1. Build the sets of PROV Things. + # S2. Build the ways in which PROV Things that will be displayed + # will be displayed [sic.]. + # S3. Build the sets of Things to display. This is done after + # building how-to-display details in S2 in order to reuse query + # results from S2. + # S4. Load the Things that will be displayed into a Pydot Graph. + + # S1. + # Define sets of instances of the "Starting Point" PROV classes, + # plus Collections. These aren't necessarily instances that will + # display in the Dot render; they are instead use for analytic + # purposes to determine how to display things. Thus, they should be + # constructed maximally according to the input graph. + + n_activities: typing.Set[rdflib.term.IdentifiedNode] = set() + n_agents: typing.Set[rdflib.term.IdentifiedNode] = set() + n_collections: typing.Set[rdflib.term.IdentifiedNode] = {NS_PROV.EmptyCollection} + n_entities: typing.Set[rdflib.term.IdentifiedNode] = {NS_PROV.EmptyCollection} + # Defined later as a set-union. + n_prov_basis_things: typing.Set[rdflib.term.IdentifiedNode] + + # Populate Activities. + select_query_text = """\ +SELECT ?nActivity WHERE { - # Identify action at end of path. - ?nDerivingAction - prov:used prov:EmptyCollection ; - . + ?nActivity a/rdfs:subClassOf* prov:Activity . } """ - select_query_agents_text = """\ -SELECT ?nAgent -WHERE { - # Identify action at end of path. - ?nDerivingAction - prov:used prov:EmptyCollection ; - . - - # Get each agent involved in the chain. - ?nDerivingAction prov:wasAssociatedWith ?nAssociatedAgent . - ?nAssociatedAgent prov:actedOnBehalfOf* ?nAgent . + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + for result in graph.query(select_query_object): + assert isinstance(result, rdflib.query.ResultRow) + assert isinstance(result[0], rdflib.term.IdentifiedNode) + n_activity = result[0] + n_activities.add(n_activity) + _logger.debug("len(n_activities) = %d.", len(n_activities)) -} -""" - select_query_entities_text = """\ -SELECT ?nEntity + # Populate Agents. + select_query_text = """\ +SELECT ?nAgent WHERE { - # Identify all entities in chain. - ?nEntity prov:wasDerivedFrom prov:EmptyCollection . + ?nAgent a/rdfs:subClassOf* prov:Agent . } """ - for select_query_label, select_query_text in [ - ("activities", select_query_actions_text), - ("agents", select_query_agents_text), - ("entities", select_query_entities_text), - ]: - _logger.debug("Running %s filtering query.", select_query_label) - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) - for record in graph.query(select_query_object): - assert isinstance(record, rdflib.query.ResultRow) - assert isinstance(record[0], rdflib.term.IdentifiedNode) - n_include = record[0] - filter_iri = n_include.toPython() - filter_iris.add(filter_iri) - _logger.debug("len(filter_iris) = %d.", len(filter_iris)) - elif args.entity_ancestry or args.query_ancestry: - filter_iris = set() - terminal_iris: typing.Set[str] = set() - if args.entity_ancestry: - filter_iris.add(args.entity_ancestry) - terminal_iris.add(args.entity_ancestry) - elif args.query_ancestry: - query_ancestry_text: typing.Optional[str] = None - with open(args.query_ancestry, "r") as in_fh: - query_ancestry_text = in_fh.read(2**22) # 4KiB - assert query_ancestry_text is not None - _logger.debug("query_ancestry_text = %r.", query_ancestry_text) - query_ancestry_object = rdflib.plugins.sparql.processor.prepareQuery( - query_ancestry_text, initNs=nsdict - ) - for result in graph.query(query_ancestry_object): - assert isinstance(result, rdflib.query.ResultRow) - for result_member in result: - if not isinstance(result_member, rdflib.URIRef): - raise ValueError( - "Query in file %r must return URIRefs." - % args.query_ancestry - ) - terminal_iris.add(str(result_member)) - _logger.debug("len(terminal_iris) = %d.", len(terminal_iris)) + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + for result in graph.query(select_query_object): + assert isinstance(result, rdflib.query.ResultRow) + assert isinstance(result[0], rdflib.term.IdentifiedNode) + n_agent = result[0] + n_agents.add(n_agent) + _logger.debug("len(n_agents) = %d.", len(n_agents)) - select_query_actions_text = """\ -SELECT ?nDerivingAction + # Populate Collections. + select_query_text = """\ +SELECT ?nCollection WHERE { - # Identify action at end of path. - ?nEndIRI - prov:wasGeneratedBy ?nEndAction ; - . - - # Identify all actions in chain. - ?nEndAction prov:wasInformedBy* ?nDerivingAction . + ?nCollection a/rdfs:subClassOf* prov:Collection . } """ - select_query_agents_text = """\ -SELECT ?nAgent -WHERE { - # Identify action at end of path. - ?nEndIRI - prov:wasGeneratedBy ?nEndAction ; - . - - # Identify all actions in chain. - ?nEndAction prov:wasInformedBy* ?nDerivingAction . - - # Get each agent involved in the chain. - ?nDerivingAction prov:wasAssociatedWith ?nAssociatedAgent . - ?nAssociatedAgent prov:actedOnBehalfOf* ?nAgent . + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + for record in graph.query(select_query_object): + assert isinstance(record, rdflib.query.ResultRow) + assert isinstance(record[0], rdflib.term.IdentifiedNode) + n_collection = record[0] + n_collections.add(n_collection) + _logger.debug("len(n_collections) = %d.", len(n_collections)) -} -""" - select_query_entities_text = """\ -SELECT ?nPrecedingEntity + # Populate Entities. + select_query_text = """\ +SELECT ?nEntity WHERE { - # Identify all objects in chain. - ?nEndIRI prov:wasDerivedFrom* ?nPrecedingEntity . + ?nEntity a/rdfs:subClassOf* prov:Entity . } """ - for select_query_label, select_query_text in [ - ("activities", select_query_actions_text), - ("agents", select_query_agents_text), - ("entities", select_query_entities_text), - ]: - _logger.debug("Running %s filtering query.", select_query_label) - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + for record in graph.query(select_query_object): + assert isinstance(record, rdflib.query.ResultRow) + assert isinstance(record[0], rdflib.term.IdentifiedNode) + n_entity = record[0] + n_entities.add(n_entity) + _logger.debug("len(n_entities) = %d.", len(n_entities)) - for terminal_iri in terminal_iris: - for record in graph.query( - select_query_object, - initBindings={"nEndIRI": rdflib.URIRef(terminal_iri)}, - ): - assert isinstance(record, rdflib.query.ResultRow) - assert isinstance(record[0], rdflib.term.IdentifiedNode) - n_include = record[0] - filter_iri = n_include.toPython() - filter_iris.add(filter_iri) - _logger.debug("len(filter_iris) = %d.", len(filter_iris)) - _logger.debug("filter_iris = %s.", pprint.pformat(filter_iris)) + n_prov_basis_things = n_activities | n_agents | n_entities + _logger.debug("len(n_prov_basis_things) = %d.", len(n_prov_basis_things)) + # S2. # Define dicts to hold 1-to-manies of various string Literals - # comments, labels, names, descriptions, and exhibit numbers. These # Literals will be rendered into the Dot label string. @@ -308,28 +267,50 @@ def main() -> None: assert isinstance(triple[2], rdflib.Literal) n_uco_object_to_l_uco_name[triple[0]].add(triple[2]) - # The nodes and edges dicts need to store information to construct, not constructed objects. There is a hidden dependency for edges of a parent graph object not available until after some filtering decisions are made. - # IRI -> (pydot.Node identifier, kwargs) - nodes = dict() - nodes_activities = dict() - nodes_agents = dict() - nodes_entities = dict() + # Stash display data for PROV Things. + + # SPARQL queries are used to find these PROV classes rather than the + # graph.triples() retrieval pattern, so the star operator can be + # used to find subclasses without superclasses being asserted (or + # having been inferred) in the input graph. - # IRI -> IRI -> short predicate -> (pydot.Edge identifier, kwargs) + # The nodes and edges dicts need to store information to construct, + # not constructed objects. There is a hidden dependency for edges + # of a parent graph object not available until after some filtering + # decisions are made. + + # IdentifiedNode -> pydot.Node's kwargs + n_thing_to_pydot_node_kwargs: typing.Dict[ + rdflib.term.IdentifiedNode, typing.Dict[str, typing.Any] + ] = dict() + + n_instant_to_tooltips: typing.DefaultDict[ + rdflib.term.IdentifiedNode, typing.Set[str] + ] = collections.defaultdict(set) + + # IdentifiedNode (edge beginning node) -> IdentifiedNode (edge ending node) -> short predicate -> pydot.Edge's kwargs EdgesType = typing.DefaultDict[ - str, - typing.DefaultDict[str, typing.Dict[str, typing.Dict[str, typing.Any]]], + rdflib.term.IdentifiedNode, + typing.DefaultDict[ + rdflib.term.IdentifiedNode, typing.Dict[str, typing.Dict[str, typing.Any]] + ], ] edges: EdgesType = collections.defaultdict(lambda: collections.defaultdict(dict)) - edges_deriving: EdgesType = collections.defaultdict( - lambda: collections.defaultdict(dict) - ) - edges_delegating: EdgesType = collections.defaultdict( - lambda: collections.defaultdict(dict) - ) - edges_informing: EdgesType = collections.defaultdict( - lambda: collections.defaultdict(dict) - ) + + include_activities: bool = False + include_agents: bool = False + include_entities: bool = False + if args.activity_informing or args.agent_delegating or args.entity_deriving: + if args.activity_informing: + include_activities = True + if args.agent_delegating: + include_agents = True + if args.entity_deriving: + include_entities = True + else: + include_activities = True + include_agents = True + include_entities = True wrapper = textwrap.TextWrapper( break_long_words=True, @@ -398,25 +379,12 @@ def _annotate_labels( label_parts.append(label_part) # Render Agents. - select_query_text = """\ -SELECT ?nAgent -WHERE { - ?nAgent a/rdfs:subClassOf* prov:Agent . -} -""" - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) - for result in graph.query(select_query_object): - assert isinstance(result, rdflib.query.ResultRow) - assert isinstance(result[0], rdflib.term.IdentifiedNode) - n_agent = result[0] - agent_iri = n_agent.toPython() - + for n_agent in n_agents: kwargs = clone_style(prov.constants.PROV_AGENT) + kwargs["tooltip"] = "ID - " + str(n_agent) # Build label. - dot_label_parts = ["ID - " + graph.namespace_manager.qname(agent_iri)] + dot_label_parts = ["ID - " + graph.namespace_manager.qname(n_agent)] _annotate_name(n_agent, dot_label_parts) _annotate_labels(n_agent, dot_label_parts) _annotate_descriptions(n_agent, dot_label_parts) @@ -424,59 +392,20 @@ def _annotate_labels( dot_label = "".join(dot_label_parts) kwargs["label"] = dot_label - # _logger.debug("Agent %r.", agent_iri) - nodes[agent_iri] = kwargs - nodes_agents[agent_iri] = kwargs - # _logger.debug("nodes = %s." % pprint.pformat(nodes)) - - # Find Collections, to adjust Entity rendering in the next block. - collection_iris: typing.Set[str] = {str(NS_PROV.EmptyCollection)} - select_query_text = """\ -SELECT ?nCollection -WHERE { - ?nCollection a prov:Collection . -} -""" - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) - for record in graph.query(select_query_object): - assert isinstance(record, rdflib.query.ResultRow) - assert isinstance(record[0], rdflib.term.IdentifiedNode) - n_collection = record[0] - collection_iri = n_collection.toPython() - collection_iris.add(collection_iri) - # _logger.debug("len(collection_iris) = %d.", len(collection_iris)) + # _logger.debug("Agent %r.", n_agent) + n_thing_to_pydot_node_kwargs[n_agent] = kwargs + # _logger.debug("n_thing_to_pydot_node_kwargs = %s." % pprint.pformat(n_thing_to_pydot_node_kwargs)) # Render Entities. - # This loop operates differently from the others, to insert prov:EmptyCollection. - n_entities: typing.Set[rdflib.term.IdentifiedNode] = set() - if not args.omit_empty_set: - n_entities.add(NS_PROV.EmptyCollection) - select_query_text = """\ -SELECT ?nEntity -WHERE { - ?nEntity a/rdfs:subClassOf* prov:Entity . -} -""" - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) - for record in graph.query(select_query_object): - assert isinstance(record, rdflib.query.ResultRow) - assert isinstance(record[0], rdflib.term.IdentifiedNode) - n_entity = record[0] - n_entities.add(n_entity) for n_entity in n_entities: - entity_iri = n_entity.toPython() - - if entity_iri in collection_iris: + if n_entity in n_collections: kwargs = clone_style(PROV_COLLECTION) else: kwargs = clone_style(prov.constants.PROV_ENTITY) + kwargs["tooltip"] = "ID - " + str(n_entity) # Build label. - dot_label_parts = ["ID - " + graph.namespace_manager.qname(entity_iri)] + dot_label_parts = ["ID - " + graph.namespace_manager.qname(n_entity)] if n_entity in n_provenance_record_to_l_exhibit_numbers: for l_exhibit_number in sorted( n_provenance_record_to_l_exhibit_numbers[n_entity] @@ -490,43 +419,48 @@ def _annotate_labels( dot_label = "".join(dot_label_parts) kwargs["label"] = dot_label - # _logger.debug("Entity %r.", entity_iri) - nodes[entity_iri] = kwargs - nodes_entities[entity_iri] = kwargs - - # Render Activities. - select_query_text = """\ -SELECT ?nActivity ?lStartTime ?lEndTime -WHERE { - ?nActivity a prov:Activity . - - OPTIONAL { - ?nActivity prov:startedAtTime ?lStartTime . - } - - OPTIONAL { - ?nActivity prov:endedAtTime ?lEndTime . - } -} -""" - select_query_object = rdflib.plugins.sparql.processor.prepareQuery( - select_query_text, initNs=nsdict - ) - for record in graph.query(select_query_object): - assert isinstance(record, rdflib.query.ResultRow) - assert isinstance(record[0], rdflib.term.IdentifiedNode) - assert record[1] is None or isinstance(record[1], rdflib.Literal) - assert record[2] is None or isinstance(record[2], rdflib.Literal) - n_activity = record[0] - activity_iri = n_activity.toPython() + # _logger.debug("Entity %r.", n_entity) + n_thing_to_pydot_node_kwargs[n_entity] = kwargs - l_start_time = record[1] - l_end_time = record[2] + # Add to tooltips of associated InstantaneousEvents. + for n_predicate, template in { + (NS_PROV.qualifiedGeneration, "Generation of %s"), + (NS_PROV.qualifiedInvalidation, "Invalidation of %s"), + }: + for n_instantaneous_event in graph.objects(n_entity, n_predicate): + assert isinstance(n_instantaneous_event, rdflib.term.IdentifiedNode) + n_instant_to_tooltips[n_instantaneous_event].add(template % n_entity) + # _logger.debug("n_thing_to_pydot_node_kwargs = %s." % pprint.pformat(n_thing_to_pydot_node_kwargs)) + # _logger.debug("n_instant_to_tooltips = %s." % pprint.pformat(n_instant_to_tooltips)) + # Render Activities. + for n_activity in n_activities: kwargs = clone_style(prov.constants.PROV_ACTIVITY) + kwargs["tooltip"] = "ID - " + str(n_activity) + + # Retrieve start and end times from either their unqualified + # forms or from the qualified Start/End objects. + l_start_time: typing.Optional[rdflib.Literal] = None + l_end_time: typing.Optional[rdflib.Literal] = None + for l_value in graph.objects(n_activity, NS_PROV.startedAtTime): + assert isinstance(l_value, rdflib.Literal) + l_start_time = l_value + if l_start_time is None: + for n_start in graph.objects(n_activity, NS_PROV.qualifiedStart): + for l_value in graph.objects(n_start, NS_PROV.atTime): + assert isinstance(l_value, rdflib.Literal) + l_start_time = l_value + for l_value in graph.objects(n_activity, NS_PROV.endedAtTime): + assert isinstance(l_value, rdflib.Literal) + l_end_time = l_value + if l_end_time is None: + for n_end in graph.objects(n_activity, NS_PROV.qualifiedEnd): + for l_value in graph.objects(n_end, NS_PROV.atTime): + assert isinstance(l_value, rdflib.Literal) + l_end_time = l_value # Build label. - dot_label_parts = ["ID - " + graph.namespace_manager.qname(activity_iri)] + dot_label_parts = ["ID - " + graph.namespace_manager.qname(n_activity)] if l_start_time is not None or l_end_time is not None: dot_label_parts.append("\n") section_parts = [] @@ -546,9 +480,27 @@ def _annotate_labels( dot_label = "".join(dot_label_parts) kwargs["label"] = dot_label - # _logger.debug("Activity %r.", activity_iri) - nodes[activity_iri] = kwargs - nodes_activities[activity_iri] = kwargs + # _logger.debug("Activity %r.", n_activity) + n_thing_to_pydot_node_kwargs[n_activity] = kwargs + + # Add to tooltips of associated InstantaneousEvents. + for n_predicate, template in { + (NS_PROV.qualifiedEnd, "End of %s"), + (NS_PROV.qualifiedStart, "Start of %s"), + }: + for n_instantaneous_event in graph.objects(n_activity, n_predicate): + assert isinstance(n_instantaneous_event, rdflib.term.IdentifiedNode) + n_instant_to_tooltips[n_instantaneous_event].add(template % n_activity) + for n_instantaneous_event in graph.objects(n_activity, NS_PROV.qualifiedUsage): + assert isinstance(n_instantaneous_event, rdflib.term.IdentifiedNode) + for n_object in graph.objects(n_instantaneous_event, NS_PROV.entity): + assert isinstance(n_object, rdflib.term.IdentifiedNode) + n_instant_to_tooltips[n_instantaneous_event].add( + "Usage of %s in %s" % (n_object, n_activity) + ) + + # _logger.debug("n_thing_to_pydot_node_kwargs = %s." % pprint.pformat(n_thing_to_pydot_node_kwargs)) + # _logger.debug("n_instant_to_tooltips = %s." % pprint.pformat(n_instant_to_tooltips)) def _render_edges( select_query_text: str, @@ -565,15 +517,13 @@ def _render_edges( assert isinstance(record[1], rdflib.term.IdentifiedNode) n_thing_1 = record[0] n_thing_2 = record[1] - - thing_1_iri = n_thing_1.toPython() - thing_2_iri = n_thing_2.toPython() - edges[thing_1_iri][thing_2_iri][short_edge_label] = kwargs + edges[n_thing_1][n_thing_2][short_edge_label] = kwargs if supplemental_dict is not None: - supplemental_dict[thing_1_iri][thing_2_iri][short_edge_label] = kwargs + supplemental_dict[n_thing_1][n_thing_2][short_edge_label] = kwargs - # Render actedOnBehalfOf. - select_query_text = """\ + if include_agents: + # Render actedOnBehalfOf. + select_query_text = """\ SELECT ?nAgent1 ?nAgent2 WHERE { ?nAgent1 @@ -581,13 +531,13 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_DELEGATION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "actedOnBehalfOf", kwargs, edges_delegating) - if args.dash_unqualified: - # Render actedOnBehalfOf, with stronger line from Delegation. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_DELEGATION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "actedOnBehalfOf", kwargs) + if args.dash_unqualified: + # Render actedOnBehalfOf, with stronger line from Delegation. + select_query_text = """\ SELECT ?nAgent1 ?nAgent2 WHERE { ?nAgent1 @@ -599,11 +549,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_DELEGATION) - _render_edges(select_query_text, "actedOnBehalfOf", kwargs, edges_delegating) + kwargs = clone_style(prov.constants.PROV_DELEGATION) + _render_edges(select_query_text, "actedOnBehalfOf", kwargs) - # Render hadMember. - select_query_text = """\ + if include_entities: + # Render hadMember. + select_query_text = """\ SELECT ?nCollection ?nEntity WHERE { ?nCollection @@ -611,11 +562,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_MEMBERSHIP) - _render_edges(select_query_text, "hadMember", kwargs) + kwargs = clone_style(prov.constants.PROV_MEMBERSHIP) + _render_edges(select_query_text, "hadMember", kwargs) - # Render used. - select_query_text = """\ + if include_activities and include_entities: + # Render used. + select_query_text = """\ SELECT ?nActivity ?nEntity WHERE { ?nActivity @@ -623,13 +575,13 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_USAGE) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "used", kwargs) - if args.dash_unqualified: - # Render used, with stronger line from Usage. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_USAGE) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "used", kwargs) + if args.dash_unqualified: + # Render used, with stronger line from Usage. + select_query_text = """\ SELECT ?nActivity ?nEntity WHERE { ?nActivity @@ -641,11 +593,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_USAGE) - _render_edges(select_query_text, "used", kwargs) + kwargs = clone_style(prov.constants.PROV_USAGE) + _render_edges(select_query_text, "used", kwargs) - # Render wasAssociatedWith. - select_query_text = """\ + if include_activities and include_agents: + # Render wasAssociatedWith. + select_query_text = """\ SELECT ?nActivity ?nAgent WHERE { ?nActivity @@ -653,13 +606,13 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_ASSOCIATION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "wasAssociatedWith", kwargs) - if args.dash_unqualified: - # Render wasAssociatedWith, with stronger line from Association. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_ASSOCIATION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "wasAssociatedWith", kwargs) + if args.dash_unqualified: + # Render wasAssociatedWith, with stronger line from Association. + select_query_text = """\ SELECT ?nActivity ?nAgent WHERE { ?nActivity @@ -671,11 +624,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_ASSOCIATION) - _render_edges(select_query_text, "wasAssociatedWith", kwargs) + kwargs = clone_style(prov.constants.PROV_ASSOCIATION) + _render_edges(select_query_text, "wasAssociatedWith", kwargs) - # Render wasAttributedTo. - select_query_text = """\ + if include_agents and include_entities: + # Render wasAttributedTo. + select_query_text = """\ SELECT ?nEntity ?nAgent WHERE { ?nEntity @@ -683,14 +637,13 @@ def _render_edges( . } """ - kwargs = {"color": "pink", "label": "wasAttributedTo"} - kwargs = clone_style(prov.constants.PROV_ATTRIBUTION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "wasAttributedTo", kwargs) - if args.dash_unqualified: - # Render wasAttributedTo, with stronger line from Attribution. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_ATTRIBUTION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "wasAttributedTo", kwargs) + if args.dash_unqualified: + # Render wasAttributedTo, with stronger line from Attribution. + select_query_text = """\ SELECT ?nEntity ?nAgent WHERE { ?nEntity @@ -702,11 +655,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_ATTRIBUTION) - _render_edges(select_query_text, "wasAttributedTo", kwargs) + kwargs = clone_style(prov.constants.PROV_ATTRIBUTION) + _render_edges(select_query_text, "wasAttributedTo", kwargs) - # Render wasDerivedFrom. - select_query_text = """\ + if include_entities: + # Render wasDerivedFrom. + select_query_text = """\ SELECT ?nEntity1 ?nEntity2 WHERE { ?nEntity1 @@ -714,11 +668,10 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_DERIVATION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "wasDerivedFrom", kwargs, edges_deriving) - if args.dash_unqualified: + kwargs = clone_style(prov.constants.PROV_DERIVATION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "wasDerivedFrom", kwargs) # Render wasDerivedFrom, with stronger line from Derivation. # Note that though PROV-O allows using prov:hadUsage and # prov:hadGeneration on a prov:Derivation, those are not currently @@ -740,7 +693,8 @@ def _render_edges( # that might not be pertinent to one of the Usage or the Generation. # Hence, generating all qualification nodes at the same time could # generate fewer qualification nodes. - select_query_text = """\ + if args.dash_unqualified: + select_query_text = """\ SELECT ?nEntity1 ?nEntity2 WHERE { ?nEntity1 @@ -752,23 +706,24 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_DERIVATION) - _render_edges(select_query_text, "wasDerivedFrom", kwargs, edges_deriving) + kwargs = clone_style(prov.constants.PROV_DERIVATION) + _render_edges(select_query_text, "wasDerivedFrom", kwargs) - # Render wasGeneratedBy. - select_query_text = """\ + if include_activities and include_entities: + # Render wasGeneratedBy. + select_query_text = """\ SELECT ?nEntity ?nActivity WHERE { ?nEntity (prov:wasGeneratedBy|^prov:generated) ?nActivity . } """ - kwargs = clone_style(prov.constants.PROV_GENERATION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "wasGeneratedBy", kwargs) - if args.dash_unqualified: - # Render wasGeneratedBy, with stronger line from Generation. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_GENERATION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "wasGeneratedBy", kwargs) + if args.dash_unqualified: + # Render wasGeneratedBy, with stronger line from Generation. + select_query_text = """\ SELECT ?nEntity ?nActivity WHERE { ?nEntity @@ -780,11 +735,12 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_GENERATION) - _render_edges(select_query_text, "wasGeneratedBy", kwargs) + kwargs = clone_style(prov.constants.PROV_GENERATION) + _render_edges(select_query_text, "wasGeneratedBy", kwargs) - # Render wasInformedBy. - select_query_text = """\ + if include_activities: + # Render wasInformedBy. + select_query_text = """\ SELECT ?nActivity1 ?nActivity2 WHERE { ?nActivity1 @@ -792,13 +748,13 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_COMMUNICATION) - if args.dash_unqualified: - kwargs["style"] = "dashed" - _render_edges(select_query_text, "wasInformedBy", kwargs, edges_informing) - if args.dash_unqualified: - # Render wasInformedBy, with stronger line from Communication. - select_query_text = """\ + kwargs = clone_style(prov.constants.PROV_COMMUNICATION) + if args.dash_unqualified: + kwargs["style"] = "dashed" + _render_edges(select_query_text, "wasInformedBy", kwargs) + if args.dash_unqualified: + # Render wasInformedBy, with stronger line from Communication. + select_query_text = """\ SELECT ?nActivity1 ?nActivity2 WHERE { ?nActivity1 @@ -810,64 +766,237 @@ def _render_edges( . } """ - kwargs = clone_style(prov.constants.PROV_COMMUNICATION) - _render_edges(select_query_text, "wasInformedBy", kwargs, edges_informing) - - dot_graph = pydot.Dot("PROV-O render", graph_type="digraph", rankdir="BT") + kwargs = clone_style(prov.constants.PROV_COMMUNICATION) + _render_edges(select_query_text, "wasInformedBy", kwargs) - _logger.debug("len(nodes) = %d.", len(nodes)) + _logger.debug( + "len(n_thing_to_pydot_node_kwargs) = %d.", len(n_thing_to_pydot_node_kwargs) + ) _logger.debug("len(edges) = %d.", len(edges)) - _logger.debug("len(nodes_activities) = %d.", len(nodes_activities)) - _logger.debug("len(edges_informing) = %d.", len(edges_informing)) - _logger.debug("len(nodes_agents) = %d.", len(nodes_agents)) - _logger.debug("len(edges_delegating) = %d.", len(edges_delegating)) - _logger.debug("len(nodes_entities) = %d.", len(nodes_entities)) - _logger.debug("len(edges_deriving) = %d.", len(edges_deriving)) - - if args.activity_informing: - restricted_nodes = nodes_activities - restricted_edges = edges_informing - elif args.agent_delegating: - restricted_nodes = nodes_agents - restricted_edges = edges_delegating - elif args.entity_deriving: - restricted_nodes = nodes_entities - restricted_edges = edges_deriving + + # S3. + # Build the sets of Things to include in the display. + # Each of these sets will be built up, rather than started maximally + # and reduced down. + # If no filtering is requested, all PROV Things are included. + # If any filtering is requested, the set of Things to display is + # reduced from the universe of all PROV things. The PROV things are + # reduced by: + # - The union of the chains of communication, delegation, and + # derivation, referred to as "the chain of influence" in this + # script; + # - Intersected with the chain of all histories of the requested set + # of terminal Things, referred to as "the chain of ancestry" in + # this script. + n_prov_things_to_display: typing.Set[rdflib.term.IdentifiedNode] = set() + + reduce_by_prov_chain_of_ancestry: bool = False + if args.entity_ancestry or args.query_ancestry or args.from_empty_set: + reduce_by_prov_chain_of_ancestry = True + + reduce_by_prov_chain_of_influence: bool = False + if args.activity_informing or args.agent_delegating or args.entity_deriving: + reduce_by_prov_chain_of_influence = True + + n_prov_things_in_chain_of_ancestry: typing.Set[rdflib.term.IdentifiedNode] = set() + n_prov_things_in_chain_of_influence: typing.Set[rdflib.term.IdentifiedNode] = set() + + # Build chain of specific ancestry. + if args.from_empty_set: + n_prov_things_in_chain_of_ancestry.add(NS_PROV.EmptyCollection) + select_query_actions_text = """\ +SELECT ?nDerivingAction +WHERE { + # Identify action at end of path. + ?nDerivingAction + prov:used prov:EmptyCollection ; + . +} +""" + select_query_agents_text = """\ +SELECT ?nAgent +WHERE { + # Identify action at end of path. + ?nDerivingAction + prov:used prov:EmptyCollection ; + . + + # Get each agent involved in the chain. + ?nDerivingAction prov:wasAssociatedWith ?nAssociatedAgent . + ?nAssociatedAgent prov:actedOnBehalfOf* ?nAgent . + +} +""" + select_query_entities_text = """\ +SELECT ?nEntity +WHERE { + # Identify all entities in chain. + ?nEntity prov:wasDerivedFrom prov:EmptyCollection . +} +""" + for select_query_label, select_query_text in [ + ("activities", select_query_actions_text), + ("agents", select_query_agents_text), + ("entities", select_query_entities_text), + ]: + _logger.debug("Running %s filtering query.", select_query_label) + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + for record in graph.query(select_query_object): + assert isinstance(record, rdflib.query.ResultRow) + assert isinstance(record[0], rdflib.term.IdentifiedNode) + n_include = record[0] + n_prov_things_in_chain_of_ancestry.add(n_include) + _logger.debug( + "len(n_prov_things_in_chain_of_ancestry) = %d.", + len(n_prov_things_in_chain_of_ancestry), + ) + elif args.entity_ancestry or args.query_ancestry: + n_terminal_things: typing.Set[rdflib.term.IdentifiedNode] = set() + if args.entity_ancestry: + n_prov_things_in_chain_of_ancestry.add(rdflib.URIRef(args.entity_ancestry)) + n_terminal_things.add(rdflib.URIRef(args.entity_ancestry)) + elif args.query_ancestry: + query_ancestry_text: typing.Optional[str] = None + with open(args.query_ancestry, "r") as in_fh: + query_ancestry_text = in_fh.read(2**22) # 4KiB + assert query_ancestry_text is not None + _logger.debug("query_ancestry_text = %r.", query_ancestry_text) + query_ancestry_object = rdflib.plugins.sparql.processor.prepareQuery( + query_ancestry_text, initNs=nsdict + ) + for result in graph.query(query_ancestry_object): + assert isinstance(result, rdflib.query.ResultRow) + for result_member in result: + if not isinstance(result_member, rdflib.URIRef): + raise ValueError( + "Query in file %r must return URIRefs." + % args.query_ancestry + ) + n_terminal_things.add(result_member) + _logger.debug( + "len(n_prov_things_in_chain_of_ancestry) = %d.", + len(n_prov_things_in_chain_of_ancestry), + ) + _logger.debug("len(n_terminal_things) = %d.", len(n_terminal_things)) + + select_query_actions_text = """\ +SELECT ?nDerivingAction +WHERE { + # Identify action at end of path. + ?nTerminalThing + prov:wasGeneratedBy ?nEndAction ; + . + + # Identify all actions in chain. + ?nEndAction prov:wasInformedBy* ?nDerivingAction . +} +""" + select_query_agents_text = """\ +SELECT ?nAgent +WHERE { + # Identify action at end of path. + ?nTerminalThing + prov:wasGeneratedBy ?nEndAction ; + . + + # Identify all actions in chain. + ?nEndAction prov:wasInformedBy* ?nDerivingAction . + + # Get each agent involved in the chain. + ?nDerivingAction prov:wasAssociatedWith ?nAssociatedAgent . + ?nAssociatedAgent prov:actedOnBehalfOf* ?nAgent . + +} +""" + select_query_entities_text = """\ +SELECT ?nPrecedingEntity +WHERE { + # Identify all objects in chain. + ?nTerminalThing prov:wasDerivedFrom* ?nPrecedingEntity . +} +""" + for select_query_label, select_query_text in [ + ("activities", select_query_actions_text), + ("agents", select_query_agents_text), + ("entities", select_query_entities_text), + ]: + _logger.debug("Running %s filtering query.", select_query_label) + select_query_object = rdflib.plugins.sparql.processor.prepareQuery( + select_query_text, initNs=nsdict + ) + + for n_terminal_thing in n_terminal_things: + for record in graph.query( + select_query_object, + initBindings={"nTerminalThing": n_terminal_thing}, + ): + assert isinstance(record, rdflib.query.ResultRow) + assert isinstance(record[0], rdflib.term.IdentifiedNode) + n_include = record[0] + n_prov_things_in_chain_of_ancestry.add(n_include) + _logger.debug( + "len(n_prov_things_in_chain_of_ancestry) = %d.", + len(n_prov_things_in_chain_of_ancestry), + ) else: - restricted_nodes = nodes - restricted_edges = edges - - iris_used = set() - if filter_iris is None: - for iri in sorted(restricted_nodes): - iris_used.add(iri) - for iri_1 in sorted(restricted_edges.keys()): - for iri_2 in sorted(restricted_edges[iri_1].keys()): - iris_used.add(iri_1) - iris_used.add(iri_2) + # Ancestry reduction is a nop. + n_prov_things_in_chain_of_ancestry = {x for x in n_prov_basis_things} + + # Build chain of influence. + # Include Things that are in the PROV base class, but not chained, + # so they can be displayed as unchained. + # This code is brief thanks to relying on PROV edges defined above. + for n_thing_1 in edges: + n_prov_things_in_chain_of_influence.add(n_thing_1) + for n_thing_2 in edges[n_thing_1]: + n_prov_things_in_chain_of_influence.add(n_thing_2) + if include_activities: + n_prov_things_in_chain_of_influence |= n_activities + if include_agents: + n_prov_things_in_chain_of_influence |= n_agents + if include_entities: + n_prov_things_in_chain_of_influence |= n_entities + + if reduce_by_prov_chain_of_ancestry or reduce_by_prov_chain_of_influence: + n_prov_things_to_display = ( + n_prov_things_in_chain_of_ancestry & n_prov_things_in_chain_of_influence + ) else: - for iri_1 in sorted(restricted_edges.keys()): - for iri_2 in sorted(restricted_edges[iri_1].keys()): - if not (iri_1 in filter_iris and iri_2 in filter_iris): - continue - iris_used.add(iri_1) - iris_used.add(iri_2) - _logger.debug("len(iris_used) = %d.", len(iris_used)) - - for iri in sorted(iris_used): - node_id = iri_to_gv_node_id(iri) - kwargs = nodes[iri] - dot_node = pydot.Node(node_id, **kwargs) + n_prov_things_to_display = {x for x in n_prov_basis_things} + + if args.omit_empty_set: + n_prov_things_to_display -= {NS_PROV.EmptyCollection} + + _logger.debug("len(n_prov_things_to_display) = %d.", len(n_prov_things_to_display)) + # _logger.debug( + # "n_prov_things_to_display = %s.", pprint.pformat(n_prov_things_to_display) + # ) + + # S4. + # Load the Things that will be displayed into a Pydot Graph. + + dot_graph = pydot.Dot("PROV-O render", graph_type="digraph", rankdir="BT") + + # Build the PROV chain's Pydot Nodes and Edges. + for n_thing in sorted(n_prov_things_to_display): + kwargs = n_thing_to_pydot_node_kwargs[n_thing] + dot_node = pydot.Node(iri_to_gv_node_id(n_thing), **kwargs) dot_graph.add_node(dot_node) - for iri_1 in sorted(iris_used): - for iri_2 in sorted(edges[iri_1].keys()): - if iri_2 not in iris_used: + for n_thing_1 in sorted(edges.keys()): + if n_thing_1 not in n_prov_things_to_display: + continue + for n_thing_2 in sorted(edges[n_thing_1].keys()): + if n_thing_2 not in n_prov_things_to_display: continue - for short_edge_label in sorted(edges[iri_1][iri_2]): - # short_edge_label is intentionally not used aside from as a selector. Edge labelling is left to pydot. - node_id_1 = iri_to_gv_node_id(iri_1) - node_id_2 = iri_to_gv_node_id(iri_2) - kwargs = edges[iri_1][iri_2][short_edge_label] + for short_edge_label in sorted(edges[n_thing_1][n_thing_2]): + # short_edge_label is intentionally not used aside from + # as a selector. Edge labelling was already handled as + # the edge kwargs were being constructed. + node_id_1 = iri_to_gv_node_id(n_thing_1) + node_id_2 = iri_to_gv_node_id(n_thing_2) + kwargs = edges[n_thing_1][n_thing_2][short_edge_label] dot_edge = pydot.Edge(node_id_1, node_id_2, **kwargs) dot_graph.add_edge(dot_edge) diff --git a/tests/CASE-Examples/examples/illustrations/src/illustration.mk b/tests/CASE-Examples/examples/illustrations/src/illustration.mk index c950de8..693c78a 100644 --- a/tests/CASE-Examples/examples/illustrations/src/illustration.mk +++ b/tests/CASE-Examples/examples/illustrations/src/illustration.mk @@ -94,6 +94,32 @@ $(subjectdir_basename)-prov_activities.dot: \ $< mv _$@ $@ +$(subjectdir_basename)-prov_activities-agents.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --activity-informing \ + --agent-delegating \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + +$(subjectdir_basename)-prov_activities-entities.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --activity-informing \ + --entity-deriving \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + $(subjectdir_basename)-prov_agents.dot: \ $(subjectdir_basename)-prov.ttl \ $(top_srcdir)/case_prov/case_prov_dot.py @@ -106,6 +132,19 @@ $(subjectdir_basename)-prov_agents.dot: \ $< mv _$@ $@ +$(subjectdir_basename)-prov_agents-entities.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --agent-delegating \ + --entity-deriving \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + $(subjectdir_basename)-prov_all.dot: \ $(subjectdir_basename)-prov.ttl \ $(top_srcdir)/case_prov/case_prov_dot.py diff --git a/tests/casework.github.io/examples/src/example.mk b/tests/casework.github.io/examples/src/example.mk index ab751ce..d97cabf 100644 --- a/tests/casework.github.io/examples/src/example.mk +++ b/tests/casework.github.io/examples/src/example.mk @@ -94,6 +94,32 @@ $(subjectdir_basename)-prov-activities.dot: \ $< mv _$@ $@ +$(subjectdir_basename)-prov-activities-agents.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --activity-informing \ + --agent-delegating \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + +$(subjectdir_basename)-prov-activities-entities.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --activity-informing \ + --entity-deriving \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + $(subjectdir_basename)-prov-agents.dot: \ $(subjectdir_basename)-prov.ttl \ $(top_srcdir)/case_prov/case_prov_dot.py @@ -106,6 +132,19 @@ $(subjectdir_basename)-prov-agents.dot: \ $< mv _$@ $@ +$(subjectdir_basename)-prov-agents-entities.dot: \ + $(subjectdir_basename)-prov.ttl \ + $(top_srcdir)/case_prov/case_prov_dot.py + source $(tests_srcdir)/venv/bin/activate \ + && case_prov_dot \ + --agent-delegating \ + --entity-deriving \ + --dash-unqualified \ + --debug \ + _$@ \ + $< + mv _$@ $@ + $(subjectdir_basename)-prov-all.dot: \ $(subjectdir_basename)-prov.ttl \ $(top_srcdir)/case_prov/case_prov_dot.py diff --git a/tests/casework.github.io/examples/urgent_evidence/Makefile b/tests/casework.github.io/examples/urgent_evidence/Makefile index 89b2c57..6f0d93d 100644 --- a/tests/casework.github.io/examples/urgent_evidence/Makefile +++ b/tests/casework.github.io/examples/urgent_evidence/Makefile @@ -21,7 +21,11 @@ urgent_evidence_json := $(top_srcdir)/dependencies/CASE-Examples-QC/dependencies all: $(MAKE) \ - --file ../src/example.mk + --file ../src/example.mk \ + all \ + urgent_evidence-prov-activities-agents.svg \ + urgent_evidence-prov-activities-entities.svg \ + urgent_evidence-prov-agents-entities.svg $(MAKE) \ urgent_evidence-prov-activities-focus-extracted-file-uuid-1.svg \ urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg \ diff --git a/tests/casework.github.io/examples/urgent_evidence/README.md b/tests/casework.github.io/examples/urgent_evidence/README.md index f11e1b9..da101e6 100644 --- a/tests/casework.github.io/examples/urgent_evidence/README.md +++ b/tests/casework.github.io/examples/urgent_evidence/README.md @@ -7,5 +7,9 @@ The depictions are: * [Activities](urgent_evidence-prov-activities.svg) - All `prov:Activity`s and their `prov:wasInformedBy` relationships. * [Entities](urgent_evidence-prov-entities.svg) - All `prov:Entity`s (including `prov:Collection`s) and their `prov:wasDerivedFrom` (and `prov:hadMember`) relationships. * [Agents](urgent_evidence-prov-agents.svg) - All `prov:Agent`s and their `prov:actedOnBehalfOf` relationships. +* The Activities, Entities, and Agents diagrams can also have pairs enabled: + - [Activities and Agents](urgent_evidence-prov-activities-agents.svg) + - [Activities and Entities](urgent_evidence-prov-activities-entities.svg) + - [Agents and Entities](urgent_evidence-prov-agents-entities.svg) * [All produced JPEG files](urgent_evidence-prov-all-focus-jpegs.svg) - All files of MIME type `image/jpeg`, as selected by [this query](select-jpegs.sparql). * [Single extracted file](urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg) - The provenance chain from a single extracted file, a JPEG, back to initial evidence submission. From 8aa7b81dc43ca4626acd3f9359f08a8e2d7a9108 Mon Sep 17 00:00:00 2001 From: Alex Nelson Date: Tue, 30 May 2023 20:31:07 -0400 Subject: [PATCH 2/2] Regenerate Make-managed files Signed-off-by: Alex Nelson --- figures/readme-activities.svg | 9 + figures/readme-attribution.svg | 9 + figures/readme-provenance-records.svg | 6 + ...urgent_evidence-prov-activities-agents.svg | 415 ++++++ ...gent_evidence-prov-activities-entities.svg | 1301 +++++++++++++++++ .../urgent_evidence-prov-activities.svg | 39 + .../urgent_evidence-prov-agents-entities.svg | 961 ++++++++++++ .../urgent_evidence-prov-agents.svg | 15 + ...e-prov-all-focus-extracted-file-uuid-1.svg | 36 + .../urgent_evidence-prov-all-focus-jpegs.svg | 78 + .../urgent_evidence-prov-all.svg | 132 ++ .../urgent_evidence-prov-entities.svg | 78 + 12 files changed, 3079 insertions(+) create mode 100644 tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-agents.svg create mode 100644 tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-entities.svg create mode 100644 tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents-entities.svg diff --git a/figures/readme-activities.svg b/figures/readme-activities.svg index c4a2262..ad0c915 100644 --- a/figures/readme-activities.svg +++ b/figures/readme-activities.svg @@ -12,16 +12,22 @@ _dfa40afa8223607a4487772fe58783fb86ed8b6c03657ebaf7603a06c87ac4cd + ID - kb:activity1 [2020-01-02T03:04:05+00:00, ...) + + _1dc69e0ebb51673345ae966d7c1ed38f939e9f2a3eb4c3753722e4a4aab66fb1 + ID - kb:activity2 [2020-01-02T06:07:08+00:00, 2020-01-02T12:00:01+00:00] + + @@ -33,9 +39,12 @@ _526944cfe3743b492c3f7751131a98aa3eb5bc97b4085097a36a0eda13b85b9d + ID - kb:activity3 (..., 2020-01-02T21:00:02+00:00] + + diff --git a/figures/readme-attribution.svg b/figures/readme-attribution.svg index 391ebf6..8ab4276 100644 --- a/figures/readme-attribution.svg +++ b/figures/readme-attribution.svg @@ -12,14 +12,20 @@ _b3e54d5a1184906f1df8e89ec65665c571405b0d8a37d02c3a00fbd34397b3df + ID - kb:qualifiablyAttributedEntity + + _d35f749b2a59a4c852425d8a45c5c57b6daa5cf2eaa3376a61840d5af32e6a4a + ID - kb:someAgent + + @@ -31,8 +37,11 @@ _480bdfd1fe5b252217b8998900a58a6d302338c1e59158f5873f5cd0cafc676e + ID - kb:unqualifiablyAttributedEntity + + diff --git a/figures/readme-provenance-records.svg b/figures/readme-provenance-records.svg index 3f40afd..e04d157 100644 --- a/figures/readme-provenance-records.svg +++ b/figures/readme-provenance-records.svg @@ -12,14 +12,20 @@ _4ff8676506e04e724db6c9ed5b76dc39beeefd767b66036056fbce3593ded3dc + ID - kb:someCollection + + _75447935a41fb2b4562606fec9bace2054521fecb4e82258780e1adacf20741f + ID - kb:someEntity + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-agents.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-agents.svg new file mode 100644 index 0000000..9a74010 --- /dev/null +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-agents.svg @@ -0,0 +1,415 @@ + + + + + + +PROV-O render + + + +_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +ID - kb:action-uuid-1 +(..., 2019-01-01T14:00:00+00:00] +Exhibit submitted for Kiosk examination + + + + + +_ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + + +ID - kb:officer-uuid-1 + + + + + +_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721->_ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + + +wasAssociatedWith + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +ID - kb:action-uuid-10 +(..., 2019-01-01T15:05:00+00:00] +burned +Report DVD Generated as associated exhibit + + + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +ID - kb:action-uuid-7 +[2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] +processed +Exhibit Connected to Kiosk & process started; exhibit +disconnected at conclusion + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasInformedBy + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + + +ID - kb:action-uuid-9 +(..., 2019-01-01T15:03:00+00:00] +selected +Picture selected, via kiosk review screen, from those +extracted from exhibit + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + + +wasInformedBy + + + +_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +ID - kb:officer-uuid-3 + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490 + + +ID - kb:action-uuid-11 +(..., 2019-01-01T15:10:00+00:00] +DVD Report sealed + + + + + +_753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + + +ID - kb:action-uuid-12 +(..., 2019-01-01T15:15:00+00:00] +Witness statement completed + + + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17->_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +wasInformedBy + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9 + + +ID - kb:action-uuid-13 +(..., 2019-01-01T15:20:00+00:00] +transferred +Sealed Exhibit handed the OIC & Transfer documentation +signed + + + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +ID - kb:action-uuid-3 +(..., 2019-01-01T14:05:30+00:00] +assigned +Exhibit assigned to Kiosk technician + + + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + + +ID - kb:action-uuid-2 +(..., 2019-01-01T14:05:00+00:00] +transferred +Exhibit seal checks (passed) & Exhibit receipted in lab + + + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasInformedBy + + + +_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +ID - kb:officer-uuid-2 + + + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd->_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +wasAssociatedWith + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasInformedBy + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b->_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +wasAssociatedWith + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +ID - kb:action-uuid-4 +(..., 2019-01-01T14:15:00+00:00] +photographed +Sealed Exhibit Photographed + + + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +ID - kb:camera-uuid-1 + + + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAssociatedWith + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654 + + +ID - kb:action-uuid-5 +(..., 2019-01-01T14:20:00+00:00] +Exhibit Unsealed + + + + + +_3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +ID - kb:action-uuid-6 +(..., 2019-01-01T14:21:00+00:00] +photographed +Unsealed Exhibit Photographed + + + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAssociatedWith + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +ID - kb:kiosk-uuid-1 + + + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAssociatedWith + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e + + +ID - kb:action-uuid-8 +(..., 2019-01-01T15:00:00+00:00] +Exhibit Resealed + + + + + +_c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasInformedBy + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAssociatedWith + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAssociatedWith + + + +_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +actedOnBehalfOf + + + +_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +actedOnBehalfOf + + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-entities.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-entities.svg new file mode 100644 index 0000000..663866f --- /dev/null +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities-entities.svg @@ -0,0 +1,1301 @@ + + + + + + +PROV-O render + + + +_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +ID - kb:action-uuid-1 +(..., 2019-01-01T14:00:00+00:00] +Exhibit submitted for Kiosk examination + + + + + +_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +ID - prov:EmptyCollection + + + + + +_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +used + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +ID - kb:action-uuid-10 +(..., 2019-01-01T15:05:00+00:00] +burned +Report DVD Generated as associated exhibit + + + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +ID - kb:action-uuid-7 +[2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] +processed +Exhibit Connected to Kiosk & process started; exhibit +disconnected at conclusion + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasInformedBy + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + + +ID - kb:action-uuid-9 +(..., 2019-01-01T15:03:00+00:00] +selected +Picture selected, via kiosk review screen, from those +extracted from exhibit + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + + +wasInformedBy + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +ID - kb:extracted-file-uuid-1 + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +used + + + +_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +ID - kb:file2-uuid-1 + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +used + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +ID - kb:provenance-record-uuid-6 +Exhibit - EXH-20190101-7-KioskReport + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +used + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +ID - kb:provenance-record-uuid-6e +Exhibit - EXH-20190101-7-B + + + + + +_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf->_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +used + + + +_753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490 + + +ID - kb:action-uuid-11 +(..., 2019-01-01T15:10:00+00:00] +DVD Report sealed + + + + + +_753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +used + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + + +ID - kb:action-uuid-12 +(..., 2019-01-01T15:15:00+00:00] +Witness statement completed + + + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17->_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +wasInformedBy + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +ID - kb:dvd-uuid-1 + + + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +used + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +ID - kb:provenance-record-uuid-7 +Exhibit - EXH-20190101-7-KioskReportDVD + + + + + +_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17->_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +used + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9 + + +ID - kb:action-uuid-13 +(..., 2019-01-01T15:20:00+00:00] +transferred +Sealed Exhibit handed the OIC & Transfer documentation +signed + + + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +ID - kb:action-uuid-3 +(..., 2019-01-01T14:05:30+00:00] +assigned +Exhibit assigned to Kiosk technician + + + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +ID - kb:provenance-record-uuid-3 + + + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +used + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +ID - kb:subject-device-uuid-1 + + + + + +_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + + +ID - kb:action-uuid-2 +(..., 2019-01-01T14:05:00+00:00] +transferred +Exhibit seal checks (passed) & Exhibit receipted in lab + + + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasInformedBy + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +ID - kb:provenance-record-uuid-1 +Exhibit - EXH-20190101-7 + + + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +used + + + +_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasInformedBy + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +used + + + +_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +ID - kb:action-uuid-4 +(..., 2019-01-01T14:15:00+00:00] +photographed +Sealed Exhibit Photographed + + + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +used + + + +_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654 + + +ID - kb:action-uuid-5 +(..., 2019-01-01T14:20:00+00:00] +Exhibit Unsealed + + + + + +_3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +used + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +ID - kb:action-uuid-6 +(..., 2019-01-01T14:21:00+00:00] +photographed +Unsealed Exhibit Photographed + + + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +used + + + +_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasInformedBy + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +used + + + +_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +used + + + +_c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e + + +ID - kb:action-uuid-8 +(..., 2019-01-01T15:00:00+00:00] +Exhibit Resealed + + + + + +_c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +used + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasInformedBy + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +used + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +ID - kb:extracted-file-uuid-2 + + + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +used + + + +_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +used + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +wasGeneratedBy + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +wasDerivedFrom + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +wasDerivedFrom + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasGeneratedBy + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasGeneratedBy + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + + +ID - kb:extracted-file-uuid-3 + + + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasGeneratedBy + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + + +ID - kb:file-uuid-1 +Intake Form + + + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + + +wasGeneratedBy + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + + +ID - kb:file-uuid-2 +Kiosk report + + + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasGeneratedBy + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + + +ID - kb:file-uuid-3 +Witness statement + + + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + + +wasGeneratedBy + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +wasDerivedFrom + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +wasDerivedFrom + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7 + + +ID - kb:provenance-record-73f59a8a-1c22-41fe-af50-13e8b6a65de9 + + + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + + +wasGeneratedBy + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +wasDerivedFrom + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + + +hadMember + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +wasDerivedFrom + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasGeneratedBy + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +wasDerivedFrom + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143 + + +ID - kb:provenance-record-uuid-2 +Exhibit - EXH-20190101-7-IntakeForm + + + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + + +wasGeneratedBy + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + + +hadMember + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + + +wasGeneratedBy + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103 + + +ID - kb:provenance-record-uuid-4 +Exhibit - EXH-20190101-7-SealedPhotos + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +wasGeneratedBy + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + + +ID - kb:subject-device-photograph-uuid-1 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + + +hadMember + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + + +ID - kb:subject-device-photograph-uuid-2 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + + +hadMember + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + + +ID - kb:subject-device-photograph-uuid-3 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + + +hadMember + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58 + + +ID - kb:provenance-record-uuid-5 +Exhibit - EXH-20190101-7-UnsealedPhotos + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +wasGeneratedBy + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + + +ID - kb:subject-device-photograph-uuid-4 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + + +hadMember + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + + +ID - kb:subject-device-photograph-uuid-5 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + + +hadMember + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + + +ID - kb:subject-device-photograph-uuid-6 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + + +hadMember + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + + +wasGeneratedBy + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + + +wasGeneratedBy + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +hadMember + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + + +wasGeneratedBy + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +hadMember + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +wasDerivedFrom + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388 + + +ID - kb:provenance-record-uuid-8 +Exhibit - EXH-20190101-7 + + + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9 + + +wasGeneratedBy + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +wasGeneratedBy + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +wasGeneratedBy + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + + +wasGeneratedBy + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +wasGeneratedBy + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +wasGeneratedBy + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + + +wasGeneratedBy + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a->_f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + + +wasGeneratedBy + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +wasDerivedFrom + + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities.svg index 8092925..ea41ede 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-activities.svg @@ -12,29 +12,38 @@ _f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + ID - kb:action-uuid-1 (..., 2019-01-01T14:00:00+00:00] Exhibit submitted for Kiosk examination + + _ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + ID - kb:action-uuid-10 (..., 2019-01-01T15:05:00+00:00] burned Report DVD Generated as associated exhibit + + _728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + ID - kb:action-uuid-7 [2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] processed Exhibit Connected to Kiosk & process started; exhibit disconnected at conclusion + + @@ -46,12 +55,15 @@ _941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + ID - kb:action-uuid-9 (..., 2019-01-01T15:03:00+00:00] selected Picture selected, via kiosk review screen, from those extracted from exhibit + + @@ -63,18 +75,24 @@ _753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490 + ID - kb:action-uuid-11 (..., 2019-01-01T15:10:00+00:00] DVD Report sealed + + _b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + ID - kb:action-uuid-12 (..., 2019-01-01T15:15:00+00:00] Witness statement completed + + @@ -86,21 +104,27 @@ _0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9 + ID - kb:action-uuid-13 (..., 2019-01-01T15:20:00+00:00] transferred Sealed Exhibit handed the OIC & Transfer documentation signed + + _4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + ID - kb:action-uuid-3 (..., 2019-01-01T14:05:30+00:00] assigned Exhibit assigned to Kiosk technician + + @@ -112,11 +136,14 @@ _16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + ID - kb:action-uuid-2 (..., 2019-01-01T14:05:00+00:00] transferred Exhibit seal checks (passed) & Exhibit receipted in lab + + @@ -135,11 +162,14 @@ _a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + ID - kb:action-uuid-4 (..., 2019-01-01T14:15:00+00:00] photographed Sealed Exhibit Photographed + + @@ -151,19 +181,25 @@ _3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654 + ID - kb:action-uuid-5 (..., 2019-01-01T14:20:00+00:00] Exhibit Unsealed + + _fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + ID - kb:action-uuid-6 (..., 2019-01-01T14:21:00+00:00] photographed Unsealed Exhibit Photographed + + @@ -182,10 +218,13 @@ _c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e + ID - kb:action-uuid-8 (..., 2019-01-01T15:00:00+00:00] Exhibit Resealed + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents-entities.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents-entities.svg new file mode 100644 index 0000000..207f397 --- /dev/null +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents-entities.svg @@ -0,0 +1,961 @@ + + + + + + +PROV-O render + + + +_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +ID - kb:camera-uuid-1 + + + + + +_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +ID - kb:officer-uuid-3 + + + + + +_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +actedOnBehalfOf + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +ID - kb:dvd-uuid-1 + + + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +ID - kb:extracted-file-uuid-1 + + + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +ID - kb:file2-uuid-1 + + + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +wasDerivedFrom + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAttributedTo + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +ID - kb:provenance-record-uuid-6 +Exhibit - EXH-20190101-7-KioskReport + + + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +ID - kb:provenance-record-uuid-6e +Exhibit - EXH-20190101-7-B + + + + + +_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a->_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +wasDerivedFrom + + + +_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +ID - kb:kiosk-uuid-1 + + + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +ID - kb:provenance-record-uuid-3 + + + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +ID - kb:subject-device-uuid-1 + + + + + +_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +ID - kb:extracted-file-uuid-2 + + + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + + +ID - kb:extracted-file-uuid-3 + + + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + + +ID - kb:file-uuid-1 +Intake Form + + + + + +_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +ID - kb:officer-uuid-2 + + + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +wasAttributedTo + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +ID - kb:provenance-record-uuid-1 +Exhibit - EXH-20190101-7 + + + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + + +ID - kb:file-uuid-2 +Kiosk report + + + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + + +ID - kb:file-uuid-3 +Witness statement + + + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +wasDerivedFrom + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAttributedTo + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +ID - kb:provenance-record-uuid-7 +Exhibit - EXH-20190101-7-KioskReportDVD + + + + + +_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd->_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +wasDerivedFrom + + + +_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +actedOnBehalfOf + + + +_ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + + +ID - kb:officer-uuid-1 + + + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7 + + +ID - kb:provenance-record-73f59a8a-1c22-41fe-af50-13e8b6a65de9 + + + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +wasDerivedFrom + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + + +hadMember + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAttributedTo + + + +_403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7->_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + + +wasDerivedFrom + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + + +wasAttributedTo + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +ID - prov:EmptyCollection + + + + + +_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +wasDerivedFrom + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143 + + +ID - kb:provenance-record-uuid-2 +Exhibit - EXH-20190101-7-IntakeForm + + + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + + +hadMember + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +wasAttributedTo + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + + +wasAttributedTo + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + + +wasDerivedFrom + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103 + + +ID - kb:provenance-record-uuid-4 +Exhibit - EXH-20190101-7-SealedPhotos + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + + +ID - kb:subject-device-photograph-uuid-1 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + + +hadMember + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + + +ID - kb:subject-device-photograph-uuid-2 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + + +hadMember + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + + +ID - kb:subject-device-photograph-uuid-3 + + + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + + +hadMember + + + +_c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58 + + +ID - kb:provenance-record-uuid-5 +Exhibit - EXH-20190101-7-UnsealedPhotos + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + + +ID - kb:subject-device-photograph-uuid-4 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + + +hadMember + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + + +ID - kb:subject-device-photograph-uuid-5 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + + +hadMember + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + + +ID - kb:subject-device-photograph-uuid-6 + + + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + + +hadMember + + + +_c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + + +hadMember + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +hadMember + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + + +wasDerivedFrom + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + + +wasAttributedTo + + + +_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + + +hadMember + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAttributedTo + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + + +wasDerivedFrom + + + +_bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9->_434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + + +wasDerivedFrom + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388 + + +ID - kb:provenance-record-uuid-8 +Exhibit - EXH-20190101-7 + + + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + + +wasAttributedTo + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +hadMember + + + +_d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + + +wasAttributedTo + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + + +wasDerivedFrom + + + +_2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0->_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + + +wasDerivedFrom + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a->_ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + + +wasAttributedTo + + + +_4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a->_357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + + +wasDerivedFrom + + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents.svg index e1e9ad1..49f2d55 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-agents.svg @@ -12,14 +12,20 @@ _397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + ID - kb:camera-uuid-1 + + _ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + ID - kb:officer-uuid-3 + + @@ -31,8 +37,11 @@ _c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + ID - kb:kiosk-uuid-1 + + @@ -44,14 +53,20 @@ _ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + ID - kb:officer-uuid-1 + + _be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + ID - kb:officer-uuid-2 + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg index 59d8174..3c32754 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-extracted-file-uuid-1.svg @@ -12,16 +12,22 @@ _f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + ID - kb:action-uuid-1 (..., 2019-01-01T14:00:00+00:00] Exhibit submitted for Kiosk examination + + _ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + ID - kb:officer-uuid-1 + + @@ -33,8 +39,11 @@ _357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + ID - prov:EmptyCollection + + @@ -46,11 +55,14 @@ _4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + ID - kb:action-uuid-3 (..., 2019-01-01T14:05:30+00:00] assigned Exhibit assigned to Kiosk technician + + @@ -62,8 +74,11 @@ _be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + ID - kb:officer-uuid-2 + + @@ -75,9 +90,12 @@ _65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + ID - kb:provenance-record-uuid-1 Exhibit - EXH-20190101-7 + + @@ -89,8 +107,11 @@ _4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + ID - kb:subject-device-uuid-1 + + @@ -102,12 +123,15 @@ _728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + ID - kb:action-uuid-7 [2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] processed Exhibit Connected to Kiosk & process started; exhibit disconnected at conclusion + + @@ -119,8 +143,11 @@ _c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + ID - kb:kiosk-uuid-1 + + @@ -132,8 +159,11 @@ _ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + ID - kb:officer-uuid-3 + + @@ -145,8 +175,11 @@ _25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + ID - kb:provenance-record-uuid-3 + + @@ -165,8 +198,11 @@ _7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + ID - kb:extracted-file-uuid-1 + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-jpegs.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-jpegs.svg index 79bc4e7..9c49138 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-jpegs.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all-focus-jpegs.svg @@ -12,16 +12,22 @@ _f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + ID - kb:action-uuid-1 (..., 2019-01-01T14:00:00+00:00] Exhibit submitted for Kiosk examination + + _ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + ID - kb:officer-uuid-1 + + @@ -33,8 +39,11 @@ _357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + ID - prov:EmptyCollection + + @@ -46,11 +55,14 @@ _4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + ID - kb:action-uuid-3 (..., 2019-01-01T14:05:30+00:00] assigned Exhibit assigned to Kiosk technician + + @@ -62,8 +74,11 @@ _be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + ID - kb:officer-uuid-2 + + @@ -75,9 +90,12 @@ _65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + ID - kb:provenance-record-uuid-1 Exhibit - EXH-20190101-7 + + @@ -89,8 +107,11 @@ _4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + ID - kb:subject-device-uuid-1 + + @@ -102,11 +123,14 @@ _a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + ID - kb:action-uuid-4 (..., 2019-01-01T14:15:00+00:00] photographed Sealed Exhibit Photographed + + @@ -118,8 +142,11 @@ _397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + ID - kb:camera-uuid-1 + + @@ -131,8 +158,11 @@ _ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + ID - kb:officer-uuid-3 + + @@ -144,8 +174,11 @@ _25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + ID - kb:provenance-record-uuid-3 + + @@ -164,11 +197,14 @@ _fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + ID - kb:action-uuid-6 (..., 2019-01-01T14:21:00+00:00] photographed Unsealed Exhibit Photographed + + @@ -208,12 +244,15 @@ _728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + ID - kb:action-uuid-7 [2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] processed Exhibit Connected to Kiosk & process started; exhibit disconnected at conclusion + + @@ -225,8 +264,11 @@ _c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + ID - kb:kiosk-uuid-1 + + @@ -266,8 +308,11 @@ _7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + ID - kb:extracted-file-uuid-1 + + @@ -300,8 +345,11 @@ _b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + ID - kb:extracted-file-uuid-2 + + @@ -334,8 +382,11 @@ _853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + ID - kb:extracted-file-uuid-3 + + @@ -438,9 +489,12 @@ _c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103 + ID - kb:provenance-record-uuid-4 Exhibit - EXH-20190101-7-SealedPhotos + + @@ -466,8 +520,11 @@ _0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + ID - kb:subject-device-photograph-uuid-1 + + @@ -479,8 +536,11 @@ _970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + ID - kb:subject-device-photograph-uuid-2 + + @@ -492,8 +552,11 @@ _4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + ID - kb:subject-device-photograph-uuid-3 + + @@ -512,9 +575,12 @@ _c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58 + ID - kb:provenance-record-uuid-5 Exhibit - EXH-20190101-7-UnsealedPhotos + + @@ -540,8 +606,11 @@ _3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + ID - kb:subject-device-photograph-uuid-4 + + @@ -553,8 +622,11 @@ _b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + ID - kb:subject-device-photograph-uuid-5 + + @@ -566,8 +638,11 @@ _2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + ID - kb:subject-device-photograph-uuid-6 + + @@ -586,9 +661,12 @@ _484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + ID - kb:provenance-record-uuid-6 Exhibit - EXH-20190101-7-KioskReport + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all.svg index aa74b44..e01dd60 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-all.svg @@ -12,16 +12,22 @@ _f69d7472a828b3c904780e8db73164a2b909dfe0ebb831bb1d513ce42cd49721 + ID - kb:action-uuid-1 (..., 2019-01-01T14:00:00+00:00] Exhibit submitted for Kiosk examination + + _ce525c27e32383c04497291d356c30387164d9e98e67466567e244b87e47285c + ID - kb:officer-uuid-1 + + @@ -33,8 +39,11 @@ _357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + ID - prov:EmptyCollection + + @@ -46,21 +55,27 @@ _ec0cb8088f36a6d530964f849bcd494db43ffc891f124b195c953806366280bf + ID - kb:action-uuid-10 (..., 2019-01-01T15:05:00+00:00] burned Report DVD Generated as associated exhibit + + _728161ffc6ebe8725602a10a1e900a5e8f082d454ee552e12d53701fd976c7c7 + ID - kb:action-uuid-7 [2019-01-01T14:25:00+00:00, 2019-01-01T14:55:00+00:00] processed Exhibit Connected to Kiosk & process started; exhibit disconnected at conclusion + + @@ -72,12 +87,15 @@ _941a648d460e10f52ae5cc7f6eb5db5c86c6ed72a0c34236d8581d5862aaedc5 + ID - kb:action-uuid-9 (..., 2019-01-01T15:03:00+00:00] selected Picture selected, via kiosk review screen, from those extracted from exhibit + + @@ -89,8 +107,11 @@ _7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + ID - kb:extracted-file-uuid-1 + + @@ -102,8 +123,11 @@ _80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + ID - kb:file2-uuid-1 + + @@ -115,8 +139,11 @@ _ffa327987157924d1ae152fdea43f99b98251d8fdd6a67aa829f2bab25e15c91 + ID - kb:officer-uuid-3 + + @@ -128,9 +155,12 @@ _484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + ID - kb:provenance-record-uuid-6 Exhibit - EXH-20190101-7-KioskReport + + @@ -142,9 +172,12 @@ _434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + ID - kb:provenance-record-uuid-6e Exhibit - EXH-20190101-7-B + + @@ -156,10 +189,13 @@ _753f23f085ba053a1cef5bc11a3966f236ce4b8988665c637e11a4e390141490 + ID - kb:action-uuid-11 (..., 2019-01-01T15:10:00+00:00] DVD Report sealed + + @@ -178,10 +214,13 @@ _b367090120b789a413530191b095fe7b7477e0a0b0cc65a7b18a796aa780ef17 + ID - kb:action-uuid-12 (..., 2019-01-01T15:15:00+00:00] Witness statement completed + + @@ -193,8 +232,11 @@ _901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + ID - kb:dvd-uuid-1 + + @@ -213,9 +255,12 @@ _bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + ID - kb:provenance-record-uuid-7 Exhibit - EXH-20190101-7-KioskReportDVD + + @@ -227,21 +272,27 @@ _0bcbe477b1432ed8c27180001859454a9d58edf142d4f08ced342c22a32f04d9 + ID - kb:action-uuid-13 (..., 2019-01-01T15:20:00+00:00] transferred Sealed Exhibit handed the OIC & Transfer documentation signed + + _4fff92433990a9c7d101f2962972eeee4ef83c4b30e26db77fece7989bf9265b + ID - kb:action-uuid-3 (..., 2019-01-01T14:05:30+00:00] assigned Exhibit assigned to Kiosk technician + + @@ -260,8 +311,11 @@ _25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + ID - kb:provenance-record-uuid-3 + + @@ -273,8 +327,11 @@ _4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + ID - kb:subject-device-uuid-1 + + @@ -286,11 +343,14 @@ _16dd34a8048eca99a315b5a0099fa706f30ea216d66af3f4a0fef75f42d67efd + ID - kb:action-uuid-2 (..., 2019-01-01T14:05:00+00:00] transferred Exhibit seal checks (passed) & Exhibit receipted in lab + + @@ -302,8 +362,11 @@ _be1ad1d576ff7128a26a59ee6acb2f1a317b5ed42d49655f1e89b3aed160e6c8 + ID - kb:officer-uuid-2 + + @@ -315,9 +378,12 @@ _65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + ID - kb:provenance-record-uuid-1 Exhibit - EXH-20190101-7 + + @@ -364,11 +430,14 @@ _a4cd5e32ce07b45de21d91f6242aad329c8121fde920cfcfebb4d6da141f49f5 + ID - kb:action-uuid-4 (..., 2019-01-01T14:15:00+00:00] photographed Sealed Exhibit Photographed + + @@ -380,8 +449,11 @@ _397a9e99edc9334a99efac2668700bbb3ceb44a4f2584719710c9c5f82038b67 + ID - kb:camera-uuid-1 + + @@ -414,10 +486,13 @@ _3608809be4f97a4bf692c2d8f136b7b50753b36f464063c601296926456e1654 + ID - kb:action-uuid-5 (..., 2019-01-01T14:20:00+00:00] Exhibit Unsealed + + @@ -436,11 +511,14 @@ _fbc4cac489edf2b11ef60f73c6fd5f8f7bf7013dc9b901754a6c1b02ac026c4d + ID - kb:action-uuid-6 (..., 2019-01-01T14:21:00+00:00] photographed Unsealed Exhibit Photographed + + @@ -487,8 +565,11 @@ _c74f294e6e5b3b476c50723f525440e37f16bbb4029944635c70f5c4cb0e6d9f + ID - kb:kiosk-uuid-1 + + @@ -521,10 +602,13 @@ _c2d2c936c49ff4c98e5030252a5f1b219d026d517ab25a6ac2298fa3112d962e + ID - kb:action-uuid-8 (..., 2019-01-01T15:00:00+00:00] Exhibit Resealed + + @@ -557,8 +641,11 @@ _b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + ID - kb:extracted-file-uuid-2 + + @@ -696,8 +783,11 @@ _853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + ID - kb:extracted-file-uuid-3 + + @@ -730,9 +820,12 @@ _f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + ID - kb:file-uuid-1 Intake Form + + @@ -765,9 +858,12 @@ _e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + ID - kb:file-uuid-2 Kiosk report + + @@ -800,9 +896,12 @@ _a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + ID - kb:file-uuid-3 Witness statement + + @@ -842,8 +941,11 @@ _403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7 + ID - kb:provenance-record-73f59a8a-1c22-41fe-af50-13e8b6a65de9 + + @@ -911,9 +1013,12 @@ _8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143 + ID - kb:provenance-record-uuid-2 Exhibit - EXH-20190101-7-IntakeForm + + @@ -988,9 +1093,12 @@ _c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103 + ID - kb:provenance-record-uuid-4 Exhibit - EXH-20190101-7-SealedPhotos + + @@ -1016,8 +1124,11 @@ _0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + ID - kb:subject-device-photograph-uuid-1 + + @@ -1029,8 +1140,11 @@ _970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + ID - kb:subject-device-photograph-uuid-2 + + @@ -1042,8 +1156,11 @@ _4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + ID - kb:subject-device-photograph-uuid-3 + + @@ -1062,9 +1179,12 @@ _c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58 + ID - kb:provenance-record-uuid-5 Exhibit - EXH-20190101-7-UnsealedPhotos + + @@ -1090,8 +1210,11 @@ _3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + ID - kb:subject-device-photograph-uuid-4 + + @@ -1103,8 +1226,11 @@ _b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + ID - kb:subject-device-photograph-uuid-5 + + @@ -1116,8 +1242,11 @@ _2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + ID - kb:subject-device-photograph-uuid-6 + + @@ -1283,9 +1412,12 @@ _d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388 + ID - kb:provenance-record-uuid-8 Exhibit - EXH-20190101-7 + + diff --git a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-entities.svg b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-entities.svg index 9bdd7eb..3ee4173 100644 --- a/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-entities.svg +++ b/tests/casework.github.io/examples/urgent_evidence/urgent_evidence-prov-entities.svg @@ -12,14 +12,20 @@ _901a5aa80c640bf66da1293d30c96d308a3276fca4aea54cebeb49a31d26554a + ID - kb:dvd-uuid-1 + + _7c406068ab32c3bd872fbeced3a1e91d364c55c40a1ce1086876372606d3a115 + ID - kb:extracted-file-uuid-1 + + @@ -31,8 +37,11 @@ _80a54ae6dcd17b82bad4f1b75d46dcdd7a472bec2b9f3b8df31754a058fbd6e9 + ID - kb:file2-uuid-1 + + @@ -44,9 +53,12 @@ _484576af2846c3f036fafb4ee4fe1d1bb5a2a165356097276a3dded83e6b7377 + ID - kb:provenance-record-uuid-6 Exhibit - EXH-20190101-7-KioskReport + + @@ -58,9 +70,12 @@ _434527057344b9ed0bbf6703ea271cf35386ec8a6aa041e4396440b498e4cd42 + ID - kb:provenance-record-uuid-6e Exhibit - EXH-20190101-7-B + + @@ -72,8 +87,11 @@ _25d9954549ae2c73025969a0637aa1dacff6cef0f282ad4cb57fb34ac6b94c60 + ID - kb:provenance-record-uuid-3 + + @@ -85,8 +103,11 @@ _4e612817f5750d184e4518f1d2ca7aa251f41dfc4fa9e77f6cf49f02268ed43a + ID - kb:subject-device-uuid-1 + + @@ -98,8 +119,11 @@ _b333e2ae30f0e5b7c8a703d7b6a58d7785103fe91e848579c0c978f97a4a1504 + ID - kb:extracted-file-uuid-2 + + @@ -118,8 +142,11 @@ _853b16b1b5b9201300f81d4f0b4d97fd3912f620626929e2a37493f9e6854f6f + ID - kb:extracted-file-uuid-3 + + @@ -138,16 +165,22 @@ _f31f65d311ad3778d266554e2e7fc8c37fec6f3069bd410411cd51ab3a25868c + ID - kb:file-uuid-1 Intake Form + + _65b1525d47c5649b4b1adfbf3e6c6109be7580e6edf9df407e9c741151caee77 + ID - kb:provenance-record-uuid-1 Exhibit - EXH-20190101-7 + + @@ -166,9 +199,12 @@ _e1ce700edd051c6d29f9e11149749a033dadd5398c4a0f46c8684eb1c22d8e76 + ID - kb:file-uuid-2 Kiosk report + + @@ -187,9 +223,12 @@ _a24995c79d7a7052e035f7e5c7ac60345ecd3dac1492fe5a6128e0c2183972bd + ID - kb:file-uuid-3 Witness statement + + @@ -201,9 +240,12 @@ _bdcdc10ca0415dad76a20c62c63ab8c1712b478537c5f9f68ee6f09a5db09de9 + ID - kb:provenance-record-uuid-7 Exhibit - EXH-20190101-7-KioskReportDVD + + @@ -215,8 +257,11 @@ _403da6fb9a59fb4b32ec65a279be17b7337dd41847e50e386b208beebbdb52f7 + ID - kb:provenance-record-73f59a8a-1c22-41fe-af50-13e8b6a65de9 + + @@ -249,8 +294,11 @@ _357f00248bdc728725be43338ec69113a99cec9793681d0accd1f777e4dd5fbf + ID - prov:EmptyCollection + + @@ -262,9 +310,12 @@ _8212759305f9ef5c1f5cd6fdf126720fff524b34489e5ea6c58b230a91bc7143 + ID - kb:provenance-record-uuid-2 Exhibit - EXH-20190101-7-IntakeForm + + @@ -311,9 +362,12 @@ _c4268a63f32bff6bcba613577d53148c0108d903271d08a88cdf457a3dc88103 + ID - kb:provenance-record-uuid-4 Exhibit - EXH-20190101-7-SealedPhotos + + @@ -325,8 +379,11 @@ _0e67518512a3e1a5b8dcee5f128322c6e1564017d5eb128c15bd6f66518368c2 + ID - kb:subject-device-photograph-uuid-1 + + @@ -338,8 +395,11 @@ _970f0be0af6a87523bea5b16177ea73606726c49a237dadf7f0d75f20e6563b9 + ID - kb:subject-device-photograph-uuid-2 + + @@ -351,8 +411,11 @@ _4919aecae1be31ac9c79394cbbd762f6cdce9595613b7a249c4387e875a5a223 + ID - kb:subject-device-photograph-uuid-3 + + @@ -371,9 +434,12 @@ _c692cff367c721837e19c200569f0258ac8c889178feadaeaca00d195c094d58 + ID - kb:provenance-record-uuid-5 Exhibit - EXH-20190101-7-UnsealedPhotos + + @@ -385,8 +451,11 @@ _3d62232031066f6421ccdbcb8fca2315cd203586b1e9298bed0dbb8435019ecd + ID - kb:subject-device-photograph-uuid-4 + + @@ -398,8 +467,11 @@ _b80efa3fa29172043dbf182091066e5175280d854dd0d44ada6f50348a06690a + ID - kb:subject-device-photograph-uuid-5 + + @@ -411,8 +483,11 @@ _2eb2dfd268927a8cc65ba974ef8024dd521d164a3028d69ad836a6bf9a1730d0 + ID - kb:subject-device-photograph-uuid-6 + + @@ -536,9 +611,12 @@ _d25cd8b8a380a6f638aeb413ad2f7ff4b2815f3957e99fcaf59b7475e45b1388 + ID - kb:provenance-record-uuid-8 Exhibit - EXH-20190101-7 + +