From 62ebeab6a1b018da991a4ddf262d29fd467aa9c7 Mon Sep 17 00:00:00 2001 From: Alex Nelson Date: Fri, 13 Sep 2024 11:30:27 -0400 Subject: [PATCH 1/2] Prepare OperatingSystem to become a subclass of Software A follow-on patch will regenerate Make-managed files. References: * https://github.com/ucoProject/UCO/issues/632 Signed-off-by: Alex Nelson --- ontology/uco/observable/observable.ttl | 20 ++++++++++ tests/examples/Makefile | 2 + tests/examples/operating_system_PASS.json | 48 +++++++++++++++++++++++ tests/examples/test_validation.py | 16 ++++++++ 4 files changed, 86 insertions(+) create mode 100644 tests/examples/operating_system_PASS.json diff --git a/ontology/uco/observable/observable.ttl b/ontology/uco/observable/observable.ttl index 6dc75195..bf90249b 100644 --- a/ontology/uco/observable/observable.ttl +++ b/ontology/uco/observable/observable.ttl @@ -5158,6 +5158,14 @@ observable:OperatingSystem rdfs:subClassOf observable:ObservableObject ; rdfs:label "OperatingSystem"@en ; rdfs:comment "An operating system is the software that manages computer hardware, software resources, and provides common services for computer programs. [based on https://en.wikipedia.org/wiki/Operating_system]"@en ; + rdfs:seeAlso [ + a sh:NodeShape ; + rdfs:comment "This anonymous shape is attached with rdfs:seeAlso in order to associate a warning-severity class constraint, that will only be necessary as an independent shape until UCO 2.0.0."@en ; + sh:class observable:Software ; + sh:message "In UCO 2.0.0, uco-observable:OperatingSystem will be a subclass of uco-observable:Software. In preparation for UCO 2.0.0, the additional type uco-observable:Software should be assigned to this node."@en ; + sh:severity sh:Warning ; + sh:targetClass observable:OperatingSystem ; + ] ; sh:targetClass observable:OperatingSystem ; . @@ -5210,6 +5218,18 @@ observable:OperatingSystemFacet sh:datatype xsd:string ; sh:nodeKind sh:Literal ; sh:path observable:advertisingID ; + ] , + [ + sh:maxCount "0"^^xsd:integer ; + sh:message "In UCO 2.0.0, uco-observable:manufacturer will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:path observable:manufacturer ; + sh:severity sh:Warning ; + ] , + [ + sh:maxCount "0"^^xsd:integer ; + sh:message "In UCO 2.0.0, uco-observable:version will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:path observable:version ; + sh:severity sh:Warning ; ] ; sh:targetClass observable:OperatingSystemFacet ; diff --git a/tests/examples/Makefile b/tests/examples/Makefile index 552c0b89..14b4711d 100644 --- a/tests/examples/Makefile +++ b/tests/examples/Makefile @@ -44,6 +44,7 @@ all: \ object_status_PASS_validation.ttl \ object_status_XFAIL_validation.ttl \ observable_creation_time_PASS_validation.ttl \ + operating_system_PASS_validation.ttl \ owl_axiom_PASS_validation.ttl \ owl_axiom_XFAIL_validation.ttl \ owl_properties_PASS_validation.ttl \ @@ -121,6 +122,7 @@ check: \ object_status_PASS_validation.ttl \ object_status_XFAIL_validation.ttl \ observable_creation_time_PASS_validation.ttl \ + operating_system_PASS_validation.ttl \ owl_axiom_PASS_validation.ttl \ owl_axiom_XFAIL_validation.ttl \ owl_properties_PASS_validation.ttl \ diff --git a/tests/examples/operating_system_PASS.json b/tests/examples/operating_system_PASS.json new file mode 100644 index 00000000..c97ff495 --- /dev/null +++ b/tests/examples/operating_system_PASS.json @@ -0,0 +1,48 @@ +{ + "@context": { + "core": "https://ontology.unifiedcyberontology.org/uco/core/", + "identity": "https://ontology.unifiedcyberontology.org/uco/identity/", + "kb": "http://example.org/kb/", + "observable": "https://ontology.unifiedcyberontology.org/uco/observable/", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "xsd": "http://www.w3.org/2001/XMLSchema#" + }, + "@graph": [ + { + "@id": "kb:Organization-4ea8a5bf-60ea-43ba-9ba6-f852ce8f8b54", + "@type": "identity:Organization", + "core:name": "Example OS Company" + }, + { + "@id": "kb:OperatingSystem-427dd103-2553-4ccc-ad57-1df4e88b174d", + "@type": "observable:OperatingSystem", + "core:description": "The Example Operating System instance deployed on workstation B-203-22", + "core:hasFacet": [ + { + "@id": "kb:SoftwareFacet-1bde46c5-4648-493c-b9dc-56477191d5c6", + "@type": "observable:SoftwareFacet", + "observable:cpeid": "cpe:2.3:o:exampleosco:exampleos:40:*:*:*:*:*:*:*", + "observable:language": "en-us", + "observable:manufacturer": { + "@id": "kb:Organization-4ea8a5bf-60ea-43ba-9ba6-f852ce8f8b54" + }, + "observable:version": "40" + }, + { + "@id": "kb:OperatingSystemFacet-35047ef2-ffd6-45e8-8b3c-2e8e4bfe7c2b", + "@type": "observable:OperatingSystemFacet", + "rdfs:comment": "This node will trigger a warning for housing the manufacturer and version properties, meant to be moved to SoftwareFacet.", + "observable:bitness": "64", + "observable:installDate": { + "@type": "xsd:dateTime", + "@value": "2024-09-13T09:00:00-04:00" + }, + "observable:manufacturer": { + "@id": "kb:Organization-4ea8a5bf-60ea-43ba-9ba6-f852ce8f8b54" + }, + "observable:version": "40" + } + ] + } + ] +} diff --git a/tests/examples/test_validation.py b/tests/examples/test_validation.py index 609c1b77..a4301855 100644 --- a/tests/examples/test_validation.py +++ b/tests/examples/test_validation.py @@ -459,6 +459,22 @@ def test_observable_creation_time_PASS() -> None: } ) +def test_operating_system_PASS() -> None: + confirm_validation_results( + "operating_system_PASS_validation.ttl", + True, + expected_focus_node_severities={ + ( + "http://example.org/kb/OperatingSystem-427dd103-2553-4ccc-ad57-1df4e88b174d", + str(NS_SH.Warning) + ), + ( + "http://example.org/kb/OperatingSystemFacet-35047ef2-ffd6-45e8-8b3c-2e8e4bfe7c2b", + str(NS_SH.Warning) + ), + } + ) + def test_owl_axiom_PASS() -> None: confirm_validation_results( "owl_axiom_PASS_validation.ttl", From 40b285a9089e97b536126587399c8e199293dcfe Mon Sep 17 00:00:00 2001 From: Alex Nelson Date: Fri, 13 Sep 2024 11:30:42 -0400 Subject: [PATCH 2/2] Regenerate Make-managed files References: * https://github.com/ucoProject/UCO/issues/632 Signed-off-by: Alex Nelson --- .../operating_system_PASS_validation.ttl | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/examples/operating_system_PASS_validation.ttl diff --git a/tests/examples/operating_system_PASS_validation.ttl b/tests/examples/operating_system_PASS_validation.ttl new file mode 100644 index 00000000..7687a1b2 --- /dev/null +++ b/tests/examples/operating_system_PASS_validation.ttl @@ -0,0 +1,58 @@ +@prefix observable: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix sh: . +@prefix xsd: . + +[] + a sh:ValidationReport ; + sh:conforms "true"^^xsd:boolean ; + sh:result + [ + a sh:ValidationResult ; + sh:focusNode ; + sh:resultMessage "In UCO 2.0.0, uco-observable:OperatingSystem will be a subclass of uco-observable:Software. In preparation for UCO 2.0.0, the additional type uco-observable:Software should be assigned to this node."@en ; + sh:resultSeverity sh:Warning ; + sh:sourceConstraintComponent sh:ClassConstraintComponent ; + sh:sourceShape [ + a sh:NodeShape ; + rdfs:comment "This anonymous shape is attached with rdfs:seeAlso in order to associate a warning-severity class constraint, that will only be necessary as an independent shape until UCO 2.0.0."@en ; + sh:class observable:Software ; + sh:message "In UCO 2.0.0, uco-observable:OperatingSystem will be a subclass of uco-observable:Software. In preparation for UCO 2.0.0, the additional type uco-observable:Software should be assigned to this node."@en ; + sh:severity sh:Warning ; + sh:targetClass observable:OperatingSystem ; + ] ; + sh:value ; + ] , + [ + a sh:ValidationResult ; + sh:focusNode ; + sh:resultMessage "In UCO 2.0.0, uco-observable:manufacturer will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:resultPath observable:manufacturer ; + sh:resultSeverity sh:Warning ; + sh:sourceConstraintComponent sh:MaxCountConstraintComponent ; + sh:sourceShape [ + sh:maxCount "0"^^xsd:integer ; + sh:message "In UCO 2.0.0, uco-observable:manufacturer will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:path observable:manufacturer ; + sh:severity sh:Warning ; + ] ; + ] , + [ + a sh:ValidationResult ; + sh:focusNode ; + sh:resultMessage "In UCO 2.0.0, uco-observable:version will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:resultPath observable:version ; + sh:resultSeverity sh:Warning ; + sh:sourceConstraintComponent sh:MaxCountConstraintComponent ; + sh:sourceShape [ + sh:maxCount "0"^^xsd:integer ; + sh:message "In UCO 2.0.0, uco-observable:version will not be associated with uco-observable:OperatingSystemFacet. Please place this on a uco-observable:SoftwareFacet instead."@en ; + sh:path observable:version ; + sh:severity sh:Warning ; + ] ; + ] + ; + . +