Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
2025-10-22
* Issue 184: Add investigation:Technician role class

2025-03-18
* (7ecdaf4) UCO Issue 629: Revise vocabulary pattern

Expand Down
11 changes: 11 additions & 0 deletions ontology/investigation/investigation.ttl
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,17 @@ investigation:SubjectActionLifecycle
sh:targetClass investigation:SubjectActionLifecycle ;
.

investigation:Technician
a
owl:Class ,
sh:NodeShape
;
rdfs:subClassOf uco-role:Role ;
rdfs:label "Technician"@en ;
rdfs:comment "Technician is a role involved in performing technical tasks during investigations, such as evidence collection, preservation, processing, initial analysis, and repair."@en ;
sh:targetClass investigation:Technician ;
.

investigation:VictimActionLifecycle
a
owl:Class ,
Expand Down
6 changes: 4 additions & 2 deletions tests/examples/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ tests_srcdir := $(top_srcdir)/tests

all: \
investigative_action_PASS_validation.ttl \
investigative_action_XFAIL_validation.ttl
investigative_action_XFAIL_validation.ttl \
technician_role_PASS_validation.ttl

.PRECIOUS: \
%_validation.ttl
Expand Down Expand Up @@ -63,7 +64,8 @@ all: \

check: \
investigative_action_PASS_validation.ttl \
investigative_action_XFAIL_validation.ttl
investigative_action_XFAIL_validation.ttl \
technician_role_PASS_validation.ttl
source $(top_srcdir)/venv/bin/activate \
&& pytest \
--log-level=DEBUG
Expand Down
64 changes: 64 additions & 0 deletions tests/examples/technician_role_PASS.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"@context": {
"kb": "http://example.org/kb/",
"case-investigation": "https://ontology.caseontology.org/case/investigation/",
"uco-action": "https://ontology.unifiedcyberontology.org/uco/action/",
"uco-core": "https://ontology.unifiedcyberontology.org/uco/core/",
"uco-observable": "https://ontology.unifiedcyberontology.org/uco/observable/",
"xsd": "http://www.w3.org/2001/XMLSchema#"
},
"@graph": [
{
"@id": "kb:technician-identity-9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
"@type": "uco-core:Identity",
"uco-core:name": "Forensic Technician Williams",
"uco-core:role": {
"@id": "kb:technician-role-c8d9f2e1-a4b7-4c3e-8f5d-6a1e9b2c7f4a"
}
},
{
"@id": "kb:technician-role-c8d9f2e1-a4b7-4c3e-8f5d-6a1e9b2c7f4a",
"@type": "case-investigation:Technician",
"uco-core:startTime": {
"@type": "xsd:dateTime",
"@value": "2024-01-15T09:00:00Z"
}
},
{
"@id": "kb:disk-image-3f8a2c7d-b1e9-4d3c-a5f7-1b2e4a9c8d6f",
"@type": "uco-observable:File",
"uco-core:description": "Forensic disk image of evidence laptop",
"uco-core:hasFacet": {
"@id": "kb:disk-image-facet-a3c9f7e1-d5b2-4a8e-9c3f-7e1a5d9b2c4f",
"@type": "uco-observable:FileFacet",
"uco-observable:fileName": "evidence-laptop-001.dd",
"uco-observable:sizeInBytes": 512000000000
}
},
{
"@id": "kb:disk-imaging-action-5d7a3e9f-c2b4-4f8a-9e3d-6c1b5a8f7e2d",
"@type": "case-investigation:InvestigativeAction",
"uco-core:name": "Disk imaging of evidence laptop",
"uco-action:performer": {
"@id": "kb:technician-role-c8d9f2e1-a4b7-4c3e-8f5d-6a1e9b2c7f4a"
},
"uco-action:result": [
{
"@id": "kb:disk-image-3f8a2c7d-b1e9-4d3c-a5f7-1b2e4a9c8d6f"
},
{
"@id": "kb:provenance-record-e9f5c1a7-d4b8-4a6e-9c2f-3e5d7a9b1c4f"
}
]
},
{
"@id": "kb:provenance-record-e9f5c1a7-d4b8-4a6e-9c2f-3e5d7a9b1c4f",
"@type": "case-investigation:ProvenanceRecord",
"case-investigation:exhibitNumber": "2024-001-E1",
"case-investigation:rootExhibitNumber": "2024-001-E1",
"uco-core:object": {
"@id": "kb:disk-image-3f8a2c7d-b1e9-4d3c-a5f7-1b2e4a9c8d6f"
}
}
]
}
7 changes: 7 additions & 0 deletions tests/examples/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,10 @@ def test_investigative_action_XFAIL_validation() -> None:
str(NS_CASE_INVESTIGATION.rootExhibitNumber)
}
)

def test_technician_role_PASS_validation() -> None:
"""
Confirm the Technician role PASS instance data passes validation.
"""
g = load_validation_graph("technician_role_PASS_validation.ttl", True)
assert isinstance(g, rdflib.Graph)