0.8.0
New features:
case-utils
0.11.0 is now adopted.- OWL-Time is now incorporated into the inferencing logic of
case_prov_rdf
andcase_prov_dot
, following the non-normative PROV-O alignment suggestions of OWL-Time Section 5.7. Thecase-prov
README documents the illustration and inference effects.- To have time objects (
time:Interval
s and their boundarytime:Instant
s) be visibly displayed, rather than only invisibly influencing layout, pass--display-time-links
tocase_prov_dot
.
- To have time objects (
- Timestamps used on
case-investigation:InvestigativeAction
s now have a visual timeline behavior incase_prov_dot
.- Those timestamps can also be used for timelining analysis from
time:Instant
s inferred bycase_prov_rdf
. For example, an investigative action that has auco-observable:File
as a result induces atime:Instant
representing the instant the file was created, which might or might not eventually receive a timestamp in an analyst's workflow, but the timestamp is asserted to betime:before
the endingtime:Instant
of the investigative action. - A caveat on timestamp ordering: Only timestamps with a timezone will be cast into
time:inXSDDateTimeStamp
. (At the time of the 2022-11-15 OWL-Time draft,time:inXSDDateTime
is deprecated.) This is left to the user as a UCO data preparation responsibility.time:Instant
s will still be inferred and topologically linked for timestamps without timezones. - Another caveat on timestamp ordering: Currently, only timestamps with a timezone (i.e. ending with either
+00:00
orZ
) will influence timeline sorting bycase_prov_dot
. Help is welcome to implement general timezone sorting in a futurecase-prov
release.
- Those timestamps can also be used for timelining analysis from
- On an investigative action, a
uco-action:endTime
timestamp is treated as a designation the action has an end. In general, an investigative action is not assumed to have an end, though all investigative actions are assumed to have a beginning. case_prov_dot
andcase_prov_dot
now have some generated effects that can be influenced from UUID randomization. A flag--use-deterministic-uuid
s is now provided for these commands.- Using the inherence functions from
case-utils
0.11.0,prov:Influence
s (Association
,Attribution
, etc.) andprov:InstantaneousEvent
s (Generation
,Start
, etc.) are now handled in Python code rather than SPARQLCONSTRUCT
queries. This is to avoid generating blank nodes, and to also incorporate run-time requests to use non-deterministic UUIDs or not (whether through inherence incase_utils.inherent_uuid
, or the "demo" nonrandom UUIDs fromcase_utils.local_uuid
). - (Also a bug fix.) Node labels from
case_prov_dot
are no longer limited to a single label string (e.g. if there were twordfs:comment
s, only one would display). - Node labels from
case_prov_dot
now preserve the annotating predicate as part of the label's line ordering. case_prov_rdf
now carries forwarduco-core:description
rather than casting its contents to anrdfs:comment
.case_prov_rdf
now carries forwarduco-core:name
, andcase_prov_dot
now displays it, for UCO nodes inferred to beprov:Activity
s,prov:Agent
s, orprov:Entity
s.
Maintenance updates:
- Documentation for modules now includes doctests (inlined code samples) for functions.
case_prov
is now type-reviewed withmypy --strict
.- The project's home page link from PyPI has been fixed.
case_prov_dot
's code flow has been nearly totally reordered and inline-documented.