From 2238622e600b11549662c62cca6135196ea75db9 Mon Sep 17 00:00:00 2001 From: Alex Nelson Date: Wed, 16 Oct 2024 11:21:50 -0400 Subject: [PATCH] Change OperatingSystem parent class to Software; update previously-in-common property placement 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 | 28 ++------------ tests/examples/Makefile | 3 +- tests/examples/operating_system_PASS.json | 7 +--- tests/examples/operating_system_XFAIL.json | 44 ++++++++++++++++++++++ tests/examples/test_validation.py | 15 +++++--- 5 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 tests/examples/operating_system_XFAIL.json diff --git a/ontology/uco/observable/observable.ttl b/ontology/uco/observable/observable.ttl index bf90249b..83e28809 100644 --- a/ontology/uco/observable/observable.ttl +++ b/ontology/uco/observable/observable.ttl @@ -5155,17 +5155,9 @@ observable:OperatingSystem owl:Class , sh:NodeShape ; - rdfs:subClassOf observable:ObservableObject ; + rdfs:subClassOf observable:Software ; 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 ; . @@ -5178,12 +5170,6 @@ observable:OperatingSystemFacet rdfs:label "OperatingSystemFacet"@en ; rdfs:comment "An operating system facet is a grouping of characteristics unique to 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 ; sh:property - [ - sh:class identity:Identity ; - sh:maxCount "1"^^xsd:integer ; - sh:nodeKind sh:IRI ; - sh:path observable:manufacturer ; - ] , [ sh:class types:Dictionary ; sh:maxCount "1"^^xsd:integer ; @@ -5208,12 +5194,6 @@ observable:OperatingSystemFacet sh:nodeKind sh:Literal ; sh:path observable:bitness ; ] , - [ - sh:datatype xsd:string ; - sh:maxCount "1"^^xsd:integer ; - sh:nodeKind sh:Literal ; - sh:path observable:version ; - ] , [ sh:datatype xsd:string ; sh:nodeKind sh:Literal ; @@ -5221,15 +5201,13 @@ observable:OperatingSystemFacet ] , [ 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:message "As of UCO 2.0.0, uco-observable:manufacturer is not 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:message "As of UCO 2.0.0, uco-observable:version is not 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 14b4711d..4bd4da5c 100644 --- a/tests/examples/Makefile +++ b/tests/examples/Makefile @@ -45,6 +45,7 @@ all: \ object_status_XFAIL_validation.ttl \ observable_creation_time_PASS_validation.ttl \ operating_system_PASS_validation.ttl \ + operating_system_XFAIL_validation.ttl \ owl_axiom_PASS_validation.ttl \ owl_axiom_XFAIL_validation.ttl \ owl_properties_PASS_validation.ttl \ @@ -122,7 +123,7 @@ check: \ object_status_PASS_validation.ttl \ object_status_XFAIL_validation.ttl \ observable_creation_time_PASS_validation.ttl \ - operating_system_PASS_validation.ttl \ + operating_system_XFAIL_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 index c97ff495..a72adbf1 100644 --- a/tests/examples/operating_system_PASS.json +++ b/tests/examples/operating_system_PASS.json @@ -31,16 +31,11 @@ { "@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/operating_system_XFAIL.json b/tests/examples/operating_system_XFAIL.json new file mode 100644 index 00000000..4711337b --- /dev/null +++ b/tests/examples/operating_system_XFAIL.json @@ -0,0 +1,44 @@ +{ + "@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-cc6ee776-d770-409d-a84b-06aa6009b670", + "@type": "identity:Organization", + "core:name": "Example OS Company" + }, + { + "@id": "kb:OperatingSystem-0a6c3dcd-9a53-4d1b-a635-afbcedab9760", + "@type": "observable:OperatingSystem", + "core:description": "The Example Operating System instance deployed on workstation C-304-33", + "core:hasFacet": [ + { + "@id": "kb:SoftwareFacet-6b474a08-99f7-4dbd-8cd1-ef81ddff6bc3", + "@type": "observable:SoftwareFacet", + "observable:cpeid": "cpe:2.3:o:exampleosco:exampleos:40:*:*:*:*:*:*:*", + "observable:language": "en-us" + }, + { + "@id": "kb:OperatingSystemFacet-483cc1a7-f1f1-472f-87e0-3e076fad46ec", + "@type": "observable:OperatingSystemFacet", + "rdfs:comment": "This node will trigger an error for housing the manufacturer and version properties, now required to be on SoftwareFacet.", + "observable:bitness": "64", + "observable:installDate": { + "@type": "xsd:dateTime", + "@value": "2024-09-13T09:00:00-04:00" + }, + "observable:manufacturer": { + "@id": "kb:Organization-cc6ee776-d770-409d-a84b-06aa6009b670" + }, + "observable:version": "40" + } + ] + } + ] +} diff --git a/tests/examples/test_validation.py b/tests/examples/test_validation.py index a4301855..a67babf8 100644 --- a/tests/examples/test_validation.py +++ b/tests/examples/test_validation.py @@ -463,14 +463,17 @@ def test_operating_system_PASS() -> None: confirm_validation_results( "operating_system_PASS_validation.ttl", True, + expected_focus_node_severities=set() + ) + +def test_operating_system_XFAIL() -> None: + confirm_validation_results( + "operating_system_XFAIL_validation.ttl", + False, 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) + "http://example.org/kb/OperatingSystemFacet-483cc1a7-f1f1-472f-87e0-3e076fad46ec", + str(NS_SH.Violation) ), } )