From dbcea8e6ce78ad4a70e7772f40bb363b339e9d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20T=C3=A4nzer?= Date: Tue, 13 Jun 2023 17:28:13 +0200 Subject: [PATCH] add json-parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Armin Tänzer --- .../spdx3/bump_from_spdx2/package.py | 4 +- src/spdx_tools/spdx3/model/hash.py | 4 +- src/spdx_tools/spdx3/parser/__init__.py | 0 src/spdx_tools/spdx3/parser/json/__init__.py | 0 .../spdx3/parser/json/json_parser.py | 114 + .../spdx3/parser/model_definition_dicts.py | 102 + .../spdx3/writer/json_ld/SPDX_OWL.json | 2689 +++++++++-------- .../spdx3/writer/json_ld/context.json | 973 +++--- .../spdx3/writer/json_ld/json_ld_converter.py | 11 +- .../spdx3/writer/json_ld/json_ld_writer.py | 2 +- .../spdx3/writer/json_ld/owl_to_context.py | 3 + .../data/json/single_package_example.json | 45 + tests/spdx3/data/json/spdx23_conversion.json | 644 ++++ tests/spdx3/full_workflow.py | 33 + tests/spdx3/parser/__init__.py | 0 tests/spdx3/parser/json/__init__.py | 0 tests/spdx3/parser/json/test_json_parser.py | 14 + 17 files changed, 2858 insertions(+), 1780 deletions(-) create mode 100644 src/spdx_tools/spdx3/parser/__init__.py create mode 100644 src/spdx_tools/spdx3/parser/json/__init__.py create mode 100644 src/spdx_tools/spdx3/parser/json/json_parser.py create mode 100644 src/spdx_tools/spdx3/parser/model_definition_dicts.py create mode 100644 tests/spdx3/data/json/single_package_example.json create mode 100644 tests/spdx3/data/json/spdx23_conversion.json create mode 100644 tests/spdx3/full_workflow.py create mode 100644 tests/spdx3/parser/__init__.py create mode 100644 tests/spdx3/parser/json/__init__.py create mode 100644 tests/spdx3/parser/json/test_json_parser.py diff --git a/src/spdx_tools/spdx3/bump_from_spdx2/package.py b/src/spdx_tools/spdx3/bump_from_spdx2/package.py index a7414d1b4..3d358babd 100644 --- a/src/spdx_tools/spdx3/bump_from_spdx2/package.py +++ b/src/spdx_tools/spdx3/bump_from_spdx2/package.py @@ -83,7 +83,9 @@ def bump_package( elif isinstance(id_or_ref, ExternalIdentifier): external_identifier.append(id_or_ref) - package_purpose = SoftwarePurpose[spdx2_package.primary_package_purpose.name] + package_purpose = ( + SoftwarePurpose[spdx2_package.primary_package_purpose.name] if spdx2_package.primary_package_purpose else None + ) payload.add_element( Package( diff --git a/src/spdx_tools/spdx3/model/hash.py b/src/spdx_tools/spdx3/model/hash.py index 42ef4ff4d..b52abd6d1 100644 --- a/src/spdx_tools/spdx3/model/hash.py +++ b/src/spdx_tools/spdx3/model/hash.py @@ -32,8 +32,8 @@ class HashAlgorithm(Enum): SHA3_512 = auto() SHA384 = auto() SHA512 = auto() - SPDXPVCSHA1 = auto() - SPDXPVCSHA256 = auto() + SPDX_PVC_SHA1 = auto() + SPDX_PVC_SHA256 = auto() SPHINCS_PLUS = auto() diff --git a/src/spdx_tools/spdx3/parser/__init__.py b/src/spdx_tools/spdx3/parser/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/spdx_tools/spdx3/parser/json/__init__.py b/src/spdx_tools/spdx3/parser/json/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/spdx_tools/spdx3/parser/json/json_parser.py b/src/spdx_tools/spdx3/parser/json/json_parser.py new file mode 100644 index 000000000..a431a7cf7 --- /dev/null +++ b/src/spdx_tools/spdx3/parser/json/json_parser.py @@ -0,0 +1,114 @@ +# SPDX-FileCopyrightText: 2022 spdx contributors +# +# SPDX-License-Identifier: Apache-2.0 +import json +from typing import Union + +from beartype.typing import Dict, List +from semantic_version import Version + +from spdx_tools.spdx3.model import HashAlgorithm +from spdx_tools.spdx3.parser.model_definition_dicts import ( + CLASS_DICT, + DATETIME_PROPERTIES, + ENUM_DICT, + KEYS_WITH_URI_VALUES, + SPECIALLY_TREATED_KEYS, + VERSION_PROPERTIES, +) +from spdx_tools.spdx3.payload import Payload +from spdx_tools.spdx.casing_tools import camel_case_to_snake_case +from spdx_tools.spdx.datetime_conversions import datetime_from_str + + +def parse_from_file(file_name: str) -> Payload: + with open(file_name) as file: + input_as_dict: Dict = json.load(file) + + context = input_as_dict["@context"] + custom_context = {} + if isinstance(context, list): + for entry in context: + if isinstance(entry, dict): + custom_context.update(entry) + + if "@graph" in input_as_dict: + payload = parse_list_of_elements(input_as_dict["@graph"], custom_context) + else: # in case of only a single serialized element + input_as_dict.pop("@context") + payload = Payload() + payload.add_element(parse_element_object(input_as_dict, custom_context)) + + return payload + + +def parse_list_of_elements(list_of_elements: List[Dict], custom_context: Dict): + payload = Payload() + for element_object in list_of_elements: + payload.add_element(parse_element_object(element_object, custom_context)) + return payload + + +def parse_element_object(element_object: Union[Dict, str], custom_context: Dict): + if isinstance(element_object, str): + return element_object + + element_properties = {} + if "@id" in element_object: + element_properties["spdx_id"] = expand_uri(element_object.pop("@id"), custom_context) + + element_type = element_object.pop("type") + + for key, value in element_object.items(): + if key in ENUM_DICT: + value = parse_enum_property(key, value) + elif isinstance(value, dict): + value = parse_element_object(value, custom_context) + elif isinstance(value, list): + value = [parse_element_object(entry, custom_context) for entry in value] + elif key in VERSION_PROPERTIES: + value = Version(value) + elif key in DATETIME_PROPERTIES: + value = datetime_from_str(value) + + if key in KEYS_WITH_URI_VALUES: + if isinstance(value, list): + value = [expand_uri(entry, custom_context) for entry in value] + else: + value = expand_uri(value, custom_context) + + if key in SPECIALLY_TREATED_KEYS: + element_properties[SPECIALLY_TREATED_KEYS[key]] = value + else: + element_properties[camel_case_to_snake_case(key)] = value + + if element_type not in CLASS_DICT: + raise ValueError(f"element type {element_type} not found in CLASS_DICT. Maybe it was forgotten?") + return CLASS_DICT[element_type](**element_properties) + + +def expand_uri(spdx_id, custom_context): + if ":" in spdx_id: + prefix, suffix = spdx_id.split(":", 1) + if prefix in custom_context and not suffix.startswith("//"): + spdx_id = custom_context[prefix] + suffix + return spdx_id + + +def parse_enum_property(key: str, value: str): + enum_class = ENUM_DICT[key] + if enum_class == HashAlgorithm: + return parse_hash_algorithm(value) + if isinstance(value, str): + return enum_class[camel_case_to_snake_case(value).upper()] + elif isinstance(value, list): + return [enum_class[camel_case_to_snake_case(entry).upper()] for entry in value] + else: + raise ValueError(f"unrecognized Enum property: {key}: {value}") + + +def parse_hash_algorithm(value: str): + if value.startswith("blake"): + return HashAlgorithm[value.upper()] + + return HashAlgorithm[camel_case_to_snake_case(value).upper()] diff --git a/src/spdx_tools/spdx3/parser/model_definition_dicts.py b/src/spdx_tools/spdx3/parser/model_definition_dicts.py new file mode 100644 index 000000000..05bb5b1e8 --- /dev/null +++ b/src/spdx_tools/spdx3/parser/model_definition_dicts.py @@ -0,0 +1,102 @@ +# SPDX-FileCopyrightText: 2023 spdx contributors +# +# SPDX-License-Identifier: Apache-2.0 +from spdx_tools.spdx3.model import ( + Agent, + Annotation, + AnnotationType, + Bom, + Bundle, + CreationInfo, + ExternalIdentifier, + ExternalIdentifierType, + ExternalMap, + ExternalReference, + ExternalReferenceType, + Hash, + HashAlgorithm, + LifecycleScopedRelationship, + LifecycleScopeType, + NamespaceMap, + Organization, + Person, + ProfileIdentifier, + Relationship, + RelationshipCompleteness, + RelationshipType, + SoftwareAgent, + SpdxDocument, + Tool, +) +from spdx_tools.spdx3.model.ai import AIPackage +from spdx_tools.spdx3.model.build import Build +from spdx_tools.spdx3.model.dataset import Dataset +from spdx_tools.spdx3.model.positive_integer_range import PositiveIntegerRange +from spdx_tools.spdx3.model.software import ( + DependencyConditionalityType, + File, + Package, + Sbom, + SBOMType, + Snippet, + SoftwareDependencyLinkType, + SoftwareDependencyRelationship, + SoftwarePurpose, +) + +CLASS_DICT = { + "Agent": Agent, + "AIPackage": AIPackage, + "Annotation": Annotation, + "Bom": Bom, + "Build": Build, + "Bundle": Bundle, + "CreationInfo": CreationInfo, + "Dataset": Dataset, + "ExternalIdentifier": ExternalIdentifier, + "ExternalMap": ExternalMap, + "ExternalReference": ExternalReference, + "File": File, + "Hash": Hash, + "LifecycleScopedRelationship": LifecycleScopedRelationship, + "NamespaceMap": NamespaceMap, + "Organization": Organization, + "Package": Package, + "Person": Person, + "PositiveIntegerRange": PositiveIntegerRange, + "Relationship": Relationship, + "Sbom": Sbom, + "Snippet": Snippet, + "SoftwareAgent": SoftwareAgent, + "SoftwareDependencyRelationship": SoftwareDependencyRelationship, + "SpdxDocument": SpdxDocument, + "Tool": Tool, +} +ENUM_DICT = { + "algorithm": HashAlgorithm, + "annotationType": AnnotationType, + "completeness": RelationshipCompleteness, + "conditionality": DependencyConditionalityType, + "externalIdentifierType": ExternalIdentifierType, + "externalReferenceType": ExternalReferenceType, + "profile": ProfileIdentifier, + "primaryPurpose": SoftwarePurpose, + "additionalPurpose": SoftwarePurpose, + "relationshipType": RelationshipType, + "sbomType": SBOMType, + "scope": LifecycleScopeType, + "softwareLinkage": SoftwareDependencyLinkType, +} +SPECIALLY_TREATED_KEYS = {"from": "from_element"} +KEYS_WITH_URI_VALUES = [ + "createdBy", + "createdUsing", + "dataLicense", + "from", + "originatedBy", + "subject", + "suppliedBy", + "to", +] +DATETIME_PROPERTIES = ["created", "builtTime", "releaseTime", "validUntilTime"] +VERSION_PROPERTIES = ["specVersion"] diff --git a/src/spdx_tools/spdx3/writer/json_ld/SPDX_OWL.json b/src/spdx_tools/spdx3/writer/json_ld/SPDX_OWL.json index 96e744e79..77e0b975a 100644 --- a/src/spdx_tools/spdx3/writer/json_ld/SPDX_OWL.json +++ b/src/spdx_tools/spdx3/writer/json_ld/SPDX_OWL.json @@ -4,6 +4,7 @@ "build": "https://spdx.org/rdf/Build/", "core": "https://spdx.org/rdf/Core/", "dataset": "https://spdx.org/rdf/Dataset/", + "expandedlicense": "https://spdx.org/rdf/ExpandedLicense/", "licensing": "https://spdx.org/rdf/Licensing/", "ns0": "http://www.w3.org/2003/06/sw-vocab-status/ns#", "owl": "http://www.w3.org/2002/07/owl#", @@ -27,196 +28,196 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "core:DictionaryEntry" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:name": "metric", + "sh:maxCount": 1, + "sh:name": "limitation", "sh:path": { - "@id": "ai:metric" + "@id": "ai:limitation" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:name": "modelExplainability", + "sh:name": "typeOfModel", "sh:path": { - "@id": "ai:modelExplainability" + "@id": "ai:typeOfModel" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:name": "domain", + "sh:maxCount": 1, + "sh:name": "informationAboutApplication", "sh:path": { - "@id": "ai:domain" + "@id": "ai:informationAboutApplication" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:name": "standardCompliance", + "sh:name": "domain", "sh:path": { - "@id": "ai:standardCompliance" + "@id": "ai:domain" } }, { - "sh:class": { - "@id": "core:DictionaryEntry" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:name": "hyperparameter", + "sh:name": "modelExplainability", "sh:path": { - "@id": "ai:hyperparameter" + "@id": "ai:modelExplainability" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "ai:SafetyRiskAssessmentType" }, "sh:maxCount": 1, - "sh:name": "energyConsumption", + "sh:name": "safetyRiskAssessment", "sh:path": { - "@id": "ai:energyConsumption" + "@id": "ai:safetyRiskAssessment" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:DictionaryEntry" }, - "sh:maxCount": 1, - "sh:name": "limitation", + "sh:name": "metricDecisionThreshold", "sh:path": { - "@id": "ai:limitation" + "@id": "ai:metricDecisionThreshold" } }, { - "sh:class": { - "@id": "ai:SafetyRiskAssessmentType" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:name": "safetyRiskAssessment", + "sh:name": "modelDataPreprocessing", "sh:path": { - "@id": "ai:safetyRiskAssessment" + "@id": "ai:modelDataPreprocessing" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:DictionaryEntry" }, - "sh:name": "modelDataPreprocessing", + "sh:name": "hyperparameter", "sh:path": { - "@id": "ai:modelDataPreprocessing" + "@id": "ai:hyperparameter" } }, { - "sh:class": { + "sh:datatype": { "@id": "ai:PresenceType" }, "sh:maxCount": 1, - "sh:name": "sensitivePersonalInformation", + "sh:name": "autonomyType", "sh:path": { - "@id": "ai:sensitivePersonalInformation" + "@id": "ai:autonomyType" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:DictionaryEntry" }, - "sh:maxCount": 1, - "sh:name": "informationAboutTraining", + "sh:name": "metric", "sh:path": { - "@id": "ai:informationAboutTraining" + "@id": "ai:metric" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:name": "informationAboutApplication", + "sh:name": "standardCompliance", "sh:path": { - "@id": "ai:informationAboutApplication" + "@id": "ai:standardCompliance" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:name": "typeOfModel", + "sh:maxCount": 1, + "sh:name": "energyConsumption", "sh:path": { - "@id": "ai:typeOfModel" + "@id": "ai:energyConsumption" } }, { - "sh:class": { - "@id": "ai:PresenceType" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "autonomyType", + "sh:name": "informationAboutTraining", "sh:path": { - "@id": "ai:autonomyType" + "@id": "ai:informationAboutTraining" } }, { - "sh:class": { - "@id": "core:DictionaryEntry" + "sh:datatype": { + "@id": "ai:PresenceType" }, - "sh:name": "metricDecisionThreshold", + "sh:maxCount": 1, + "sh:name": "sensitivePersonalInformation", "sh:path": { - "@id": "ai:metricDecisionThreshold" + "@id": "ai:sensitivePersonalInformation" } } ] }, { - "@id": "https://spdx.org/rdf/AI/PresenceType/no", + "@id": "ai:high", "@type": [ "owl:NamedIndividual", - "ai:PresenceType" + "ai:SafetyRiskAssessmentType" ] }, { - "@id": "https://spdx.org/rdf/AI/PresenceType/noAssertion", + "@id": "ai:low", "@type": [ "owl:NamedIndividual", - "ai:PresenceType" + "ai:SafetyRiskAssessmentType" ] }, { - "@id": "https://spdx.org/rdf/AI/PresenceType/yes", + "@id": "ai:medium", "@type": [ "owl:NamedIndividual", - "ai:PresenceType" + "ai:SafetyRiskAssessmentType" ] }, { - "@id": "https://spdx.org/rdf/AI/SafetyRiskAssessmentType/high", + "@id": "ai:no", "@type": [ "owl:NamedIndividual", - "ai:SafetyRiskAssessmentType" + "ai:PresenceType" ] }, { - "@id": "https://spdx.org/rdf/AI/SafetyRiskAssessmentType/low", + "@id": "ai:noAssertion", "@type": [ "owl:NamedIndividual", - "ai:SafetyRiskAssessmentType" + "ai:PresenceType" ] }, { - "@id": "https://spdx.org/rdf/AI/SafetyRiskAssessmentType/medium", + "@id": "ai:serious", "@type": [ "owl:NamedIndividual", "ai:SafetyRiskAssessmentType" ] }, { - "@id": "https://spdx.org/rdf/AI/SafetyRiskAssessmentType/serious", + "@id": "ai:yes", "@type": [ "owl:NamedIndividual", - "ai:SafetyRiskAssessmentType" + "ai:PresenceType" ] }, { @@ -232,7 +233,7 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { + "sh:datatype": { "@id": "core:Hash" }, "sh:name": "configSourceDigest", @@ -242,11 +243,11 @@ }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "xsd:string" }, - "sh:name": "configSourceUri", + "sh:name": "configSourceEntrypoint", "sh:path": { - "@id": "build:configSourceUri" + "@id": "build:configSourceEntrypoint" } }, { @@ -259,15 +260,6 @@ "@id": "build:buildId" } }, - { - "sh:class": { - "@id": "core:DictionaryEntry" - }, - "sh:name": "parameters", - "sh:path": { - "@id": "build:parameters" - } - }, { "sh:datatype": { "@id": "core:DateTime" @@ -280,21 +272,29 @@ }, { "sh:datatype": { - "@id": "core:DateTime" + "@id": "core:DictionaryEntry" }, - "sh:maxCount": 1, - "sh:name": "buildStartTime", + "sh:name": "environment", "sh:path": { - "@id": "build:buildStartTime" + "@id": "build:environment" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:DictionaryEntry" }, - "sh:name": "environment", + "sh:name": "parameters", "sh:path": { - "@id": "build:environment" + "@id": "build:parameters" + } + }, + { + "sh:datatype": { + "@id": "xsd:anyURI" + }, + "sh:name": "configSourceUri", + "sh:path": { + "@id": "build:configSourceUri" } }, { @@ -310,11 +310,12 @@ }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:DateTime" }, - "sh:name": "configSourceEntrypoint", + "sh:maxCount": 1, + "sh:name": "buildStartTime", "sh:path": { - "@id": "build:configSourceEntrypoint" + "@id": "build:buildStartTime" } } ] @@ -333,16 +334,17 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:AnnotationType" }, "sh:maxCount": 1, - "sh:name": "statement", + "sh:minCount": 1, + "sh:name": "annotationType", "sh:path": { - "@id": "core:statement" + "@id": "core:annotationType" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:Element" }, "sh:maxCount": 1, @@ -362,32 +364,17 @@ } }, { - "sh:class": { - "@id": "core:AnnotationType" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "annotationType", + "sh:name": "statement", "sh:path": { - "@id": "core:annotationType" + "@id": "core:statement" } } ] }, - { - "@id": "https://spdx.org/rdf/Core/AnnotationType/other", - "@type": [ - "owl:NamedIndividual", - "core:AnnotationType" - ] - }, - { - "@id": "https://spdx.org/rdf/Core/AnnotationType/review", - "@type": [ - "owl:NamedIndividual", - "core:AnnotationType" - ] - }, { "@id": "core:AnonymousPayload", "@type": [ @@ -401,26 +388,26 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "core:CreationInfo" + "sh:datatype": { + "@id": "core:NamespaceMap" }, - "sh:maxCount": 1, - "sh:name": "creationInfo", + "sh:name": "namespaces", "sh:path": { - "@id": "core:creationInfo" + "@id": "core:namespaces" } }, { - "sh:class": { - "@id": "core:NamespaceMap" + "sh:datatype": { + "@id": "core:CreationInfo" }, - "sh:name": "namespaces", + "sh:maxCount": 1, + "sh:name": "creationInfo", "sh:path": { - "@id": "core:namespaces" + "@id": "core:creationInfo" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:ExternalMap" }, "sh:name": "imports", @@ -431,1030 +418,1109 @@ ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/cpe22", + "@id": "core:Organization", "@type": [ - "owl:NamedIndividual", - "core:ExternalIdentifierType" - ] + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "An Organization is a group of people who work together in an organized way for a shared purpose.", + "rdfs:subClassOf": { + "@id": "core:Agent" + }, + "ns0:term_status": "Stable" }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/cpe23", + "@id": "core:Person", "@type": [ - "owl:NamedIndividual", - "core:ExternalIdentifierType" - ] + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "A Person is an individual human being.", + "rdfs:subClassOf": { + "@id": "core:Agent" + }, + "ns0:term_status": "Stable" }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/cve", + "@id": "core:SoftwareAgent", "@type": [ - "owl:NamedIndividual", - "core:ExternalIdentifierType" - ] + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "A SoftwareAgent is a software program that is given the authority (similar to a user's authority) to act on a system.", + "rdfs:subClassOf": { + "@id": "core:Agent" + }, + "ns0:term_status": "Stable" }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/email", + "@id": "core:SpdxDocument", "@type": [ - "owl:NamedIndividual", - "core:ExternalIdentifierType" - ] + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "An SpdxDocument assembles a collection of Elements under a common string, the name of the document.\nCommonly used when representing a unit of transfer of SPDX Elements.\nExternal property restriction on /Core/Element/name: minCount: 1", + "rdfs:subClassOf": { + "@id": "core:Bundle" + }, + "ns0:term_status": "Stable", + "sh:property": { + "sh:datatype": { + "@id": "xsd:string" + }, + "sh:maxCount": 1, + "sh:minCount": 1, + "sh:name": "name", + "sh:path": { + "@id": "core:name" + } + } }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/gitoid", + "@id": "core:affects", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/other", + "@id": "core:ai", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/pkgUrl", + "@id": "core:altDownloadLocation", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/securityOther", + "@id": "core:altWebPage", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/swhid", + "@id": "core:amends", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/swid", + "@id": "core:ancestor", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalIdentifierType/urlScheme", + "@id": "core:availableFrom", "@type": [ "owl:NamedIndividual", - "core:ExternalIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/altDownloadLocation", + "@id": "core:binaryArtifact", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/altWebPage", + "@id": "core:blake2b256", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/binaryArtifact", + "@id": "core:blake2b384", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/buildMeta", + "@id": "core:blake2b512", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/buildSystem", + "@id": "core:blake3", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/chat", + "@id": "core:build", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:LifecycleScopeType", + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/documentation", + "@id": "core:buildDependency", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/funding", + "@id": "core:buildMeta", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/issueTracker", + "@id": "core:buildSystem", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/license", + "@id": "core:buildTool", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/mailingList", + "@id": "core:certificationReport", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/metrics", + "@id": "core:chat", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/other", + "@id": "core:complete", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipCompleteness" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/releaseHistory", + "@id": "core:componentAnalysisReport", "@type": [ "owl:NamedIndividual", "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/releaseNotes", + "@id": "core:configOf", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/securityAdvisory", + "@id": "core:contains", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/securityFix", + "@id": "core:coordinatedBy", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/securityOther", + "@id": "core:copy", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/socialMedia", + "@id": "core:core", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/sourceArtifact", + "@id": "core:cpe22", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/support", + "@id": "core:cpe23", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ExternalReferenceType/vcs", + "@id": "core:crystalsDilithium", "@type": [ "owl:NamedIndividual", - "core:ExternalReferenceType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/blake2b256", + "@id": "core:crystalsKyber", "@type": [ "owl:NamedIndividual", "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/blake2b384", + "@id": "core:cve", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/blake2b512", + "@id": "core:dataFile", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/blake3", + "@id": "core:dataset", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/crystalsDilithium", + "@id": "core:dependencyManifest", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/crystalsKyber", + "@id": "core:dependsOn", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/falcon", + "@id": "core:descendant", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/md2", + "@id": "core:describes", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/md4", + "@id": "core:design", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:LifecycleScopeType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/md5", + "@id": "core:devDependency", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/md6", + "@id": "core:devTool", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/other", + "@id": "core:development", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:LifecycleScopeType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha1", + "@id": "core:distributionArtifact", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha224", + "@id": "core:documentation", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ExternalReferenceType", + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha256", + "@id": "core:doesNotAffect", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha384", + "@id": "core:dynamicAnalysisReport", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha3_224", + "@id": "core:dynamicLink", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha3_256", + "@id": "core:email", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha3_384", + "@id": "core:eolNotice", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha3_512", + "@id": "core:evidenceFor", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sha512", + "@id": "core:example", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/spdxPvcSha1", + "@id": "core:expandedFromArchive", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/spdxPvcSha256", + "@id": "core:exploitCreatedBy", "@type": [ "owl:NamedIndividual", - "core:HashAlgorithm" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/HashAlgorithm/sphincsPlus", + "@id": "core:falcon", "@type": [ "owl:NamedIndividual", "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/build", + "@id": "core:fileAdded", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/design", + "@id": "core:fileDeleted", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/development", + "@id": "core:fileModified", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/other", + "@id": "core:fixedBy", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/runtime", + "@id": "core:fixedIn", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/LifecycleScopeType/test", + "@id": "core:foundBy", "@type": [ "owl:NamedIndividual", - "core:LifecycleScopeType" + "core:RelationshipType" ] }, { - "@id": "core:Organization", + "@id": "core:funding", "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "An Organization is a group of people who work together in an organized way for a shared purpose.", - "rdfs:subClassOf": { - "@id": "core:Agent" - }, - "ns0:term_status": "Stable" + "owl:NamedIndividual", + "core:ExternalReferenceType" + ] }, { - "@id": "core:Person", + "@id": "core:generates", "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A Person is an individual human being.", - "rdfs:subClassOf": { - "@id": "core:Agent" - }, - "ns0:term_status": "Stable" + "owl:NamedIndividual", + "core:RelationshipType" + ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/ai", + "@id": "core:gitoid", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/build", + "@id": "core:hasAssessmentFor", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/core", + "@id": "core:hasAssociatedVulnerability", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/dataset", + "@id": "core:hostOf", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/extension", + "@id": "core:incomplete", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipCompleteness" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/licensing", + "@id": "core:inputOf", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/security", + "@id": "core:invokedBy", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/software", + "@id": "core:issueTracker", "@type": [ "owl:NamedIndividual", - "core:ProfileIdentifierType" + "core:ExternalReferenceType" + ] + }, + { + "@id": "core:license", + "@type": [ + "owl:NamedIndividual", + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/ProfileIdentifierType/usage", + "@id": "core:licensing", "@type": [ "owl:NamedIndividual", "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipCompleteness/complete", + "@id": "core:mailingList", "@type": [ "owl:NamedIndividual", - "core:RelationshipCompleteness" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipCompleteness/incomplete", + "@id": "core:md2", "@type": [ "owl:NamedIndividual", - "core:RelationshipCompleteness" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipCompleteness/noAssertion", + "@id": "core:md4", "@type": [ "owl:NamedIndividual", - "core:RelationshipCompleteness" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/affects", + "@id": "core:md5", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/amends", + "@id": "core:md6", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/ancestor", + "@id": "core:metafile", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/availableFrom", + "@id": "core:metrics", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildConfigOf", + "@id": "core:noAssertion", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:RelationshipCompleteness" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildDependency", + "@id": "core:onBehalfOf", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildHostOf", + "@id": "core:optionalComponent", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildInputOf", + "@id": "core:optionalDependency", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildInvokedBy", + "@id": "core:other", "@type": [ "owl:NamedIndividual", + "core:AnnotationType", + "core:ExternalIdentifierType", + "core:ExternalReferenceType", + "core:HashAlgorithm", + "core:LifecycleScopeType", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildOnBehalfOf", + "@id": "core:outputOf", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildOutputOf", + "@id": "core:packages", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/buildTool", + "@id": "core:patch", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/contains", + "@id": "core:pkgUrl", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/coordinatedBy", + "@id": "core:prerequisite", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/copy", + "@id": "core:productMetadata", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/dataFile", + "@id": "core:providedDependency", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/dependencyManifest", + "@id": "core:publishedBy", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/dependsOn", + "@id": "core:qualityAssessmentReport", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/descendant", + "@id": "core:releaseHistory", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/describes", + "@id": "core:releaseNotes", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/devDependency", + "@id": "core:reportedBy", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/devTool", + "@id": "core:republishedBy", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/distributionArtifact", + "@id": "core:requirementFor", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/documentation", + "@id": "core:review", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:AnnotationType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/doesNotAffect", + "@id": "core:riskAssessment", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/dynamicLink", + "@id": "core:runtime", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:LifecycleScopeType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/example", + "@id": "core:runtimeAnalysisReport", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/expandedFromArchive", + "@id": "core:runtimeDependency", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/exploitCreatedBy", + "@id": "core:secureSoftwareAttestation", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/fileAdded", + "@id": "core:security", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/fileDeleted", + "@id": "core:securityAdversaryModel", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/fileModified", + "@id": "core:securityAdvisory", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/fixedBy", + "@id": "core:securityFix", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/fixedIn", + "@id": "core:securityOther", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalIdentifierType", + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/foundBy", + "@id": "core:securityPenTestReport", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/generates", + "@id": "core:securityPolicy", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/hasAssessmentFor", + "@id": "core:securityThreatModel", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/hasAssociatedVulnerability", + "@id": "core:sha1", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/metafile", + "@id": "core:sha224", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/optionalComponent", + "@id": "core:sha256", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/optionalDependency", + "@id": "core:sha384", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/other", + "@id": "core:sha3_224", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/packages", + "@id": "core:sha3_256", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/patch", + "@id": "core:sha3_384", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/prerequisite", + "@id": "core:sha3_512", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/providedDependency", + "@id": "core:sha512", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/publishedBy", + "@id": "core:socialMedia", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/reportedBy", + "@id": "core:software", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/republishedBy", + "@id": "core:sourceArtifact", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/requirementFor", + "@id": "core:spdxPvcSha1", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/runtimeDependency", + "@id": "core:spdxPvcSha256", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/specificationFor", + "@id": "core:specificationFor", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/staticLink", + "@id": "core:sphincsPlus", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:HashAlgorithm" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/test", + "@id": "core:staticAnalysisReport", "@type": [ "owl:NamedIndividual", - "core:RelationshipType" + "core:ExternalReferenceType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/testCase", + "@id": "core:staticLink", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/testDependency", + "@id": "core:support", + "@type": [ + "owl:NamedIndividual", + "core:ExternalReferenceType" + ] + }, + { + "@id": "core:swhid", + "@type": [ + "owl:NamedIndividual", + "core:ExternalIdentifierType" + ] + }, + { + "@id": "core:swid", + "@type": [ + "owl:NamedIndividual", + "core:ExternalIdentifierType" + ] + }, + { + "@id": "core:test", "@type": [ "owl:NamedIndividual", + "core:LifecycleScopeType", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/testTool", + "@id": "core:testCase", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/underInvestigationFor", + "@id": "core:testDependency", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Core/RelationshipType/variant", + "@id": "core:testTool", "@type": [ "owl:NamedIndividual", "core:RelationshipType" ] }, { - "@id": "core:SoftwareAgent", + "@id": "core:testedOn", "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A SoftwareAgent is a software program that is given the authority (similar to a user's authority) to act on a system.", - "rdfs:subClassOf": { - "@id": "core:Agent" - }, - "ns0:term_status": "Stable" + "owl:NamedIndividual", + "core:RelationshipType" + ] }, { - "@id": "core:SpdxDocument", + "@id": "core:trainedOn", "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "An SpdxDocument assembles a collection of Elements under a common string, the name of the document.\nCommonly used when representing a unit of transfer of SPDX Elements.\nExternal property restriction on /Core/Element/name: minCount: 1", - "rdfs:subClassOf": { - "@id": "core:Bundle" - }, - "ns0:term_status": "Stable", - "sh:property": { - "sh:datatype": { - "@id": "xsd:string" - }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "name", - "sh:path": { - "@id": "core:name" - } - } + "owl:NamedIndividual", + "core:RelationshipType" + ] }, { - "@id": "https://spdx.org/rdf/Dataset/ConfidentialityLevelType/Amber", + "@id": "core:underInvestigationFor", "@type": [ "owl:NamedIndividual", - "dataset:ConfidentialityLevelType" + "core:RelationshipType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/ConfidentialityLevelType/Clear", + "@id": "core:urlScheme", "@type": [ "owl:NamedIndividual", - "dataset:ConfidentialityLevelType" + "core:ExternalIdentifierType" + ] + }, + { + "@id": "core:usage", + "@type": [ + "owl:NamedIndividual", + "core:ProfileIdentifierType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/ConfidentialityLevelType/Green", + "@id": "core:variant", + "@type": [ + "owl:NamedIndividual", + "core:RelationshipType" + ] + }, + { + "@id": "core:vcs", + "@type": [ + "owl:NamedIndividual", + "core:ExternalReferenceType" + ] + }, + { + "@id": "core:vulnerabilityDisclosureReport", + "@type": [ + "owl:NamedIndividual", + "core:ExternalReferenceType" + ] + }, + { + "@id": "core:vulnerabilityExploitabilityAssessment", + "@type": [ + "owl:NamedIndividual", + "core:ExternalReferenceType" + ] + }, + { + "@id": "dataset:Amber", "@type": [ "owl:NamedIndividual", "dataset:ConfidentialityLevelType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/ConfidentialityLevelType/Red", + "@id": "dataset:Clear", "@type": [ "owl:NamedIndividual", "dataset:ConfidentialityLevelType" ] }, + { + "@id": "dataset:Clickthrough", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetAvailabilityType" + ] + }, { "@id": "dataset:Dataset", "@type": [ @@ -1468,17 +1534,17 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "dataset:DatasetAvailabilityType" + "sh:datatype": { + "@id": "xsd:nonNegativeInteger" }, "sh:maxCount": 1, - "sh:name": "datasetAvailability", + "sh:name": "datasetSize", "sh:path": { - "@id": "dataset:datasetAvailability" + "@id": "dataset:datasetSize" } }, { - "sh:class": { + "sh:datatype": { "@id": "dataset:ConfidentialityLevelType" }, "sh:maxCount": 1, @@ -1491,10 +1557,9 @@ "sh:datatype": { "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:name": "dataCollectionProcess", + "sh:name": "knownBias", "sh:path": { - "@id": "dataset:dataCollectionProcess" + "@id": "dataset:knownBias" } }, { @@ -1502,28 +1567,29 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "datasetUpdateMechanism", + "sh:name": "intendedUse", "sh:path": { - "@id": "dataset:datasetUpdateMechanism" + "@id": "dataset:intendedUse" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "dataset:DatasetType" }, - "sh:name": "knownBias", + "sh:minCount": 1, + "sh:name": "datasetType", "sh:path": { - "@id": "dataset:knownBias" + "@id": "dataset:datasetType" } }, { "sh:datatype": { - "@id": "xsd:nonNegativeInteger" + "@id": "dataset:DatasetAvailabilityType" }, "sh:maxCount": 1, - "sh:name": "datasetSize", + "sh:name": "datasetAvailability", "sh:path": { - "@id": "dataset:datasetSize" + "@id": "dataset:datasetAvailability" } }, { @@ -1531,28 +1597,27 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "intendedUse", + "sh:name": "datasetUpdateMechanism", "sh:path": { - "@id": "dataset:intendedUse" + "@id": "dataset:datasetUpdateMechanism" } }, { "sh:datatype": { - "@id": "dataset:PresenceType" + "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:name": "sensitivePersonalInformation", + "sh:name": "dataPreprocessing", "sh:path": { - "@id": "dataset:sensitivePersonalInformation" + "@id": "dataset:dataPreprocessing" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:DictionaryEntry" }, - "sh:name": "dataPreprocessing", + "sh:name": "sensor", "sh:path": { - "@id": "dataset:dataPreprocessing" + "@id": "dataset:sensor" } }, { @@ -1560,79 +1625,177 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "datasetNoise", + "sh:name": "dataCollectionProcess", "sh:path": { - "@id": "dataset:datasetNoise" + "@id": "dataset:dataCollectionProcess" } }, { - "sh:class": { - "@id": "core:DictionaryEntry" + "sh:datatype": { + "@id": "dataset:PresenceType" }, - "sh:name": "sensor", + "sh:maxCount": 1, + "sh:name": "sensitivePersonalInformation", "sh:path": { - "@id": "dataset:sensor" + "@id": "dataset:sensitivePersonalInformation" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "datasetType", + "sh:name": "anonymizationMethodUsed", "sh:path": { - "@id": "dataset:datasetType" + "@id": "dataset:anonymizationMethodUsed" } }, { "sh:datatype": { "@id": "xsd:string" }, - "sh:name": "anonymizationMethodUsed", + "sh:maxCount": 1, + "sh:name": "datasetNoise", "sh:path": { - "@id": "dataset:anonymizationMethodUsed" + "@id": "dataset:datasetNoise" } } ] }, { - "@id": "https://spdx.org/rdf/Dataset/DatasetAvailabilityType/Clickthrough", + "@id": "dataset:Direct-Download", "@type": [ "owl:NamedIndividual", "dataset:DatasetAvailabilityType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/DatasetAvailabilityType/Direct-Download", + "@id": "dataset:Green", "@type": [ "owl:NamedIndividual", - "dataset:DatasetAvailabilityType" + "dataset:ConfidentialityLevelType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/DatasetAvailabilityType/Query", + "@id": "dataset:Query", "@type": [ "owl:NamedIndividual", "dataset:DatasetAvailabilityType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/DatasetAvailabilityType/Registration", + "@id": "dataset:Red", + "@type": [ + "owl:NamedIndividual", + "dataset:ConfidentialityLevelType" + ] + }, + { + "@id": "dataset:Registration", "@type": [ "owl:NamedIndividual", "dataset:DatasetAvailabilityType" ] }, { - "@id": "https://spdx.org/rdf/Dataset/DatasetAvailabilityType/Scraping-Script", + "@id": "dataset:Scraping-Script", "@type": [ "owl:NamedIndividual", "dataset:DatasetAvailabilityType" ] }, { - "@id": "licensing:ConjunctiveLicenseSet", + "@id": "dataset:audio", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:categorical", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:graph", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:image", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:noAssertion", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:numeric", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:other", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:structured", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:syntactic", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:text", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:timeseries", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:timestamp", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "dataset:video", + "@type": [ + "owl:NamedIndividual", + "dataset:DatasetType" + ] + }, + { + "@id": "expandedlicense:ConjunctiveLicenseSet", "@type": [ "owl:Class", "sh:NodeShape" @@ -1643,16 +1806,68 @@ }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { + "sh:datatype": { + "@id": "licensing:AnyLicenseInfo" + }, + "sh:minCount": 2, + "sh:name": "member", + "sh:path": { + "@id": "expandedlicense:member" + } + } + }, + { + "@id": "expandedlicense:DisjunctiveLicenseSet", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "A DisjunctiveLicenseSet indicates that _only one_ of its subsidiary\nAnyLicenseInfos is required to apply. In other words, a\nDisjunctiveLicenseSet of two or more licenses represents a licensing\nsituation where _only one_ of the specified licenses are to be complied with.\nA consumer of SPDX data would typically understand this to permit the recipient\nof the licensed content to choose which of the corresponding license they\nwould prefer to use. It is represented in the SPDX License Expression Syntax\nby the `OR` operator.", + "rdfs:subClassOf": { + "@id": "licensing:AnyLicenseInfo" + }, + "ns0:term_status": "Stable", + "sh:property": { + "sh:datatype": { "@id": "licensing:AnyLicenseInfo" }, "sh:minCount": 2, "sh:name": "member", "sh:path": { - "@id": "licensing:member" + "@id": "expandedlicense:member" } } }, + { + "@id": "expandedlicense:ExtendableLicense", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "The WithAdditionOperator can have a License or an OrLaterOperator as the license property value. This class is used for the value.", + "rdfs:subClassOf": { + "@id": "licensing:AnyLicenseInfo" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "expandedlicense:subjectAddition", + "@type": "owl:ObjectProperty", + "rdfs:comment": "A subjectAddition is a LicenseAddition which is subject to a 'with additional\ntext' effect (WithAdditionOperator).", + "rdfs:range": { + "@id": "expandedlicense:LicenseAddition" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "expandedlicense:subjectLicense", + "@type": "owl:ObjectProperty", + "rdfs:comment": "A subjectLicense is a License which is subject to either an 'or later' effect\n(OrLaterOperator) or a 'with additional text' effect (WithAdditionOperator).", + "rdfs:range": { + "@id": "licensing:License" + }, + "ns0:term_status": "Stable" + }, { "@id": "licensing:CustomLicense", "@type": [ @@ -1678,24 +1893,25 @@ "ns0:term_status": "Stable" }, { - "@id": "licensing:DisjunctiveLicenseSet", + "@id": "licensing:LicenseExpression", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "A DisjunctiveLicenseSet indicates that _only one_ of its subsidiary\nAnyLicenseInfos is required to apply. In other words, a\nDisjunctiveLicenseSet of two or more licenses represents a licensing\nsituation where _only one_ of the specified licenses are to be complied with.\nA consumer of SPDX data would typically understand this to permit the recipient\nof the licensed content to choose which of the corresponding license they\nwould prefer to use. It is represented in the SPDX License Expression Syntax\nby the `OR` operator.", + "rdfs:comment": "Often a single license can be used to represent the licensing terms of a source code or binary file, but there are situations where a single license identifier is not sufficient. A common example is when software is offered under a choice of one or more licenses (e.g., GPL-2.0-only OR BSD-3-Clause). Another example is when a set of licenses is needed to represent a binary program constructed by compiling and linking two (or more) different source files each governed by different licenses (e.g., LGPL-2.1-only AND BSD-3-Clause).\n\nSPDX License Expressions provide a way for one to construct expressions that more accurately represent the licensing terms typically found in open source software source code. A license expression could be a single license identifier found on the SPDX License List; a user defined license reference denoted by the LicenseRef-idString; a license identifier combined with an SPDX exception; or some combination of license identifiers, license references and exceptions constructed using a small set of defined operators (e.g., AND, OR, WITH and +). We provide the definition of what constitutes a valid an SPDX License Expression in this section.", "rdfs:subClassOf": { "@id": "licensing:AnyLicenseInfo" }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { - "@id": "licensing:AnyLicenseInfo" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:minCount": 2, - "sh:name": "member", + "sh:maxCount": 1, + "sh:minCount": 1, + "sh:name": "licenseExpression", "sh:path": { - "@id": "licensing:member" + "@id": "licensing:licenseExpression" } } }, @@ -1716,9 +1932,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "deprecatedVersion", + "sh:name": "listVersionAdded", "sh:path": { - "@id": "licensing:deprecatedVersion" + "@id": "licensing:listVersionAdded" } }, { @@ -1726,9 +1942,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "listVersionAdded", + "sh:name": "deprecatedVersion", "sh:path": { - "@id": "licensing:listVersionAdded" + "@id": "licensing:deprecatedVersion" } } ] @@ -1750,9 +1966,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "deprecatedVersion", + "sh:name": "listVersionAdded", "sh:path": { - "@id": "licensing:deprecatedVersion" + "@id": "licensing:listVersionAdded" } }, { @@ -1760,37 +1976,13 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "listVersionAdded", + "sh:name": "deprecatedVersion", "sh:path": { - "@id": "licensing:listVersionAdded" + "@id": "licensing:deprecatedVersion" } } ] }, - { - "@id": "licensing:NoAssertionLicense", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A NoAssertionLicense is the primary value that is used by a concludedLicense\nor declaredLicense field that indicates that the SPDX data creator is making\nno assertion about the license information for the corresponding software\nPackage, File or Snippet.\n\nThe specific meaning of NoAssertionLicense in the context of a\nconcludedLicense or declaredLicense field is more fully set forth in the\nProperty definitions for those fields.", - "rdfs:subClassOf": { - "@id": "licensing:LicenseField" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:NoneLicense", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A NoneLicense is the primary value that is used by a concludedLicense or\ndeclaredLicense field that indicates the absence of license information from\nthe corresponding software Package, File or Snippet.\n\nThe specific meaning of NoneLicense in the context of a concludedLicense or\ndeclaredLicense field is more fully set forth in the Property definitions for\nthose fields.", - "rdfs:subClassOf": { - "@id": "licensing:LicenseField" - }, - "ns0:term_status": "Stable" - }, { "@id": "licensing:OrLaterOperator", "@type": [ @@ -1799,11 +1991,11 @@ ], "rdfs:comment": "An OrLaterOperator indicates that this portion of the AnyLicenseInfo\nrepresents either (1) the specified version of the corresponding License, or\n(2) any later version of that License. It is represented in the SPDX License\nExpression Syntax by the `+` operator.\n\nIt is context-dependent, and unspecified by SPDX, as to what constitutes a\n\"later version\" of any particular License. Some Licenses may not be versioned,\nor may not have clearly-defined ordering for versions. The consumer of SPDX\ndata will need to determine for themselves what meaning to attribute to a\n\"later version\" operator for a particular License.", "rdfs:subClassOf": { - "@id": "licensing:AnyLicenseInfo" + "@id": "licensing:ExtendableLicense" }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { + "sh:datatype": { "@id": "licensing:License" }, "sh:maxCount": 1, @@ -1827,29 +2019,92 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "licensing:License" + "sh:datatype": { + "@id": "licensing:LicenseAddition" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "subjectLicense", + "sh:name": "subjectAddition", "sh:path": { - "@id": "licensing:subjectLicense" + "@id": "licensing:subjectAddition" } }, { - "sh:class": { - "@id": "licensing:LicenseAddition" + "sh:datatype": { + "@id": "licensing:ExtendableLicense" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "subjectAddition", + "sh:name": "subjectLicense", "sh:path": { - "@id": "licensing:subjectAddition" + "@id": "licensing:subjectLicense" } } ] }, + { + "@id": "licensing:additionComment", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "An additionComment for a LicenseAddition describes general factual information\nabout the LicenseAddition. It should not contain information (or links to\ninformation) that includes any kind of interpretation about the meaning or\neffect of the License, even if written by the license addition's author.\n\nExamples of information for an additionComment may include the following:\n\n* If the LicenseAddition's identifier is deprecated, it may briefly explain the\n reason for deprecation.\n* It may include the date of release, if identified, for LicenseAdditions with\n multiple versions.\n* It may include links to other official language translations for the\n LicenseAddition.\n* It may include a reference to the License(s) with which this LicenseAddition\n is typically used.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:additionId", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "An additionId contains a human-readable, short-form identifier for a\nLicenseAddition. It may only include letters, numbers, period (\".\") and\nhyphen (\"-\") characters.\n\nFor a ListedLicenseException, the licenseId will be as specified on the\n[SPDX Exceptions List](https://spdx.org/licenses/exceptions-index.html) for the\nparticular exception.\n\nFor a CustomLicenseAddition, the short-form identifier must begin with the\nprefix `AdditionRef-` and must be unique within the applicable SPDX namespace.\nThe short-form identifier may be preceded by an SPDX namespace or a\nfully-qualified URI prefix.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:additionName", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "An additionName contains the full name of a LicenseAddition, preferably using\nthe title found in the applicable license addition text or file, or as\notherwise specified by the LicenseAddition's author or steward.\n\nWhen no such title is specified, using a name from another well-known source or list\nof licenses additions (such as OSI or Fedora) is suggested.\n\nIf no official or common name is known, any name may be used to aid in\ndistinguishing the LicenseAddition from other LicenseAdditions.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:licenseComment", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "A licenseComment describes general factual information about the License. It\nshould not contain information (or links to information) that includes any kind\nof interpretation about the meaning or effect of the License, even if written\nby the license's author.\n\nExamples of information for a licenseComment may include the following:\n\n* If the License's identifier is deprecated, it may briefly explain the reason\n for deprecation.\n* It may include the date of release, if identified, for Licenses with multiple\n versions.\n* It may include links to other official language translations for the License.\n* For LicenseAdditions, it may include a reference to the License(s) with\n which this additional text is typically used.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:licenseId", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "A licenseId contains a human-readable, short-form license identifier for a\nLicense. It may only include letters, numbers, period (\".\") and hyphen (\"-\")\ncharacters.\n\nFor a ListedLicense, the licenseId will be as specified on the\n[SPDX License List](https://spdx.org/licenses) for the particular license.\n\nFor a CustomLicense, the short-form license identifer must begin with the\nprefix `LicenseRef-` and must be unique within the applicable SPDX namespace.\nThe short-form license ID may be preceded by an SPDX namespace or a\nfully-qualified URI prefix.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:licenseName", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "A licenseName contains the full name of a License, preferably using the title found\nin the applicable license text or file, or as otherwise specified by the\nLicense's author or steward.\n\nWhen no such title is specified, using a name from another well-known source or list\nof licenses (such as OSI or Fedora) is suggested.\n\nIf no official or common name is known, any name may be used to aid in\ndistinguishing the License from other Licenses.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "licensing:seeAlso", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "A seeAlso defines a cross-reference with a URL where the License or\nLicenseAddition can be found in use by one or a few projects.\n\nIf applicable, it should include a URL where the license text is posted by\nthe license steward, particularly if the license steward has made available a\n\"canonical\" primary URL for the license text.\n\nIf the license is OSI approved, a seeAlso should be included with the URL for\nthe license's listing on the OSI website.\n\nThe seeAlso URL may refer to a previously-available URL for the License or\nLicenseAddition which is no longer active.\n\nWhere applicable, the seeAlso URL should include the license text in its\nnative language. seeAlso URLs to English or other translations may be included\nwhere multiple, equivalent official translations exist.", + "rdfs:range": { + "@id": "xsd:anyURI" + }, + "ns0:term_status": "Stable" + }, { "@id": "security:CvssV2VulnAssessmentRelationship", "@type": [ @@ -1864,23 +2119,23 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:decimal" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "score", + "sh:name": "severity", "sh:path": { - "@id": "security:score" + "@id": "security:severity" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:decimal" }, "sh:maxCount": 1, - "sh:name": "severity", + "sh:minCount": 1, + "sh:name": "score", "sh:path": { - "@id": "security:severity" + "@id": "security:score" } }, { @@ -1975,20 +2230,6 @@ } ] }, - { - "@id": "https://spdx.org/rdf/Security/ExploitCatalogType/kev", - "@type": [ - "owl:NamedIndividual", - "security:ExploitCatalogType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/ExploitCatalogType/other", - "@type": [ - "owl:NamedIndividual", - "security:ExploitCatalogType" - ] - }, { "@id": "security:ExploitCatalogVulnAssessmentRelationship", "@type": [ @@ -2003,67 +2244,39 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "xsd:boolean" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "locator", + "sh:name": "exploited", "sh:path": { - "@id": "security:locator" + "@id": "security:exploited" } }, { - "sh:class": { - "@id": "security:ExploitCatalogType" + "sh:datatype": { + "@id": "xsd:anyURI" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "catalogType", + "sh:name": "locator", "sh:path": { - "@id": "security:catalogType" + "@id": "security:locator" } }, { "sh:datatype": { - "@id": "xsd:boolean" + "@id": "security:ExploitCatalogType" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "exploited", + "sh:name": "catalogType", "sh:path": { - "@id": "security:exploited" + "@id": "security:catalogType" } } ] }, - { - "@id": "https://spdx.org/rdf/Security/SsvcDecisionType/act", - "@type": [ - "owl:NamedIndividual", - "security:SsvcDecisionType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/SsvcDecisionType/attend", - "@type": [ - "owl:NamedIndividual", - "security:SsvcDecisionType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/SsvcDecisionType/track", - "@type": [ - "owl:NamedIndividual", - "security:SsvcDecisionType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/SsvcDecisionType/trackStar", - "@type": [ - "owl:NamedIndividual", - "security:SsvcDecisionType" - ] - }, { "@id": "security:SsvcVulnAssessmentRelationship", "@type": [ @@ -2076,7 +2289,7 @@ }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { + "sh:datatype": { "@id": "security:SsvcDecisionType" }, "sh:maxCount": 1, @@ -2132,41 +2345,6 @@ }, "ns0:term_status": "Stable" }, - { - "@id": "https://spdx.org/rdf/Security/VexJustificationType/componentNotPresent", - "@type": [ - "owl:NamedIndividual", - "security:VexJustificationType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/VexJustificationType/inlineMitigationsAlreadyExist", - "@type": [ - "owl:NamedIndividual", - "security:VexJustificationType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/VexJustificationType/vulnerableCodeCannotBeControlledByAdversary", - "@type": [ - "owl:NamedIndividual", - "security:VexJustificationType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/VexJustificationType/vulnerableCodeNotInExecutePath", - "@type": [ - "owl:NamedIndividual", - "security:VexJustificationType" - ] - }, - { - "@id": "https://spdx.org/rdf/Security/VexJustificationType/vulnerableCodeNotPresent", - "@type": [ - "owl:NamedIndividual", - "security:VexJustificationType" - ] - }, { "@id": "security:VexNotAffectedVulnAssessmentRelationship", "@type": [ @@ -2190,23 +2368,23 @@ } }, { - "sh:class": { - "@id": "security:VexJustificationType" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "justificationType", + "sh:name": "impactStatement", "sh:path": { - "@id": "security:justificationType" + "@id": "security:impactStatement" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "security:VexJustificationType" }, "sh:maxCount": 1, - "sh:name": "impactStatement", + "sh:name": "justificationType", "sh:path": { - "@id": "security:impactStatement" + "@id": "security:justificationType" } } ] @@ -2240,9 +2418,9 @@ "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "publishedTime", + "sh:name": "modifiedTime", "sh:path": { - "@id": "security:publishedTime" + "@id": "security:modifiedTime" } }, { @@ -2250,9 +2428,9 @@ "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "modifiedTime", + "sh:name": "withdrawnTime", "sh:path": { - "@id": "security:modifiedTime" + "@id": "security:withdrawnTime" } }, { @@ -2260,111 +2438,111 @@ "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "withdrawnTime", + "sh:name": "publishedTime", "sh:path": { - "@id": "security:withdrawnTime" + "@id": "security:publishedTime" } } ] }, { - "@id": "https://spdx.org/rdf/Software/DependencyConditionalityType/optional", + "@id": "security:act", "@type": [ "owl:NamedIndividual", - "software:DependencyConditionalityType" + "security:SsvcDecisionType" ] }, { - "@id": "https://spdx.org/rdf/Software/DependencyConditionalityType/other", + "@id": "security:attend", "@type": [ "owl:NamedIndividual", - "software:DependencyConditionalityType" + "security:SsvcDecisionType" ] }, { - "@id": "https://spdx.org/rdf/Software/DependencyConditionalityType/prerequisite", + "@id": "security:componentNotPresent", "@type": [ "owl:NamedIndividual", - "software:DependencyConditionalityType" + "security:VexJustificationType" ] }, { - "@id": "https://spdx.org/rdf/Software/DependencyConditionalityType/provided", + "@id": "security:inlineMitigationsAlreadyExist", "@type": [ "owl:NamedIndividual", - "software:DependencyConditionalityType" + "security:VexJustificationType" ] }, { - "@id": "https://spdx.org/rdf/Software/DependencyConditionalityType/required", + "@id": "security:kev", "@type": [ "owl:NamedIndividual", - "software:DependencyConditionalityType" + "security:ExploitCatalogType" ] }, { - "@id": "software:File", + "@id": "security:other", "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "Refers to any object that stores content on a computer.\nThe type of content can optionally be provided in the contentType property.\nExternal property restriction on /Core/Element/name: minCount: 1", - "rdfs:subClassOf": { - "@id": "software:SoftwareArtifact" - }, - "ns0:term_status": "Stable", - "sh:property": { - "sh:datatype": { - "@id": "core:MediaType" - }, - "sh:maxCount": 1, - "sh:name": "contentType", - "sh:path": { - "@id": "software:contentType" - } - } + "owl:NamedIndividual", + "security:ExploitCatalogType" + ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/analyzed", + "@id": "security:track", "@type": [ "owl:NamedIndividual", - "software:SBOMType" + "security:SsvcDecisionType" ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/build", + "@id": "security:trackStar", "@type": [ "owl:NamedIndividual", - "software:SBOMType" + "security:SsvcDecisionType" ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/deployed", + "@id": "security:vulnerableCodeCannotBeControlledByAdversary", "@type": [ "owl:NamedIndividual", - "software:SBOMType" + "security:VexJustificationType" ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/design", + "@id": "security:vulnerableCodeNotInExecutePath", "@type": [ "owl:NamedIndividual", - "software:SBOMType" + "security:VexJustificationType" ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/runtime", + "@id": "security:vulnerableCodeNotPresent", "@type": [ "owl:NamedIndividual", - "software:SBOMType" + "security:VexJustificationType" ] }, { - "@id": "https://spdx.org/rdf/Software/SBOMType/source", + "@id": "software:File", "@type": [ - "owl:NamedIndividual", - "software:SBOMType" - ] + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "Refers to any object that stores content on a computer.\nThe type of content can optionally be provided in the contentType property.\nExternal property restriction on /Core/Element/name: minCount: 1", + "rdfs:subClassOf": { + "@id": "software:SoftwareArtifact" + }, + "ns0:term_status": "Stable", + "sh:property": { + "sh:datatype": { + "@id": "core:MediaType" + }, + "sh:maxCount": 1, + "sh:name": "contentType", + "sh:path": { + "@id": "software:contentType" + } + } }, { "@id": "software:Sbom", @@ -2378,7 +2556,7 @@ }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { + "sh:datatype": { "@id": "software:SBOMType" }, "sh:name": "sbomType", @@ -2400,55 +2578,27 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { + "sh:datatype": { "@id": "core:PositiveIntegerRange" }, "sh:maxCount": 1, - "sh:name": "byteRange", + "sh:name": "lineRange", "sh:path": { - "@id": "software:byteRange" + "@id": "software:lineRange" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:PositiveIntegerRange" }, "sh:maxCount": 1, - "sh:name": "lineRange", + "sh:name": "byteRange", "sh:path": { - "@id": "software:lineRange" + "@id": "software:byteRange" } } ] }, - { - "@id": "https://spdx.org/rdf/Software/SoftwareDependencyLinkType/dynamic", - "@type": [ - "owl:NamedIndividual", - "software:SoftwareDependencyLinkType" - ] - }, - { - "@id": "https://spdx.org/rdf/Software/SoftwareDependencyLinkType/other", - "@type": [ - "owl:NamedIndividual", - "software:SoftwareDependencyLinkType" - ] - }, - { - "@id": "https://spdx.org/rdf/Software/SoftwareDependencyLinkType/static", - "@type": [ - "owl:NamedIndividual", - "software:SoftwareDependencyLinkType" - ] - }, - { - "@id": "https://spdx.org/rdf/Software/SoftwareDependencyLinkType/tool", - "@type": [ - "owl:NamedIndividual", - "software:SoftwareDependencyLinkType" - ] - }, { "@id": "software:SoftwareDependencyRelationship", "@type": [ @@ -2462,188 +2612,289 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "software:SoftwareDependencyLinkType" + "sh:datatype": { + "@id": "software:DependencyConditionalityType" }, "sh:maxCount": 1, - "sh:name": "softwareLinkage", + "sh:name": "conditionality", "sh:path": { - "@id": "software:softwareLinkage" + "@id": "software:conditionality" } }, { - "sh:class": { - "@id": "software:DependencyConditionalityType" + "sh:datatype": { + "@id": "software:SoftwareDependencyLinkType" }, "sh:maxCount": 1, - "sh:name": "conditionality", + "sh:name": "softwareLinkage", "sh:path": { - "@id": "software:conditionality" + "@id": "software:softwareLinkage" } } ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/application", + "@id": "software:analyzed", + "@type": [ + "owl:NamedIndividual", + "software:SBOMType" + ] + }, + { + "@id": "software:application", + "@type": [ + "owl:NamedIndividual", + "software:SoftwarePurpose" + ] + }, + { + "@id": "software:archive", + "@type": [ + "owl:NamedIndividual", + "software:SoftwarePurpose" + ] + }, + { + "@id": "software:bom", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/archive", + "@id": "software:build", + "@type": [ + "owl:NamedIndividual", + "software:SBOMType" + ] + }, + { + "@id": "software:configuration", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/bom", + "@id": "software:container", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/configuration", + "@id": "software:data", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/container", + "@id": "software:deployed", + "@type": [ + "owl:NamedIndividual", + "software:SBOMType" + ] + }, + { + "@id": "software:design", + "@type": [ + "owl:NamedIndividual", + "software:SBOMType" + ] + }, + { + "@id": "software:device", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/data", + "@id": "software:documentation", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/device", + "@id": "software:dynamic", + "@type": [ + "owl:NamedIndividual", + "software:SoftwareDependencyLinkType" + ] + }, + { + "@id": "software:evidence", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/documentation", + "@id": "software:executable", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/evidence", + "@id": "software:file", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/executable", + "@id": "software:firmware", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/file", + "@id": "software:framework", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/firmware", + "@id": "software:install", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/framework", + "@id": "software:library", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/install", + "@id": "software:manifest", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/library", + "@id": "software:model", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/manifest", + "@id": "software:module", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/module", + "@id": "software:operatingSystem", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/operatingSystem", + "@id": "software:optional", + "@type": [ + "owl:NamedIndividual", + "software:DependencyConditionalityType" + ] + }, + { + "@id": "software:other", "@type": [ "owl:NamedIndividual", + "software:DependencyConditionalityType", + "software:SoftwareDependencyLinkType", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/other", + "@id": "software:patch", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/patch", + "@id": "software:prerequisite", + "@type": [ + "owl:NamedIndividual", + "software:DependencyConditionalityType" + ] + }, + { + "@id": "software:provided", + "@type": [ + "owl:NamedIndividual", + "software:DependencyConditionalityType" + ] + }, + { + "@id": "software:required", + "@type": [ + "owl:NamedIndividual", + "software:DependencyConditionalityType" + ] + }, + { + "@id": "software:requirement", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/requirement", + "@id": "software:runtime", + "@type": [ + "owl:NamedIndividual", + "software:SBOMType" + ] + }, + { + "@id": "software:source", "@type": [ "owl:NamedIndividual", + "software:SBOMType", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/source", + "@id": "software:specification", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, { - "@id": "https://spdx.org/rdf/Software/SoftwarePurpose/specification", + "@id": "software:static", + "@type": [ + "owl:NamedIndividual", + "software:SoftwareDependencyLinkType" + ] + }, + { + "@id": "software:test", "@type": [ "owl:NamedIndividual", "software:SoftwarePurpose" ] }, + { + "@id": "software:tool", + "@type": [ + "owl:NamedIndividual", + "software:SoftwareDependencyLinkType" + ] + }, { "@id": "ai:autonomyType", "@type": "owl:DatatypeProperty", @@ -2872,6 +3123,15 @@ }, "ns0:term_status": "Stable", "sh:property": [ + { + "sh:datatype": { + "@id": "core:Agent" + }, + "sh:name": "suppliedBy", + "sh:path": { + "@id": "core:suppliedBy" + } + }, { "sh:datatype": { "@id": "core:DateTime" @@ -2883,21 +3143,21 @@ } }, { - "sh:class": { - "@id": "core:Agent" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:name": "originatedBy", + "sh:name": "standard", "sh:path": { - "@id": "core:originatedBy" + "@id": "core:standard" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:Agent" }, - "sh:name": "suppliedBy", + "sh:name": "originatedBy", "sh:path": { - "@id": "core:suppliedBy" + "@id": "core:originatedBy" } }, { @@ -2919,15 +3179,6 @@ "sh:path": { "@id": "core:releaseTime" } - }, - { - "sh:datatype": { - "@id": "xsd:string" - }, - "sh:name": "standard", - "sh:path": { - "@id": "core:standard" - } } ] }, @@ -2956,7 +3207,7 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { + "sh:datatype": { "@id": "core:ExternalMap" }, "sh:name": "imports", @@ -2965,17 +3216,7 @@ } }, { - "sh:class": { - "@id": "core:Element" - }, - "sh:minCount": 1, - "sh:name": "rootElement", - "sh:path": { - "@id": "core:rootElement" - } - }, - { - "sh:class": { + "sh:datatype": { "@id": "core:NamespaceMap" }, "sh:name": "namespaces", @@ -2984,7 +3225,7 @@ } }, { - "sh:class": { + "sh:datatype": { "@id": "core:Element" }, "sh:minCount": 1, @@ -2992,6 +3233,16 @@ "sh:path": { "@id": "core:element" } + }, + { + "sh:datatype": { + "@id": "core:Element" + }, + "sh:minCount": 1, + "sh:name": "rootElement", + "sh:path": { + "@id": "core:rootElement" + } } ] }, @@ -3007,7 +3258,7 @@ }, "ns0:term_status": "Stable", "sh:property": { - "sh:class": { + "sh:datatype": { "@id": "core:LifecycleScopeType" }, "sh:maxCount": 1, @@ -3154,6 +3405,10 @@ }, { "@id": "core:extension", + "@type": [ + "owl:NamedIndividual", + "core:ProfileIdentifierType" + ], "rdfs:comment": "TODO", "ns0:term_status": "Stable" }, @@ -3346,6 +3601,15 @@ }, "ns0:term_status": "Stable" }, + { + "@id": "core:spdxId", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "SpdxId uniquely identifies an Element which may thereby be referenced by other Elements.\nThese references may be internal or external.\nWhile there may be several versions of the same Element, each one needs to be able to be referred to uniquely\nso that relationships between Elements can be clearly articulated.", + "rdfs:range": { + "@id": "xsd:anyURI" + }, + "ns0:term_status": "Stable" + }, { "@id": "core:specVersion", "@type": "owl:DatatypeProperty", @@ -3502,9 +3766,9 @@ { "@id": "dataset:datasetType", "@type": "owl:DatatypeProperty", - "rdfs:comment": "Type describes the datatype contained in the dataset. For example a dataset can be a image dataset or a text dataset or sometimes a multimodal dataset that contains multiple types of data", + "rdfs:comment": "Type describes the datatype contained in the dataset. For example a dataset can be an image dataset for computer vision applications, a text dataset such as the contents of a book or Wikipedia article, or sometimes a multimodal dataset that contains multiple types of data.", "rdfs:range": { - "@id": "xsd:string" + "@id": "dataset:DatasetType" }, "ns0:term_status": "Stable" }, @@ -3546,7 +3810,11 @@ }, { "@id": "dataset:sensor", - "@type": "owl:DatatypeProperty", + "@type": [ + "owl:DatatypeProperty", + "owl:NamedIndividual", + "dataset:DatasetType" + ], "rdfs:comment": "Sensor describes a sensor that was used for collecting the data\nand its calibration value as a key-value pair.", "rdfs:range": { "@id": "core:DictionaryEntry" @@ -3554,45 +3822,18 @@ "ns0:term_status": "Stable" }, { - "@id": "licensing:additionComment", + "@id": "licensing:additionText", "@type": "owl:DatatypeProperty", - "rdfs:comment": "An additionComment for a LicenseAddition describes general factual information\nabout the LicenseAddition. It should not contain information (or links to\ninformation) that includes any kind of interpretation about the meaning or\neffect of the License, even if written by the license addition's author.\n\nExamples of information for an additionComment may include the following:\n\n* If the LicenseAddition's identifier is deprecated, it may briefly explain the\n reason for deprecation.\n* It may include the date of release, if identified, for LicenseAdditions with\n multiple versions.\n* It may include links to other official language translations for the\n LicenseAddition.\n* It may include a reference to the License(s) with which this LicenseAddition\n is typically used.", + "rdfs:comment": "An additionText contains the plain text of the LicenseAddition, without\ntemplating or other similar markup.\n\nUsers of the additionText for a License can apply the SPDX Matching Guidelines\nwhen comparing it to another text for matching purposes.", "rdfs:range": { "@id": "xsd:string" }, "ns0:term_status": "Stable" }, { - "@id": "licensing:additionId", + "@id": "licensing:isDeprecatedAdditionId", "@type": "owl:DatatypeProperty", - "rdfs:comment": "An additionId contains a human-readable, short-form identifier for a\nLicenseAddition. It may only include letters, numbers, period (\".\") and\nhyphen (\"-\") characters.\n\nFor a ListedLicenseException, the licenseId will be as specified on the\n[SPDX Exceptions List](https://spdx.org/licenses/exceptions-index.html) for the\nparticular exception.\n\nFor a CustomLicenseAddition, the short-form identifier must begin with the\nprefix `AdditionRef-` and must be unique within the applicable SPDX namespace.\nThe short-form identifier may be preceded by an SPDX namespace or a\nfully-qualified URI prefix.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:additionName", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "An additionName contains the full name of a LicenseAddition, preferably using\nthe title found in the applicable license addition text or file, or as\notherwise specified by the LicenseAddition's author or steward.\n\nWhen no such title is specified, using a name from another well-known source or list\nof licenses additions (such as OSI or Fedora) is suggested.\n\nIf no official or common name is known, any name may be used to aid in\ndistinguishing the LicenseAddition from other LicenseAdditions.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:additionText", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "An additionText contains the plain text of the LicenseAddition, without\ntemplating or other similar markup.\n\nUsers of the additionText for a License can apply the SPDX Matching Guidelines\nwhen comparing it to another text for matching purposes.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:isDeprecatedAdditionId", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "The isDeprecatedAdditionId property specifies whether an identifier for a\nLicenseAddition has been marked as deprecated. If the property is not defined,\nthen it is presumed to be false (i.e., not deprecated).\n\nIf the LicenseAddition is included on the SPDX Exceptions List, then\nthe `deprecatedVersion` property indicates on which version release of the\nExceptions List it was first marked as deprecated.\n\n\"Deprecated\" in this context refers to deprecating the use of the\n_identifier_, not the underlying license addition. In other words, even if a\nLicenseAddition's author or steward has stated that a particular\nLicenseAddition generally should not be used, that would _not_ mean that the\nLicenseAddition's identifier is \"deprecated.\" Rather, a LicenseAddition\noperator is typically marked as \"deprecated\" when it is determined that use of\nanother identifier is preferable.", + "rdfs:comment": "The isDeprecatedAdditionId property specifies whether an identifier for a\nLicenseAddition has been marked as deprecated. If the property is not defined,\nthen it is presumed to be false (i.e., not deprecated).\n\nIf the LicenseAddition is included on the SPDX Exceptions List, then\nthe `deprecatedVersion` property indicates on which version release of the\nExceptions List it was first marked as deprecated.\n\n\"Deprecated\" in this context refers to deprecating the use of the\n_identifier_, not the underlying license addition. In other words, even if a\nLicenseAddition's author or steward has stated that a particular\nLicenseAddition generally should not be used, that would _not_ mean that the\nLicenseAddition's identifier is \"deprecated.\" Rather, a LicenseAddition\noperator is typically marked as \"deprecated\" when it is determined that use of\nanother identifier is preferable.", "rdfs:range": { "@id": "xsd:boolean" }, @@ -3626,27 +3867,9 @@ "ns0:term_status": "Stable" }, { - "@id": "licensing:licenseComment", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "A licenseComment describes general factual information about the License. It\nshould not contain information (or links to information) that includes any kind\nof interpretation about the meaning or effect of the License, even if written\nby the license's author.\n\nExamples of information for a licenseComment may include the following:\n\n* If the License's identifier is deprecated, it may briefly explain the reason\n for deprecation.\n* It may include the date of release, if identified, for Licenses with multiple\n versions.\n* It may include links to other official language translations for the License.\n* For LicenseAdditions, it may include a reference to the License(s) with\n which this additional text is typically used.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:licenseId", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "A licenseId contains a human-readable, short-form license identifier for a\nLicense. It may only include letters, numbers, period (\".\") and hyphen (\"-\")\ncharacters.\n\nFor a ListedLicense, the licenseId will be as specified on the\n[SPDX License List](https://spdx.org/licenses) for the particular license.\n\nFor a CustomLicense, the short-form license identifer must begin with the\nprefix `LicenseRef-` and must be unique within the applicable SPDX namespace.\nThe short-form license ID may be preceded by an SPDX namespace or a\nfully-qualified URI prefix.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:licenseName", + "@id": "licensing:licenseExpression", "@type": "owl:DatatypeProperty", - "rdfs:comment": "A licenseName contains the full name of a License, preferably using the title found\nin the applicable license text or file, or as otherwise specified by the\nLicense's author or steward.\n\nWhen no such title is specified, using a name from another well-known source or list\nof licenses (such as OSI or Fedora) is suggested.\n\nIf no official or common name is known, any name may be used to aid in\ndistinguishing the License from other Licenses.", + "rdfs:comment": "Often a single license can be used to represent the licensing terms of a source code or binary file, but there are situations where a single license identifier is not sufficient. A common example is when software is offered under a choice of one or more licenses (e.g., GPL-2.0-only OR BSD-3-Clause). Another example is when a set of licenses is needed to represent a binary program constructed by compiling and linking two (or more) different source files each governed by different licenses (e.g., LGPL-2.1-only AND BSD-3-Clause).\n\nSPDX License Expressions provide a way for one to construct expressions that more accurately represent the licensing terms typically found in open source software source code. A license expression could be a single license identifier found on the SPDX License List; a user defined license reference denoted by the LicenseRef-idString; a license identifier combined with an SPDX exception; or some combination of license identifiers, license references and exceptions constructed using a small set of defined operators (e.g., AND, OR, WITH and +). We provide the definition of what constitutes a valid an SPDX License Expression in this section.", "rdfs:range": { "@id": "xsd:string" }, @@ -3688,15 +3911,6 @@ }, "ns0:term_status": "Stable" }, - { - "@id": "licensing:subjectAddition", - "@type": "owl:ObjectProperty", - "rdfs:comment": "A subjectAddition is a LicenseAddition which is subject to a 'with additional\ntext' effect (WithAdditionOperator).", - "rdfs:range": { - "@id": "licensing:LicenseAddition" - }, - "ns0:term_status": "Stable" - }, { "@id": "security:actionStatement", "@type": "owl:DatatypeProperty", @@ -3709,7 +3923,7 @@ { "@id": "security:actionStatementTime", "@type": "owl:DatatypeProperty", - "rdfs:comment": "TODO", + "rdfs:comment": "When a VEX statement communicates an affected status, the author MUST\ninclude an action statement with a recommended action to help mitigate the\nvulnerability's impact. The actionStatementTime property records the time\nwhen the action statement was first communicated.", "rdfs:range": { "@id": "core:DateTime" }, @@ -3855,7 +4069,7 @@ "@type": "owl:ObjectProperty", "rdfs:comment": "A concludedLicense is the license identified by the SPDX data creator,\nbased on analyzing the license information in the software Package, File\nor Snippet and other information to arrive at a reasonably objective\nconclusion as to what license governs it.\n\nIf a concludedLicense has a NONE value (NoneLicense), this indicates that the\nSPDX data creator has looked and did not find any license information for this\nsoftware Package, File or Snippet.\n\nIf a concludedLicense has a NOASSERTION value (NoAssertionLicense), this\nindicates that one of the following applies:\n* the SPDX data creator has attempted to but cannot reach a reasonable\n objective determination;\n* the SPDX data creator has made no attempt to determine this field; or\n* the SPDX data creator has intentionally provided no information (no\n meaning should be implied by doing so).\n\nA written explanation of a NOASSERTION value (NoAssertionLicense) MAY be\nprovided in the licenseComment field.\n\nIf the concludedLicense for a software Package, File or Snippet is not the\nsame as its declaredLicense, a written explanation SHOULD be provided in\nthe licenseComment field.\n\nIf the declaredLicense for a software Package, File or Snippet is a choice\nof more than one license (e.g. a license expression combining two licenses\nthrough use of the `OR` operator), then the concludedLicense may either\nretain the license choice or identify which license was chosen.", "rdfs:range": { - "@id": "licensing:LicenseField" + "@id": "licensing:AnyLicenseInfo" }, "ns0:term_status": "Stable" }, @@ -3871,7 +4085,7 @@ { "@id": "software:contentIdentifier", "@type": "owl:DatatypeProperty", - "rdfs:comment": "A contentIdentifier is TODO", + "rdfs:comment": "The contentIdentifier provides a canonical, unique, immutable artifact identifier for each software artifact. SPDX 3.0 describes software artifacts as Snippet, File, or Package Elements. The ContentIdentifier can be calculated for any software artifact and can be recorded for any of these SPDX 3.0 Elements using Omnibor, an attempt to standardize how software artifacts are identified independent of which programming language, version control system, build tool, package manager, or software distribution mechanism is in use. \n\nThe contentIdentifier is defined as the [Git Object Identifier](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects) (gitoid) of type `blob` of the software artifact. The use of a git-based version control system is not necessary to calculate a contentIdentifier for any software artifact.\n\nThe gitoid is expressed in the ContentIdentifier property by using the IANA [gitoid URI scheme](https://www.iana.org/assignments/uri-schemes/prov/gitoid).\n\n```\nScheme syntax: gitoid\":\"\":\"\":\"\n```\n\nThe OmniBOR ID for the OmniBOR Document associated with a software artifact should not be recorded in this field. Rather, OmniBOR IDs should be recorded in the SPDX Element's ExternalIdentifier property. See [https://omnibor.io](https://omnibor.io) for more details.", "rdfs:range": { "@id": "xsd:anyURI" }, @@ -3900,7 +4114,7 @@ "@type": "owl:ObjectProperty", "rdfs:comment": "A declaredLicense is the license identified in text in the software package,\nfile or snippet as the license declared by its authors.\n\nThis field is not intended to capture license information obtained from an\nexternal source, such as a package's website. Such information can be\nincluded, as needed, in a concludedLicense field.\n\nA declaredLicense may be expressed differently in practice for different\ntypes of artifacts. For example:\n\n* for Packages:\n * would include license info describing the license of the Package as a\n whole, when it is found in the Package itself (e.g., LICENSE file,\n README file, metadata in the repository, etc.)\n * would not include any license information that is not in the Package\n itself (e.g., license information from the project’s website or from a\n third party repository or website)\n* for Files:\n * would include license info found in the File itself (e.g., license\n header or notice, comments, SPDX-License-Identifier expression)\n * would not include license info found in a different file (e.g., LICENSE\n file in the top directory of a repository)\n* for Snippets:\n * would include license info found in the Snippet itself (e.g., license\n notice, comments, SPDX-License-Identifier expression)\n * would not include license info found elsewhere in the File or in a\n different File (e.g., comment at top of File if it is not within the\n Snippet, LICENSE file in the top directory of a repository)\n\nIf a declaredLicense has a NONE value (NoneLicense), this indicates that the\ncorresponding Package, File or Snippet contains no license information\nwhatsoever.\n\nIf a declaredLicense has a NOASSERTION value (NoAssertionLicense), this\nindicates that one of the following applies:\n* the SPDX data creator has attempted to but cannot reach a reasonable\n objective determination;\n* the SPDX data creator has made no attempt to determine this field; or\n* the SPDX data creator has intentionally provided no information (no meaning\n should be implied by doing so).", "rdfs:range": { - "@id": "licensing:LicenseField" + "@id": "licensing:AnyLicenseInfo" }, "ns0:term_status": "Stable" }, @@ -3934,7 +4148,7 @@ { "@id": "software:packageUrl", "@type": "owl:DatatypeProperty", - "rdfs:comment": "A packageUrl is TODO", + "rdfs:comment": "A packageUrl (commonly pronounced and referred to as \"purl\") is an attempt to standardize package representations in order to reliably identify and locate software packages. A purl is a URL string which represents a package in a mostly universal and uniform way across programming languages, package managers, packaging conventions, tools, APIs and databases.\n\nthe purl URL string is defined by seven components:\n```\nscheme:type/namespace/name@version?qualifiers#subpath\n```\n\nThe definition for each component can be found in the [purl specification](https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst). Components are designed such that they form a hierarchy from the most significant on the left to the least significant components on the right. \n\nParsing a purl string into its components works from left to right. Some extra type-specific normalizations are required. For more information, see [How to parse a purl string in its components](https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst#how-to-parse-a-purl-string-in-its-components).", "rdfs:range": { "@id": "xsd:anyURI" }, @@ -4018,53 +4232,53 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:ExternalIdentifierType" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "identifier", + "sh:name": "externalIdentifierType", "sh:path": { - "@id": "core:identifier" + "@id": "core:externalIdentifierType" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, - "sh:maxCount": 1, - "sh:name": "comment", + "sh:name": "identifierLocator", "sh:path": { - "@id": "core:comment" + "@id": "core:identifierLocator" } }, { "sh:datatype": { "@id": "xsd:anyURI" }, - "sh:name": "identifierLocator", + "sh:maxCount": 1, + "sh:name": "issuingAuthority", "sh:path": { - "@id": "core:identifierLocator" + "@id": "core:issuingAuthority" } }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "issuingAuthority", + "sh:name": "comment", "sh:path": { - "@id": "core:issuingAuthority" + "@id": "core:comment" } }, { - "sh:class": { - "@id": "core:ExternalIdentifierType" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "externalIdentifierType", + "sh:name": "identifier", "sh:path": { - "@id": "core:externalIdentifierType" + "@id": "core:identifier" } } ] @@ -4079,13 +4293,13 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "core:ExternalReferenceType" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "externalReferenceType", + "sh:name": "comment", "sh:path": { - "@id": "core:externalReferenceType" + "@id": "core:comment" } }, { @@ -4099,12 +4313,12 @@ }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:ExternalReferenceType" }, "sh:maxCount": 1, - "sh:name": "comment", + "sh:name": "externalReferenceType", "sh:path": { - "@id": "core:comment" + "@id": "core:externalReferenceType" } }, { @@ -4132,7 +4346,7 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { + "sh:datatype": { "@id": "core:HashAlgorithm" }, "sh:maxCount": 1, @@ -4165,16 +4379,17 @@ "ns0:term_status": "Stable", "sh:property": [ { - "sh:class": { - "@id": "core:NamespaceMap" + "sh:datatype": { + "@id": "core:CreationInfo" }, - "sh:name": "namespaces", + "sh:maxCount": 1, + "sh:name": "creationInfo", "sh:path": { - "@id": "core:namespaces" + "@id": "core:creationInfo" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:ExternalMap" }, "sh:name": "imports", @@ -4183,13 +4398,12 @@ } }, { - "sh:class": { - "@id": "core:CreationInfo" + "sh:datatype": { + "@id": "core:NamespaceMap" }, - "sh:maxCount": 1, - "sh:name": "creationInfo", + "sh:name": "namespaces", "sh:path": { - "@id": "core:creationInfo" + "@id": "core:namespaces" } } ] @@ -4211,43 +4425,43 @@ "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "endTime", + "sh:name": "startTime", "sh:path": { - "@id": "core:endTime" + "@id": "core:startTime" } }, { "sh:datatype": { - "@id": "core:DateTime" + "@id": "core:Element" }, - "sh:maxCount": 1, - "sh:name": "startTime", + "sh:name": "to", "sh:path": { - "@id": "core:startTime" + "@id": "core:to" } }, { - "sh:class": { - "@id": "core:Element" + "sh:datatype": { + "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "from", + "sh:name": "endTime", "sh:path": { - "@id": "core:from" + "@id": "core:endTime" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:Element" }, - "sh:name": "to", + "sh:maxCount": 1, + "sh:minCount": 1, + "sh:name": "from", "sh:path": { - "@id": "core:to" + "@id": "core:from" } }, { - "sh:class": { + "sh:datatype": { "@id": "core:RelationshipCompleteness" }, "sh:maxCount": 1, @@ -4257,7 +4471,7 @@ } }, { - "sh:class": { + "sh:datatype": { "@id": "core:RelationshipType" }, "sh:maxCount": 1, @@ -4320,6 +4534,15 @@ }, "ns0:term_status": "Stable" }, + { + "@id": "expandedlicense:member", + "@type": "owl:ObjectProperty", + "rdfs:comment": "A member is a license expression participating in a conjuctive (of type\nConjunctiveLicenseSet) or a disjunctive (of type DisjunctiveLicenseSet)\nlicense set.", + "rdfs:range": { + "@id": "licensing:AnyLicenseInfo" + }, + "ns0:term_status": "Stable" + }, { "@id": "licensing:deprecatedVersion", "@type": "owl:DatatypeProperty", @@ -4338,15 +4561,6 @@ }, "ns0:term_status": "Stable" }, - { - "@id": "licensing:member", - "@type": "owl:ObjectProperty", - "rdfs:comment": "A member is a license expression participating in a conjuctive (of type\nConjunctiveLicenseSet) or a disjunctive (of type DisjunctiveLicenseSet)\nlicense set.", - "rdfs:range": { - "@id": "licensing:AnyLicenseInfo" - }, - "ns0:term_status": "Stable" - }, { "@id": "licensing:obsoletedBy", "@type": "owl:DatatypeProperty", @@ -4356,24 +4570,6 @@ }, "ns0:term_status": "Stable" }, - { - "@id": "licensing:seeAlso", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "A seeAlso defines a cross-reference with a URL where the License or\nLicenseAddition can be found in use by one or a few projects.\n\nIf applicable, it should include a URL where the license text is posted by\nthe license steward, particularly if the license steward has made available a\n\"canonical\" primary URL for the license text.\n\nIf the license is OSI approved, a seeAlso should be included with the URL for\nthe license's listing on the OSI website.\n\nThe seeAlso URL may refer to a previously-available URL for the License or\nLicenseAddition which is no longer active.\n\nWhere applicable, the seeAlso URL should include the license text in its\nnative language. seeAlso URLs to English or other translations may be included\nwhere multiple, equivalent official translations exist.", - "rdfs:range": { - "@id": "xsd:anyURI" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "licensing:subjectLicense", - "@type": "owl:ObjectProperty", - "rdfs:comment": "A subjectLicense is a License which is subject to either an 'or later' effect\n(OrLaterOperator) or a 'with additional text' effect (WithAdditionOperator).", - "rdfs:range": { - "@id": "licensing:License" - }, - "ns0:term_status": "Stable" - }, { "@id": "security:modifiedTime", "@type": "owl:DatatypeProperty", @@ -4433,22 +4629,22 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "homePage", + "sh:name": "sourceInfo", "sh:path": { - "@id": "software:homePage" + "@id": "software:sourceInfo" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, "sh:maxCount": 1, - "sh:name": "packageVersion", + "sh:name": "packageUrl", "sh:path": { - "@id": "software:packageVersion" + "@id": "software:packageUrl" } }, { @@ -4456,9 +4652,9 @@ "@id": "xsd:anyURI" }, "sh:maxCount": 1, - "sh:name": "packageUrl", + "sh:name": "homePage", "sh:path": { - "@id": "software:packageUrl" + "@id": "software:homePage" } }, { @@ -4466,9 +4662,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "sourceInfo", + "sh:name": "packageVersion", "sh:path": { - "@id": "software:sourceInfo" + "@id": "software:packageVersion" } }, { @@ -4511,34 +4707,26 @@ "ns0:term_status": "Stable" }, { - "@id": "security:severity", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "The severity field provides a human readable string, a label that can be used\nas an English adjective that qualifies its numerical score.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "software:SoftwareArtifact", + "@id": "licensing:LicenseAddition", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "A software artifact is a distinct article or unit related to software\nsuch as a package, a file, or a snippet.", + "rdfs:comment": "A LicenseAddition represents text which is intended to be added to a License\nas additional text, but which is not itself intended to be a standalone\nLicense.\n\nIt may be an exception which is listed on the SPDX Exceptions List\n(ListedLicenseException), or may be any other additional text (as an exception\nor otherwise) which is defined by an SPDX data creator (CustomLicenseAddition).", "rdfs:subClassOf": { - "@id": "core:Artifact" + "@id": "core:Element" }, "ns0:term_status": "Stable", "sh:property": [ { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "contentIdentifier", + "sh:minCount": 1, + "sh:name": "additionText", "sh:path": { - "@id": "software:contentIdentifier" + "@id": "licensing:additionText" } }, { @@ -4546,19 +4734,19 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "attributionText", + "sh:name": "standardAdditionTemplate", "sh:path": { - "@id": "software:attributionText" + "@id": "licensing:standardAdditionTemplate" } }, { - "sh:class": { - "@id": "licensing:LicenseField" + "sh:datatype": { + "@id": "xsd:boolean" }, "sh:maxCount": 1, - "sh:name": "declaredLicense", + "sh:name": "isDeprecatedAdditionId", "sh:path": { - "@id": "software:declaredLicense" + "@id": "licensing:isDeprecatedAdditionId" } }, { @@ -4566,55 +4754,32 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "copyrightText", - "sh:path": { - "@id": "software:copyrightText" - } - }, - { - "sh:class": { - "@id": "software:SoftwarePurpose" - }, - "sh:maxCount": 1, - "sh:name": "primaryPurpose", - "sh:path": { - "@id": "software:primaryPurpose" - } - }, - { - "sh:class": { - "@id": "licensing:LicenseField" - }, - "sh:maxCount": 1, - "sh:name": "concludedLicense", + "sh:name": "obsoletedBy", "sh:path": { - "@id": "software:concludedLicense" - } - }, - { - "sh:class": { - "@id": "software:SoftwarePurpose" - }, - "sh:name": "additionalPurpose", - "sh:path": { - "@id": "software:additionalPurpose" + "@id": "licensing:obsoletedBy" } } ] }, { - "@id": "core:AnnotationType", - "@type": "owl:Class", - "rdfs:comment": "AnnotationType specifies the type of an annotation.", + "@id": "security:severity", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "The severity field provides a human readable string, a label that can be used\nas an English adjective that qualifies its numerical score.", + "rdfs:range": { + "@id": "xsd:string" + }, "ns0:term_status": "Stable" }, { - "@id": "core:CreationInfo", + "@id": "software:SoftwareArtifact", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "The CreationInfo provides information about who created the Element, and when and how it was created. \n\nThe dateTime created is often the date of last change (e.g., a git commit date), not the date when the SPDX data was created, as doing so supports reproducible builds.", + "rdfs:comment": "A software artifact is a distinct article or unit related to software\nsuch as a package, a file, or a snippet.", + "rdfs:subClassOf": { + "@id": "core:Artifact" + }, "ns0:term_status": "Stable", "sh:property": [ { @@ -4622,324 +4787,243 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "comment", + "sh:name": "copyrightText", "sh:path": { - "@id": "core:comment" + "@id": "software:copyrightText" } }, { - "sh:class": { - "@id": "core:Tool" + "sh:datatype": { + "@id": "software:SoftwarePurpose" }, - "sh:name": "createdUsing", + "sh:name": "additionalPurpose", "sh:path": { - "@id": "core:createdUsing" + "@id": "software:additionalPurpose" } }, { - "sh:class": { - "@id": "core:Agent" + "sh:datatype": { + "@id": "licensing:AnyLicenseInfo" }, - "sh:minCount": 1, - "sh:name": "createdBy", + "sh:maxCount": 1, + "sh:name": "concludedLicense", "sh:path": { - "@id": "core:createdBy" + "@id": "software:concludedLicense" } }, { "sh:datatype": { - "@id": "core:DateTime" + "@id": "licensing:AnyLicenseInfo" }, - "sh:name": "created", + "sh:maxCount": 1, + "sh:name": "declaredLicense", "sh:path": { - "@id": "core:created" + "@id": "software:declaredLicense" } }, { "sh:datatype": { - "@id": "core:SemVer" + "@id": "xsd:anyURI" }, - "sh:name": "specVersion", + "sh:maxCount": 1, + "sh:name": "contentIdentifier", "sh:path": { - "@id": "core:specVersion" + "@id": "software:contentIdentifier" } }, { - "sh:class": { - "@id": "core:ProfileIdentifierType" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:minCount": 1, - "sh:name": "profile", + "sh:maxCount": 1, + "sh:name": "attributionText", "sh:path": { - "@id": "core:profile" + "@id": "software:attributionText" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "software:SoftwarePurpose" }, - "sh:name": "dataLicense", + "sh:maxCount": 1, + "sh:name": "primaryPurpose", "sh:path": { - "@id": "core:dataLicense" + "@id": "software:primaryPurpose" } } ] }, { - "@id": "core:ExternalMap", + "@id": "core:AnnotationType", + "@type": "owl:Class", + "rdfs:comment": "AnnotationType specifies the type of an annotation.", + "ns0:term_status": "Stable" + }, + { + "@id": "core:CreationInfo", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "An External Map is a map of Element identifiers that are used within a Document\nbut defined external to that Document.\nThe external map provides details about the externally-defined Element\nsuch as its provenance, where to retrieve it, and how to verify its integrity.", + "rdfs:comment": "The CreationInfo provides information about who created the Element, and when and how it was created. \n\nThe dateTime created is often the date of last change (e.g., a git commit date), not the date when the SPDX data was created, as doing so supports reproducible builds.", "ns0:term_status": "Stable", "sh:property": [ - { - "sh:class": { - "@id": "core:IntegrityMethod" - }, - "sh:name": "verifiedUsing", - "sh:path": { - "@id": "core:verifiedUsing" - } - }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "core:DateTime" }, - "sh:maxCount": 1, - "sh:name": "locationHint", + "sh:name": "created", "sh:path": { - "@id": "core:locationHint" + "@id": "core:created" } }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "core:SemVer" }, - "sh:maxCount": 1, - "sh:name": "definingDocument", + "sh:name": "specVersion", "sh:path": { - "@id": "core:definingDocument" + "@id": "core:specVersion" } }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "core:ProfileIdentifierType" }, - "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "externalId", + "sh:name": "profile", "sh:path": { - "@id": "core:externalId" + "@id": "core:profile" } - } - ] - }, - { - "@id": "core:IntegrityMethod", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "An IntegrityMethod provides an independently reproducible mechanism that permits verification\nof a specific Element that correlates to the data in this SPDX document. This identifier enables\na recipient to determine if anything in the original Element has been changed and eliminates\nconfusion over which version or modification of a specific Element is referenced.", - "ns0:term_status": "Stable", - "sh:property": { - "sh:datatype": { - "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:name": "comment", - "sh:path": { - "@id": "core:comment" - } - } - }, - { - "@id": "core:NamespaceMap", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A namespace map allows the creator of a collection of Elements to use\nshorter identifiers (\"prefixes\") instead of URIs to provide a more\nhuman-readable and smaller serialized representation of the Elements.", - "ns0:term_status": "Stable", - "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:Tool" }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "prefix", + "sh:name": "createdUsing", "sh:path": { - "@id": "core:prefix" + "@id": "core:createdUsing" } }, { "sh:datatype": { - "@id": "xsd:anyURI" + "@id": "core:Agent" }, - "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "namespace", + "sh:name": "createdBy", "sh:path": { - "@id": "core:namespace" + "@id": "core:createdBy" } - } - ] - }, - { - "@id": "core:PositiveIntegerRange", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "PositiveIntegerRange is a tuple of two positive integers that define a range.\n\"begin\" must be less than or equal to \"end\".", - "ns0:term_status": "Stable", - "sh:property": [ + }, { "sh:datatype": { - "@id": "xsd:positiveInteger" + "@id": "xsd:string" }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "begin", + "sh:name": "dataLicense", "sh:path": { - "@id": "core:begin" + "@id": "core:dataLicense" } }, { "sh:datatype": { - "@id": "xsd:positiveInteger" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "end", + "sh:name": "comment", "sh:path": { - "@id": "core:end" + "@id": "core:comment" } } ] }, { - "@id": "licensing:LicenseAddition", + "@id": "core:ExternalMap", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "A LicenseAddition represents text which is intended to be added to a License\nas additional text, but which is not itself intended to be a standalone\nLicense.\n\nIt may be an exception which is listed on the SPDX Exceptions List\n(ListedLicenseException), or may be any other additional text (as an exception\nor otherwise) which is defined by an SPDX data creator (CustomLicenseAddition).", + "rdfs:comment": "An External Map is a map of Element identifiers that are used within a Document\nbut defined external to that Document.\nThe external map provides details about the externally-defined Element\nsuch as its provenance, where to retrieve it, and how to verify its integrity.", "ns0:term_status": "Stable", "sh:property": [ - { - "sh:datatype": { - "@id": "xsd:boolean" - }, - "sh:maxCount": 1, - "sh:name": "isDeprecatedAdditionId", - "sh:path": { - "@id": "licensing:isDeprecatedAdditionId" - } - }, - { - "sh:datatype": { - "@id": "xsd:string" - }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "additionText", - "sh:path": { - "@id": "licensing:additionText" - } - }, - { - "sh:datatype": { - "@id": "xsd:string" - }, - "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "additionId", - "sh:path": { - "@id": "licensing:additionId" - } - }, { "sh:datatype": { "@id": "xsd:anyURI" }, - "sh:name": "seeAlso", - "sh:path": { - "@id": "licensing:seeAlso" - } - }, - { - "sh:datatype": { - "@id": "xsd:string" - }, "sh:maxCount": 1, - "sh:name": "obsoletedBy", + "sh:name": "locationHint", "sh:path": { - "@id": "licensing:obsoletedBy" + "@id": "core:locationHint" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, "sh:maxCount": 1, - "sh:name": "standardAdditionTemplate", + "sh:name": "definingDocument", "sh:path": { - "@id": "licensing:standardAdditionTemplate" + "@id": "core:definingDocument" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, "sh:maxCount": 1, "sh:minCount": 1, - "sh:name": "additionName", + "sh:name": "externalId", "sh:path": { - "@id": "licensing:additionName" + "@id": "core:externalId" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:IntegrityMethod" }, - "sh:maxCount": 1, - "sh:name": "additionComment", + "sh:name": "verifiedUsing", "sh:path": { - "@id": "licensing:additionComment" + "@id": "core:verifiedUsing" } } ] }, { - "@id": "security:ExploitCatalogType", - "@type": "owl:Class", - "rdfs:comment": "ExploitCatalogType specifies the type of exploit catalog that a vulnerability is listed in.", - "ns0:term_status": "Stable" + "@id": "core:IntegrityMethod", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "An IntegrityMethod provides an independently reproducible mechanism that permits verification\nof a specific Element that correlates to the data in this SPDX document. This identifier enables\na recipient to determine if anything in the original Element has been changed and eliminates\nconfusion over which version or modification of a specific Element is referenced.", + "ns0:term_status": "Stable", + "sh:property": { + "sh:datatype": { + "@id": "xsd:string" + }, + "sh:maxCount": 1, + "sh:name": "comment", + "sh:path": { + "@id": "core:comment" + } + } }, { - "@id": "security:VexVulnAssessmentRelationship", + "@id": "core:NamespaceMap", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "VexVulnAssessmentRelationship is an abstract subclass that defined the common\nproperties shared by all the SPDX-VEX status relationships. \n\n**Constraints**\n\nWhen linking elements using a VexVulnAssessmentRelationship, the following\nrequirements must be observed:\n\n- The from: end must be a /Security/Vulnerability classed element\n- The to: end must point to elements representing the VEX _products_. To\nspecify a different element where the vulnerability was detected, the VEX\nrelationship can optionally specify _subcomponents_ using the assessedElement\nproperty.\n\nVEX inherits information from the document level down to its statements. When a\nstatement is missing information it can be completed by reading the equivalent \nfield from the containing document. For example, if a VEX relationship is\nmissing data in its createdBy property, tools must consider the entity\nlisted in the CreationInfo section of the document as the VEX author.\nIn the same way, when a VEX relationship does not have a created property,\nthe document's date must be considered as authoritative.", - "rdfs:subClassOf": { - "@id": "security:VulnAssessmentRelationship" - }, + "rdfs:comment": "A namespace map allows the creator of a collection of Elements to use\nshorter identifiers (\"prefixes\") instead of URIs to provide a more\nhuman-readable and smaller serialized representation of the Elements.", "ns0:term_status": "Stable", "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, "sh:maxCount": 1, - "sh:name": "vexVersion", + "sh:minCount": 1, + "sh:name": "namespace", "sh:path": { - "@id": "security:vexVersion" + "@id": "core:namespace" } }, { @@ -4947,39 +5031,46 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "statusNotes", + "sh:minCount": 1, + "sh:name": "prefix", "sh:path": { - "@id": "security:statusNotes" + "@id": "core:prefix" } } ] }, { - "@id": "core:MediaType", + "@id": "core:PositiveIntegerRange", "@type": [ "owl:Class", "sh:NodeShape" ], - "rdfs:comment": "The MediaType is a String constrained to the RFC 2046 specification. It provides a standardized\nway of indicating the type of content of an Element.\nA list of all possible media types is available at https://www.iana.org/assignments/media-types/media-types.xhtml.", - "rdfs:subClassOf": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" - }, - { - "@id": "core:RelationshipCompleteness", - "@type": "owl:Class", - "rdfs:comment": "RelationshipCompleteness indicates whether a relationship is complete or \nknown to be incomplete or if there is made no assertion either way.", - "ns0:term_status": "Stable" - }, - { - "@id": "core:comment", - "@type": "owl:DatatypeProperty", - "rdfs:comment": "A comment is an optional field for creators of the Element to provide comments\nto the readers/reviewers of the document.", - "rdfs:range": { - "@id": "xsd:string" - }, - "ns0:term_status": "Stable" + "rdfs:comment": "PositiveIntegerRange is a tuple of two positive integers that define a range.\n\"begin\" must be less than or equal to \"end\".", + "ns0:term_status": "Stable", + "sh:property": [ + { + "sh:datatype": { + "@id": "xsd:positiveInteger" + }, + "sh:maxCount": 1, + "sh:minCount": 1, + "sh:name": "end", + "sh:path": { + "@id": "core:end" + } + }, + { + "sh:datatype": { + "@id": "xsd:positiveInteger" + }, + "sh:maxCount": 1, + "sh:minCount": 1, + "sh:name": "begin", + "sh:path": { + "@id": "core:begin" + } + } + ] }, { "@id": "licensing:License", @@ -4989,28 +5080,18 @@ ], "rdfs:comment": "A License represents a license text, whether listed on the SPDX License List\n(ListedLicense) or defined by an SPDX data creator (CustomLicense).", "rdfs:subClassOf": { - "@id": "licensing:AnyLicenseInfo" + "@id": "licensing:ExtendableLicense" }, "ns0:term_status": "Stable", "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" - }, - "sh:maxCount": 1, - "sh:name": "obsoletedBy", - "sh:path": { - "@id": "licensing:obsoletedBy" - } - }, - { - "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:boolean" }, "sh:maxCount": 1, - "sh:name": "standardLicenseTemplate", + "sh:name": "isOsiApproved", "sh:path": { - "@id": "licensing:standardLicenseTemplate" + "@id": "licensing:isOsiApproved" } }, { @@ -5018,10 +5099,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "licenseText", + "sh:name": "obsoletedBy", "sh:path": { - "@id": "licensing:licenseText" + "@id": "licensing:obsoletedBy" } }, { @@ -5049,9 +5129,10 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "standardLicenseHeader", + "sh:minCount": 1, + "sh:name": "licenseText", "sh:path": { - "@id": "licensing:standardLicenseHeader" + "@id": "licensing:licenseText" } }, { @@ -5059,10 +5140,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "licenseId", + "sh:name": "standardLicenseTemplate", "sh:path": { - "@id": "licensing:licenseId" + "@id": "licensing:standardLicenseTemplate" } }, { @@ -5070,20 +5150,39 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:minCount": 1, - "sh:name": "licenseName", + "sh:name": "standardLicenseHeader", "sh:path": { - "@id": "licensing:licenseName" + "@id": "licensing:standardLicenseHeader" } - }, + } + ] + }, + { + "@id": "security:ExploitCatalogType", + "@type": "owl:Class", + "rdfs:comment": "ExploitCatalogType specifies the type of exploit catalog that a vulnerability is listed in.", + "ns0:term_status": "Stable" + }, + { + "@id": "security:VexVulnAssessmentRelationship", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "VexVulnAssessmentRelationship is an abstract subclass that defined the common\nproperties shared by all the SPDX-VEX status relationships. \n\n**Constraints**\n\nWhen linking elements using a VexVulnAssessmentRelationship, the following\nrequirements must be observed:\n\n- The from: end must be a /Security/Vulnerability classed element\n- The to: end must point to elements representing the VEX _products_. To\nspecify a different element where the vulnerability was detected, the VEX\nrelationship can optionally specify _subcomponents_ using the assessedElement\nproperty.\n\nVEX inherits information from the document level down to its statements. When a\nstatement is missing information it can be completed by reading the equivalent \nfield from the containing document. For example, if a VEX relationship is\nmissing data in its createdBy property, tools must consider the entity\nlisted in the CreationInfo section of the document as the VEX author.\nIn the same way, when a VEX relationship does not have a created property,\nthe document's date must be considered as authoritative.", + "rdfs:subClassOf": { + "@id": "security:VulnAssessmentRelationship" + }, + "ns0:term_status": "Stable", + "sh:property": [ { "sh:datatype": { - "@id": "xsd:boolean" + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "isOsiApproved", + "sh:name": "vexVersion", "sh:path": { - "@id": "licensing:isOsiApproved" + "@id": "security:vexVersion" } }, { @@ -5091,22 +5190,40 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "licenseComment", - "sh:path": { - "@id": "licensing:licenseComment" - } - }, - { - "sh:datatype": { - "@id": "xsd:anyURI" - }, - "sh:name": "seeAlso", + "sh:name": "statusNotes", "sh:path": { - "@id": "licensing:seeAlso" + "@id": "security:statusNotes" } } ] }, + { + "@id": "core:MediaType", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "The MediaType is a String constrained to the RFC 2046 specification. It provides a standardized\nway of indicating the type of content of an Element.\nA list of all possible media types is available at https://www.iana.org/assignments/media-types/media-types.xhtml.", + "rdfs:subClassOf": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, + { + "@id": "core:RelationshipCompleteness", + "@type": "owl:Class", + "rdfs:comment": "RelationshipCompleteness indicates whether a relationship is complete or \nknown to be incomplete or if there is made no assertion either way.", + "ns0:term_status": "Stable" + }, + { + "@id": "core:comment", + "@type": "owl:DatatypeProperty", + "rdfs:comment": "A comment is an optional field for creators of the Element to provide comments\nto the readers/reviewers of the document.", + "rdfs:range": { + "@id": "xsd:string" + }, + "ns0:term_status": "Stable" + }, { "@id": "ai:SafetyRiskAssessmentType", "@type": "owl:Class", @@ -5139,32 +5256,32 @@ "sh:property": [ { "sh:datatype": { - "@id": "core:DateTime" + "@id": "core:Agent" }, "sh:maxCount": 1, - "sh:name": "withdrawnTime", + "sh:name": "suppliedBy", "sh:path": { - "@id": "security:withdrawnTime" + "@id": "security:suppliedBy" } }, { - "sh:class": { - "@id": "core:Element" + "sh:datatype": { + "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "assessedElement", + "sh:name": "modifiedTime", "sh:path": { - "@id": "security:assessedElement" + "@id": "security:modifiedTime" } }, { - "sh:class": { - "@id": "core:Agent" + "sh:datatype": { + "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "suppliedBy", + "sh:name": "publishedTime", "sh:path": { - "@id": "security:suppliedBy" + "@id": "security:publishedTime" } }, { @@ -5172,19 +5289,19 @@ "@id": "core:DateTime" }, "sh:maxCount": 1, - "sh:name": "publishedTime", + "sh:name": "withdrawnTime", "sh:path": { - "@id": "security:publishedTime" + "@id": "security:withdrawnTime" } }, { "sh:datatype": { - "@id": "core:DateTime" + "@id": "core:Element" }, "sh:maxCount": 1, - "sh:name": "modifiedTime", + "sh:name": "assessedElement", "sh:path": { - "@id": "security:modifiedTime" + "@id": "security:assessedElement" } } ] @@ -5207,15 +5324,6 @@ "rdfs:comment": "Describes the possible types of availability of a dataset, indicating whether the dataset can be directly downloaded, can be assembled using a script for scraping the data, is only available after a clickthrough or a registration form.", "ns0:term_status": "Stable" }, - { - "@id": "licensing:LicenseField", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "A LicenseField is the primary value that is used by a licensing field for a\nsoftware Package, File or Snippet. It represents either a license expression,\nor the values NOASSERTION or NONE. The specific meanings of NOASSERTION or\nNONE for the particular licensing field are defined in the corresponding\nproperty description.", - "ns0:term_status": "Stable" - }, { "@id": "security:VexJustificationType", "@type": "owl:Class", @@ -5234,18 +5342,6 @@ "rdfs:comment": "TODO", "ns0:term_status": "Stable" }, - { - "@id": "licensing:AnyLicenseInfo", - "@type": [ - "owl:Class", - "sh:NodeShape" - ], - "rdfs:comment": "An AnyLicenseInfo is used by a licensing field for a software package,\nfile or snippet when its value is not NOASSERTION or NONE. It can be a\nsingle license (either on the SPDX License List or a custom-defined license);\na single license with an \"or later\" operator applied; the foregoing with\nadditional text applied; or a set of licenses combined by applying \"AND\" and\n\"OR\" operators recursively.", - "rdfs:subClassOf": { - "@id": "licensing:LicenseField" - }, - "ns0:term_status": "Stable" - }, { "@id": "software:SBOMType", "@type": "owl:Class", @@ -5302,12 +5398,30 @@ } ] }, + { + "@id": "licensing:AnyLicenseInfo", + "@type": [ + "owl:Class", + "sh:NodeShape" + ], + "rdfs:comment": "An AnyLicenseInfo is used by licensing properties of software artifacts.\nIt can be a NoneLicense, a NoAssertionLicense,\nsingle license (either on the SPDX License List or a custom-defined license);\na single license with an \"or later\" operator applied; the foregoing with\nadditional text applied; or a set of licenses combined by applying \"AND\" and\n\"OR\" operators recursively.", + "rdfs:subClassOf": { + "@id": "core:Element" + }, + "ns0:term_status": "Stable" + }, { "@id": "core:ExternalIdentifierType", "@type": "owl:Class", "rdfs:comment": "ExteralIdentifierType specifies the type of an external identifier.", "ns0:term_status": "Stable" }, + { + "@id": "dataset:DatasetType", + "@type": "owl:Class", + "rdfs:comment": "Describes the different structures of data within a given dataset. A dataset can have multiple types of data, or even a single type of data but still match multiple types, for example sensor data could also be timeseries or labeled image data could also be considered categorical.", + "ns0:term_status": "Stable" + }, { "@id": "core:Element", "@type": [ @@ -5322,12 +5436,21 @@ "sh:property": [ { "sh:datatype": { - "@id": "xsd:string" + "@id": "core:IntegrityMethod" + }, + "sh:name": "verifiedUsing", + "sh:path": { + "@id": "core:verifiedUsing" + } + }, + { + "sh:datatype": { + "@id": "core:CreationInfo" }, "sh:maxCount": 1, - "sh:name": "summary", + "sh:name": "creationInfo", "sh:path": { - "@id": "core:summary" + "@id": "core:creationInfo" } }, { @@ -5335,9 +5458,9 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "description", + "sh:name": "summary", "sh:path": { - "@id": "core:description" + "@id": "core:summary" } }, { @@ -5350,7 +5473,7 @@ } }, { - "sh:class": { + "sh:datatype": { "@id": "core:ExternalIdentifier" }, "sh:name": "externalIdentifier", @@ -5363,69 +5486,59 @@ "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "name", + "sh:name": "description", "sh:path": { - "@id": "core:name" + "@id": "core:description" } }, { - "sh:class": { - "@id": "core:ExternalReference" + "sh:datatype": { + "@id": "xsd:string" }, - "sh:name": "externalReference", + "sh:maxCount": 1, + "sh:name": "name", "sh:path": { - "@id": "core:externalReference" + "@id": "core:name" } }, { - "sh:class": { - "@id": "core:IntegrityMethod" + "sh:datatype": { + "@id": "core:ExternalReference" }, - "sh:name": "verifiedUsing", + "sh:name": "externalReference", "sh:path": { - "@id": "core:verifiedUsing" + "@id": "core:externalReference" } }, { - "sh:class": { - "@id": "core:CreationInfo" + "sh:datatype": { + "@id": "xsd:string" }, "sh:maxCount": 1, - "sh:name": "creationInfo", + "sh:name": "comment", "sh:path": { - "@id": "core:creationInfo" + "@id": "core:comment" } }, { "sh:datatype": { - "@id": "xsd:string" + "@id": "xsd:anyURI" }, "sh:maxCount": 1, - "sh:name": "comment", + "sh:minCount": 1, + "sh:name": "spdxId", "sh:path": { - "@id": "core:comment" + "@id": "core:spdxId" } } ] }, - { - "@id": "core:ExternalReferenceType", - "@type": "owl:Class", - "rdfs:comment": "ExteralReferenceType specifies the type of an external reference.", - "ns0:term_status": "Stable" - }, { "@id": "core:HashAlgorithm", "@type": "owl:Class", "rdfs:comment": "A HashAlgorithm is a mathematical algorithm that maps data of arbitrary size to a bit string (the hash)\nand is a one-way function, that is, a function which is practically infeasible to invert.", "ns0:term_status": "Stable" }, - { - "@id": "software:SoftwarePurpose", - "@type": "owl:Class", - "rdfs:comment": "This field provides information about the primary purpose of an Element.\nSoftware Purpose is intrinsic to how the Element is being used rather than the content of the Element.\nThis field is a reasonable estimate of the most likely usage of the Element\nfrom the producer and consumer perspective from which both parties can draw conclusions\nabout the context in which the Element exists.", - "ns0:term_status": "Stable" - }, { "@id": "core:DateTime", "@type": [ @@ -5438,10 +5551,22 @@ }, "ns0:term_status": "Stable" }, + { + "@id": "software:SoftwarePurpose", + "@type": "owl:Class", + "rdfs:comment": "This field provides information about the primary purpose of an Element.\nSoftware Purpose is intrinsic to how the Element is being used rather than the content of the Element.\nThis field is a reasonable estimate of the most likely usage of the Element\nfrom the producer and consumer perspective from which both parties can draw conclusions\nabout the context in which the Element exists.", + "ns0:term_status": "Stable" + }, + { + "@id": "core:ExternalReferenceType", + "@type": "owl:Class", + "rdfs:comment": "ExteralReferenceType specifies the type of an external reference.", + "ns0:term_status": "Stable" + }, { "@id": "core:RelationshipType", "@type": "owl:Class", - "rdfs:comment": "Provides information about the relationship between two Elements.\nFor example, you can represent a relationship between two different Files,\nbetween a Package and a File, between two Packages, or between one SPDXDocument and another SPDXDocument.\n\nBuild Profile specific RelationshipType descriptions can be found [here](https://github.com/spdx/spdx-3-build-profile/blob/main/model/relationships.md)", + "rdfs:comment": "Provides information about the relationship between two Elements.\nFor example, you can represent a relationship between two different Files,\nbetween a Package and a File, between two Packages, or between one SPDXDocument and another SPDXDocument.", "ns0:term_status": "Stable" } ] diff --git a/src/spdx_tools/spdx3/writer/json_ld/context.json b/src/spdx_tools/spdx3/writer/json_ld/context.json index 94cb2b5e6..67cd4e8bb 100644 --- a/src/spdx_tools/spdx3/writer/json_ld/context.json +++ b/src/spdx_tools/spdx3/writer/json_ld/context.json @@ -1,115 +1,150 @@ { - "ai": "https://spdx.org/rdf/AI/", - "build": "https://spdx.org/rdf/Build/", - "core": "https://spdx.org/rdf/Core/", - "dataset": "https://spdx.org/rdf/Dataset/", - "licensing": "https://spdx.org/rdf/Licensing/", - "ns0": "http://www.w3.org/2003/06/sw-vocab-status/ns#", - "owl": "http://www.w3.org/2002/07/owl#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "security": "https://spdx.org/rdf/Security/", - "sh": "http://www.w3.org/ns/shacl#", - "software": "https://spdx.org/rdf/Software/", - "xsd": "http://www.w3.org/2001/XMLSchema#", "AIPackage": "ai:AIPackage", - "Build": "build:Build", + "Agent": "core:Agent", "Annotation": "core:Annotation", + "AnnotationType": "core:AnnotationType", "AnonymousPayload": "core:AnonymousPayload", - "Organization": "core:Organization", - "Person": "core:Person", - "SoftwareAgent": "core:SoftwareAgent", - "SpdxDocument": "core:SpdxDocument", - "Dataset": "dataset:Dataset", - "ConjunctiveLicenseSet": "licensing:ConjunctiveLicenseSet", + "AnyLicenseInfo": "licensing:AnyLicenseInfo", + "Artifact": "core:Artifact", + "Bom": "core:Bom", + "Build": "build:Build", + "Bundle": "core:Bundle", + "ConfidentialityLevelType": "dataset:ConfidentialityLevelType", + "ConjunctiveLicenseSet": "expandedlicense:ConjunctiveLicenseSet", + "CreationInfo": "core:CreationInfo", "CustomLicense": "licensing:CustomLicense", "CustomLicenseAddition": "licensing:CustomLicenseAddition", - "DisjunctiveLicenseSet": "licensing:DisjunctiveLicenseSet", - "ListedLicense": "licensing:ListedLicense", - "ListedLicenseException": "licensing:ListedLicenseException", - "NoAssertionLicense": "licensing:NoAssertionLicense", - "NoneLicense": "licensing:NoneLicense", - "OrLaterOperator": "licensing:OrLaterOperator", - "WithAdditionOperator": "licensing:WithAdditionOperator", "CvssV2VulnAssessmentRelationship": "security:CvssV2VulnAssessmentRelationship", "CvssV3VulnAssessmentRelationship": "security:CvssV3VulnAssessmentRelationship", + "Dataset": "dataset:Dataset", + "DatasetAvailabilityType": "dataset:DatasetAvailabilityType", + "DatasetType": "dataset:DatasetType", + "DateTime": "core:DateTime", + "DependencyConditionalityType": "software:DependencyConditionalityType", + "DictionaryEntry": "core:DictionaryEntry", + "DisjunctiveLicenseSet": "expandedlicense:DisjunctiveLicenseSet", + "Element": "core:Element", + "ElementCollection": "core:ElementCollection", "EpssVulnAssessmentRelationship": "security:EpssVulnAssessmentRelationship", + "ExploitCatalogType": "security:ExploitCatalogType", "ExploitCatalogVulnAssessmentRelationship": "security:ExploitCatalogVulnAssessmentRelationship", + "ExtendableLicense": "expandedlicense:ExtendableLicense", + "ExternalIdentifier": "core:ExternalIdentifier", + "ExternalIdentifierType": "core:ExternalIdentifierType", + "ExternalMap": "core:ExternalMap", + "ExternalReference": "core:ExternalReference", + "ExternalReferenceType": "core:ExternalReferenceType", + "File": "software:File", + "Hash": "core:Hash", + "HashAlgorithm": "core:HashAlgorithm", + "IntegrityMethod": "core:IntegrityMethod", + "License": "licensing:License", + "LicenseAddition": "licensing:LicenseAddition", + "LicenseExpression": "licensing:LicenseExpression", + "LifecycleScopeType": "core:LifecycleScopeType", + "LifecycleScopedRelationship": "core:LifecycleScopedRelationship", + "ListedLicense": "licensing:ListedLicense", + "ListedLicenseException": "licensing:ListedLicenseException", + "MediaType": "core:MediaType", + "NamespaceMap": "core:NamespaceMap", + "OrLaterOperator": "licensing:OrLaterOperator", + "Organization": "core:Organization", + "Package": "software:Package", + "Payload": "core:Payload", + "Person": "core:Person", + "PositiveIntegerRange": "core:PositiveIntegerRange", + "PresenceType": "ai:PresenceType", + "ProfileIdentifierType": "core:ProfileIdentifierType", + "Relationship": "core:Relationship", + "RelationshipCompleteness": "core:RelationshipCompleteness", + "RelationshipType": "core:RelationshipType", + "SBOMType": "software:SBOMType", + "SafetyRiskAssessmentType": "ai:SafetyRiskAssessmentType", + "Sbom": "software:Sbom", + "SemVer": "core:SemVer", + "Snippet": "software:Snippet", + "SoftwareAgent": "core:SoftwareAgent", + "SoftwareArtifact": "software:SoftwareArtifact", + "SoftwareDependencyLinkType": "software:SoftwareDependencyLinkType", + "SoftwareDependencyRelationship": "software:SoftwareDependencyRelationship", + "SoftwarePurpose": "software:SoftwarePurpose", + "SpdxDocument": "core:SpdxDocument", + "SsvcDecisionType": "security:SsvcDecisionType", "SsvcVulnAssessmentRelationship": "security:SsvcVulnAssessmentRelationship", + "Tool": "core:Tool", "VexAffectedVulnAssessmentRelationship": "security:VexAffectedVulnAssessmentRelationship", "VexFixedVulnAssessmentRelationship": "security:VexFixedVulnAssessmentRelationship", + "VexJustificationType": "security:VexJustificationType", "VexNotAffectedVulnAssessmentRelationship": "security:VexNotAffectedVulnAssessmentRelationship", "VexUnderInvestigationVulnAssessmentRelationship": "security:VexUnderInvestigationVulnAssessmentRelationship", + "VexVulnAssessmentRelationship": "security:VexVulnAssessmentRelationship", + "VulnAssessmentRelationship": "security:VulnAssessmentRelationship", "Vulnerability": "security:Vulnerability", - "File": "software:File", - "Sbom": "software:Sbom", - "Snippet": "software:Snippet", - "SoftwareDependencyRelationship": "software:SoftwareDependencyRelationship", - "autonomyType": { - "@id": "ai:autonomyType", - "@type": "ai:PresenceType" - }, - "domain": { - "@id": "ai:domain", - "@type": "xsd:string" - }, - "energyConsumption": { - "@id": "ai:energyConsumption", + "WithAdditionOperator": "licensing:WithAdditionOperator", + "actionStatement": { + "@id": "security:actionStatement", "@type": "xsd:string" }, - "hyperparameter": { - "@id": "ai:hyperparameter", - "@type": "core:DictionaryEntry" + "actionStatementTime": { + "@id": "security:actionStatementTime", + "@type": "core:DateTime" }, - "informationAboutApplication": { - "@id": "ai:informationAboutApplication", + "additionComment": { + "@id": "licensing:additionComment", "@type": "xsd:string" }, - "informationAboutTraining": { - "@id": "ai:informationAboutTraining", + "additionId": { + "@id": "licensing:additionId", "@type": "xsd:string" }, - "limitation": { - "@id": "ai:limitation", + "additionName": { + "@id": "licensing:additionName", "@type": "xsd:string" }, - "metric": { - "@id": "ai:metric", - "@type": "core:DictionaryEntry" - }, - "metricDecisionThreshold": { - "@id": "ai:metricDecisionThreshold", - "@type": "core:DictionaryEntry" - }, - "modelDataPreprocessing": { - "@id": "ai:modelDataPreprocessing", + "additionText": { + "@id": "licensing:additionText", "@type": "xsd:string" }, - "modelExplainability": { - "@id": "ai:modelExplainability", - "@type": "xsd:string" + "additionalPurpose": { + "@id": "software:additionalPurpose", + "@type": "software:SoftwarePurpose" }, - "safetyRiskAssessment": { - "@id": "ai:safetyRiskAssessment", + "ai": "https://spdx.org/rdf/AI/", + "algorithm": { + "@id": "core:algorithm", "@type": "@vocab", "@context": { - "@vocab": "ai:SafetyRiskAssessmentType/" + "@vocab": "core:HashAlgorithm/" } }, - "sensitivePersonalInformation": { - "@id": "dataset:sensitivePersonalInformation", + "annotationType": { + "@id": "core:annotationType", "@type": "@vocab", "@context": { - "@vocab": "dataset:PresenceType/" + "@vocab": "core:AnnotationType/" } }, - "standardCompliance": { - "@id": "ai:standardCompliance", + "anonymizationMethodUsed": { + "@id": "dataset:anonymizationMethodUsed", "@type": "xsd:string" }, - "typeOfModel": { - "@id": "ai:typeOfModel", + "assessedElement": { + "@id": "security:assessedElement", + "@type": "@id" + }, + "attributionText": { + "@id": "software:attributionText", "@type": "xsd:string" }, + "autonomyType": { + "@id": "ai:autonomyType", + "@type": "ai:PresenceType" + }, + "begin": { + "@id": "core:begin", + "@type": "xsd:positiveInteger" + }, + "build": "https://spdx.org/rdf/Build/", "buildEndTime": { "@id": "build:buildEndTime", "@type": "core:DateTime" @@ -126,51 +161,24 @@ "@id": "build:buildType", "@type": "xsd:anyURI" }, - "configSourceDigest": { - "@id": "build:configSourceDigest", - "@type": "core:Hash" - }, - "configSourceEntrypoint": { - "@id": "build:configSourceEntrypoint", - "@type": "xsd:string" - }, - "configSourceUri": { - "@id": "build:configSourceUri", - "@type": "xsd:anyURI" - }, - "environment": { - "@id": "build:environment", - "@type": "core:DictionaryEntry" - }, - "parameters": { - "@id": "build:parameters", - "@type": "core:DictionaryEntry" + "builtTime": { + "@id": "core:builtTime", + "@type": "core:DateTime" }, - "Artifact": "core:Artifact", - "Bom": "core:Bom", - "ElementCollection": "core:ElementCollection", - "LifecycleScopedRelationship": "core:LifecycleScopedRelationship", - "algorithm": { - "@id": "core:algorithm", - "@type": "@vocab", - "@context": { - "@vocab": "core:HashAlgorithm/" - } + "byteRange": { + "@id": "software:byteRange", + "@type": "core:PositiveIntegerRange" }, - "annotationType": { - "@id": "core:annotationType", + "catalogType": { + "@id": "security:catalogType", "@type": "@vocab", "@context": { - "@vocab": "core:AnnotationType/" + "@vocab": "security:ExploitCatalogType/" } }, - "begin": { - "@id": "core:begin", - "@type": "xsd:positiveInteger" - }, - "builtTime": { - "@id": "core:builtTime", - "@type": "core:DateTime" + "comment": { + "@id": "core:comment", + "@type": "xsd:string" }, "completeness": { "@id": "core:completeness", @@ -179,34 +187,136 @@ "@vocab": "core:RelationshipCompleteness/" } }, - "context": { - "@id": "core:context", - "@type": "xsd:string" + "concludedLicense": { + "@id": "software:concludedLicense", + "@type": "licensing:AnyLicenseInfo" }, - "created": { - "@id": "core:created", - "@type": "core:DateTime" + "conditionality": { + "@id": "software:conditionality", + "@type": "@vocab", + "@context": { + "@vocab": "software:DependencyConditionalityType/" + } }, - "createdBy": { - "@id": "core:createdBy", - "@type": "@id" + "confidentialityLevel": { + "@id": "dataset:confidentialityLevel", + "@type": "@vocab", + "@context": { + "@vocab": "dataset:ConfidentialityLevelType/" + } }, - "createdUsing": { - "@id": "core:createdUsing", - "@type": "core:Tool" + "configSourceDigest": { + "@id": "build:configSourceDigest", + "@type": "core:Hash" }, - "dataLicense": { - "@id": "core:dataLicense", + "configSourceEntrypoint": { + "@id": "build:configSourceEntrypoint", "@type": "xsd:string" }, - "definingDocument": { - "@id": "core:definingDocument", - "@type": "xsd:anyURI" + "configSourceUri": { + "@id": "build:configSourceUri", + "@type": "xsd:anyURI" + }, + "contentIdentifier": { + "@id": "software:contentIdentifier", + "@type": "xsd:anyURI" + }, + "contentType": { + "@id": "core:contentType", + "@type": "core:MediaType" + }, + "context": { + "@id": "core:context", + "@type": "xsd:string" + }, + "copyrightText": { + "@id": "software:copyrightText", + "@type": "xsd:string" + }, + "core": "https://spdx.org/rdf/Core/", + "created": { + "@id": "core:created", + "@type": "core:DateTime" + }, + "createdBy": { + "@id": "core:createdBy", + "@type": "@id" + }, + "createdUsing": { + "@id": "core:createdUsing", + "@type": "core:Tool" + }, + "creationInfo": { + "@id": "core:creationInfo", + "@type": "core:CreationInfo" + }, + "dataCollectionProcess": { + "@id": "dataset:dataCollectionProcess", + "@type": "xsd:string" + }, + "dataLicense": { + "@id": "core:dataLicense", + "@type": "xsd:string" + }, + "dataPreprocessing": { + "@id": "dataset:dataPreprocessing", + "@type": "xsd:string" + }, + "dataset": "https://spdx.org/rdf/Dataset/", + "datasetAvailability": { + "@id": "dataset:datasetAvailability", + "@type": "@vocab", + "@context": { + "@vocab": "dataset:DatasetAvailabilityType/" + } + }, + "datasetNoise": { + "@id": "dataset:datasetNoise", + "@type": "xsd:string" + }, + "datasetSize": { + "@id": "dataset:datasetSize", + "@type": "xsd:nonNegativeInteger" + }, + "datasetType": { + "@id": "dataset:datasetType", + "@type": "dataset:DatasetType" + }, + "datasetUpdateMechanism": { + "@id": "dataset:datasetUpdateMechanism", + "@type": "xsd:string" + }, + "decisionType": { + "@id": "security:decisionType", + "@type": "@vocab", + "@context": { + "@vocab": "security:SsvcDecisionType/" + } + }, + "declaredLicense": { + "@id": "software:declaredLicense", + "@type": "licensing:AnyLicenseInfo" + }, + "definingDocument": { + "@id": "core:definingDocument", + "@type": "xsd:anyURI" + }, + "deprecatedVersion": { + "@id": "licensing:deprecatedVersion", + "@type": "xsd:string" }, "description": { "@id": "core:description", "@type": "xsd:string" }, + "domain": { + "@id": "ai:domain", + "@type": "xsd:string" + }, + "downloadLocation": { + "@id": "software:downloadLocation", + "@type": "xsd:anyURI" + }, "element": { "@id": "core:element", "@type": "@id" @@ -219,6 +329,19 @@ "@id": "core:endTime", "@type": "core:DateTime" }, + "energyConsumption": { + "@id": "ai:energyConsumption", + "@type": "xsd:string" + }, + "environment": { + "@id": "build:environment", + "@type": "core:DictionaryEntry" + }, + "expandedlicense": "https://spdx.org/rdf/ExpandedLicense/", + "exploited": { + "@id": "security:exploited", + "@type": "xsd:boolean" + }, "externalId": { "@id": "core:externalId", "@type": "xsd:anyURI" @@ -253,6 +376,14 @@ "@id": "core:hashValue", "@type": "xsd:string" }, + "homePage": { + "@id": "software:homePage", + "@type": "xsd:anyURI" + }, + "hyperparameter": { + "@id": "ai:hyperparameter", + "@type": "core:DictionaryEntry" + }, "identifier": { "@id": "core:identifier", "@type": "xsd:string" @@ -261,356 +392,254 @@ "@id": "core:identifierLocator", "@type": "xsd:anyURI" }, - "issuingAuthority": { - "@id": "core:issuingAuthority", - "@type": "xsd:anyURI" - }, - "key": { - "@id": "core:key", + "impactStatement": { + "@id": "security:impactStatement", "@type": "xsd:string" }, - "locationHint": { - "@id": "core:locationHint", - "@type": "xsd:anyURI" + "impactStatementTime": { + "@id": "security:impactStatementTime", + "@type": "core:DateTime" }, - "locator": { - "@id": "core:locator", - "@type": "xsd:anyURI" + "imports": { + "@id": "core:imports", + "@type": "core:ExternalMap" }, - "namespace": { - "@id": "core:namespace", - "@type": "xsd:anyURI" + "informationAboutApplication": { + "@id": "ai:informationAboutApplication", + "@type": "xsd:string" }, - "originatedBy": { - "@id": "core:originatedBy", - "@type": "@id" + "informationAboutTraining": { + "@id": "ai:informationAboutTraining", + "@type": "xsd:string" }, - "prefix": { - "@id": "core:prefix", + "intendedUse": { + "@id": "dataset:intendedUse", "@type": "xsd:string" }, - "profile": { - "@id": "core:profile", - "@type": "@vocab", - "@context": { - "core": "https://spdx.org/rdf/Core/ProfileIdentifierType/core", - "software": "https://spdx.org/rdf/Core/ProfileIdentifierType/software", - "licensing": "https://spdx.org/rdf/Core/ProfileIdentifierType/licensing", - "security": "https://spdx.org/rdf/Core/ProfileIdentifierType/security", - "build": "https://spdx.org/rdf/Core/ProfileIdentifierType/build", - "ai": "https://spdx.org/rdf/Core/ProfileIdentifierType/ai", - "dataset": "https://spdx.org/rdf/Core/ProfileIdentifierType/dataset", - "usage": "https://spdx.org/rdf/Core/ProfileIdentifierType/usage", - "extension": "https://spdx.org/rdf/Core/ProfileIdentifierType/extension" - } + "isDeprecatedAdditionId": { + "@id": "licensing:isDeprecatedAdditionId", + "@type": "xsd:boolean" }, - "relationshipType": { - "@id": "core:relationshipType", - "@type": "@vocab", - "@context": { - "@vocab": "core:RelationshipType/" - } + "isDeprecatedLicenseId": { + "@id": "licensing:isDeprecatedLicenseId", + "@type": "xsd:boolean" }, - "releaseTime": { - "@id": "core:releaseTime", - "@type": "core:DateTime" + "isFsfLibre": { + "@id": "licensing:isFsfLibre", + "@type": "xsd:boolean" }, - "rootElement": { - "@id": "core:rootElement", - "@type": "@id" + "isOsiApproved": { + "@id": "licensing:isOsiApproved", + "@type": "xsd:boolean" }, - "scope": { - "@id": "core:scope", + "issuingAuthority": { + "@id": "core:issuingAuthority", + "@type": "xsd:anyURI" + }, + "justificationType": { + "@id": "security:justificationType", "@type": "@vocab", "@context": { - "@vocab": "core:LifecycleScopeType/" + "@vocab": "security:VexJustificationType/" } }, - "specVersion": { - "@id": "core:specVersion", - "@type": "core:SemVer" + "key": { + "@id": "core:key", + "@type": "xsd:string" }, - "standard": { - "@id": "core:standard", + "knownBias": { + "@id": "dataset:knownBias", "@type": "xsd:string" }, - "startTime": { - "@id": "core:startTime", - "@type": "core:DateTime" + "licenseComment": { + "@id": "licensing:licenseComment", + "@type": "xsd:string" }, - "statement": { - "@id": "core:statement", + "licenseExpression": { + "@id": "licensing:licenseExpression", "@type": "xsd:string" }, - "subject": { - "@id": "core:subject", - "@type": "@id" + "licenseId": { + "@id": "licensing:licenseId", + "@type": "xsd:string" }, - "summary": { - "@id": "core:summary", + "licenseName": { + "@id": "licensing:licenseName", "@type": "xsd:string" }, - "suppliedBy": { - "@id": "core:suppliedBy", - "@type": "@id" + "licenseText": { + "@id": "licensing:licenseText", + "@type": "xsd:string" }, - "to": { - "@id": "core:to", - "@type": "@id" + "licensing": "https://spdx.org/rdf/Licensing/", + "limitation": { + "@id": "ai:limitation", + "@type": "xsd:string" }, - "validUntilTime": { - "@id": "core:validUntilTime", - "@type": "core:DateTime" + "lineRange": { + "@id": "software:lineRange", + "@type": "core:PositiveIntegerRange" }, - "value": { - "@id": "core:value", + "listVersionAdded": { + "@id": "licensing:listVersionAdded", "@type": "xsd:string" }, - "anonymizationMethodUsed": { - "@id": "dataset:anonymizationMethodUsed", - "@type": "xsd:string" - }, - "confidentialityLevel": { - "@id": "dataset:confidentialityLevel", - "@type": "@vocab", - "@context": { - "@vocab": "dataset:ConfidentialityLevelType/" - } - }, - "dataCollectionProcess": { - "@id": "dataset:dataCollectionProcess", - "@type": "xsd:string" - }, - "dataPreprocessing": { - "@id": "dataset:dataPreprocessing", - "@type": "xsd:string" - }, - "datasetAvailability": { - "@id": "dataset:datasetAvailability", - "@type": "@vocab", - "@context": { - "@vocab": "dataset:DatasetAvailabilityType/" - } - }, - "datasetNoise": { - "@id": "dataset:datasetNoise", - "@type": "xsd:string" - }, - "datasetSize": { - "@id": "dataset:datasetSize", - "@type": "xsd:nonNegativeInteger" - }, - "datasetType": { - "@id": "dataset:datasetType", - "@type": "xsd:string" - }, - "datasetUpdateMechanism": { - "@id": "dataset:datasetUpdateMechanism", - "@type": "xsd:string" + "locationHint": { + "@id": "core:locationHint", + "@type": "xsd:anyURI" }, - "intendedUse": { - "@id": "dataset:intendedUse", - "@type": "xsd:string" + "locator": { + "@id": "core:locator", + "@type": "xsd:anyURI" }, - "knownBias": { - "@id": "dataset:knownBias", - "@type": "xsd:string" + "member": { + "@id": "expandedlicense:member", + "@type": "licensing:AnyLicenseInfo" }, - "sensor": { - "@id": "dataset:sensor", + "metric": { + "@id": "ai:metric", "@type": "core:DictionaryEntry" }, - "additionComment": { - "@id": "licensing:additionComment", - "@type": "xsd:string" - }, - "additionId": { - "@id": "licensing:additionId", - "@type": "xsd:string" + "metricDecisionThreshold": { + "@id": "ai:metricDecisionThreshold", + "@type": "core:DictionaryEntry" }, - "additionName": { - "@id": "licensing:additionName", + "modelDataPreprocessing": { + "@id": "ai:modelDataPreprocessing", "@type": "xsd:string" }, - "additionText": { - "@id": "licensing:additionText", + "modelExplainability": { + "@id": "ai:modelExplainability", "@type": "xsd:string" }, - "isDeprecatedAdditionId": { - "@id": "licensing:isDeprecatedAdditionId", - "@type": "xsd:boolean" - }, - "isDeprecatedLicenseId": { - "@id": "licensing:isDeprecatedLicenseId", - "@type": "xsd:boolean" - }, - "isFsfLibre": { - "@id": "licensing:isFsfLibre", - "@type": "xsd:boolean" - }, - "isOsiApproved": { - "@id": "licensing:isOsiApproved", - "@type": "xsd:boolean" + "modifiedTime": { + "@id": "security:modifiedTime", + "@type": "core:DateTime" }, - "licenseComment": { - "@id": "licensing:licenseComment", + "name": { + "@id": "core:name", "@type": "xsd:string" }, - "licenseId": { - "@id": "licensing:licenseId", - "@type": "xsd:string" + "namespace": { + "@id": "core:namespace", + "@type": "xsd:anyURI" }, - "licenseName": { - "@id": "licensing:licenseName", - "@type": "xsd:string" + "namespaces": { + "@id": "core:namespaces", + "@type": "core:NamespaceMap" }, - "licenseText": { - "@id": "licensing:licenseText", + "ns0": "http://www.w3.org/2003/06/sw-vocab-status/ns#", + "obsoletedBy": { + "@id": "licensing:obsoletedBy", "@type": "xsd:string" }, - "standardAdditionTemplate": { - "@id": "licensing:standardAdditionTemplate", - "@type": "xsd:string" + "originatedBy": { + "@id": "core:originatedBy", + "@type": "@id" }, - "standardLicenseHeader": { - "@id": "licensing:standardLicenseHeader", - "@type": "xsd:string" + "owl": "http://www.w3.org/2002/07/owl#", + "packageUrl": { + "@id": "software:packageUrl", + "@type": "xsd:anyURI" }, - "standardLicenseTemplate": { - "@id": "licensing:standardLicenseTemplate", + "packageVersion": { + "@id": "software:packageVersion", "@type": "xsd:string" }, - "subjectAddition": { - "@id": "licensing:subjectAddition", - "@type": "licensing:LicenseAddition" + "parameters": { + "@id": "build:parameters", + "@type": "core:DictionaryEntry" }, - "actionStatement": { - "@id": "security:actionStatement", + "prefix": { + "@id": "core:prefix", "@type": "xsd:string" }, - "actionStatementTime": { - "@id": "security:actionStatementTime", - "@type": "core:DateTime" + "primaryPurpose": { + "@id": "software:primaryPurpose", + "@type": "software:SoftwarePurpose" }, - "assessedElement": { - "@id": "security:assessedElement", - "@type": "@id" + "probability": { + "@id": "security:probability", + "@type": "xsd:decimal" }, - "catalogType": { - "@id": "security:catalogType", + "profile": { + "@id": "core:profile", "@type": "@vocab", "@context": { - "@vocab": "security:ExploitCatalogType/" + "core": "https://spdx.org/rdf/Core/ProfileIdentifierType/core", + "software": "https://spdx.org/rdf/Core/ProfileIdentifierType/software", + "licensing": "https://spdx.org/rdf/Core/ProfileIdentifierType/licensing", + "security": "https://spdx.org/rdf/Core/ProfileIdentifierType/security", + "build": "https://spdx.org/rdf/Core/ProfileIdentifierType/build", + "ai": "https://spdx.org/rdf/Core/ProfileIdentifierType/ai", + "dataset": "https://spdx.org/rdf/Core/ProfileIdentifierType/dataset", + "usage": "https://spdx.org/rdf/Core/ProfileIdentifierType/usage", + "extension": "https://spdx.org/rdf/Core/ProfileIdentifierType/extension" } }, - "decisionType": { - "@id": "security:decisionType", + "publishedTime": { + "@id": "security:publishedTime", + "@type": "core:DateTime" + }, + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "relationshipType": { + "@id": "core:relationshipType", "@type": "@vocab", "@context": { - "@vocab": "security:SsvcDecisionType/" + "@vocab": "core:RelationshipType/" } }, - "exploited": { - "@id": "security:exploited", - "@type": "xsd:boolean" - }, - "impactStatement": { - "@id": "security:impactStatement", - "@type": "xsd:string" - }, - "impactStatementTime": { - "@id": "security:impactStatementTime", + "releaseTime": { + "@id": "core:releaseTime", "@type": "core:DateTime" }, - "justificationType": { - "@id": "security:justificationType", + "rootElement": { + "@id": "core:rootElement", + "@type": "@id" + }, + "safetyRiskAssessment": { + "@id": "ai:safetyRiskAssessment", "@type": "@vocab", "@context": { - "@vocab": "security:VexJustificationType/" + "@vocab": "ai:SafetyRiskAssessmentType/" } }, - "probability": { - "@id": "security:probability", - "@type": "xsd:decimal" - }, - "statusNotes": { - "@id": "security:statusNotes", - "@type": "xsd:string" - }, - "vexVersion": { - "@id": "security:vexVersion", - "@type": "xsd:string" - }, - "additionalPurpose": { - "@id": "software:additionalPurpose", - "@type": "software:SoftwarePurpose" - }, - "attributionText": { - "@id": "software:attributionText", - "@type": "xsd:string" - }, - "byteRange": { - "@id": "software:byteRange", - "@type": "core:PositiveIntegerRange" - }, - "concludedLicense": { - "@id": "software:concludedLicense", - "@type": "licensing:LicenseField" - }, - "conditionality": { - "@id": "software:conditionality", + "sbomType": { + "@id": "software:sbomType", "@type": "@vocab", "@context": { - "@vocab": "software:DependencyConditionalityType/" + "@vocab": "software:SBOMType/" } }, - "contentIdentifier": { - "@id": "software:contentIdentifier", - "@type": "xsd:anyURI" - }, - "contentType": { - "@id": "core:contentType", - "@type": "core:MediaType" + "scope": { + "@id": "core:scope", + "@type": "@vocab", + "@context": { + "@vocab": "core:LifecycleScopeType/" + } }, - "copyrightText": { - "@id": "software:copyrightText", + "score": { + "@id": "security:score", "@type": "xsd:string" }, - "declaredLicense": { - "@id": "software:declaredLicense", - "@type": "licensing:LicenseField" - }, - "downloadLocation": { - "@id": "software:downloadLocation", - "@type": "xsd:anyURI" - }, - "homePage": { - "@id": "software:homePage", - "@type": "xsd:anyURI" - }, - "lineRange": { - "@id": "software:lineRange", - "@type": "core:PositiveIntegerRange" - }, - "packageUrl": { - "@id": "software:packageUrl", + "security": "https://spdx.org/rdf/Security/", + "seeAlso": { + "@id": "licensing:seeAlso", "@type": "xsd:anyURI" }, - "packageVersion": { - "@id": "software:packageVersion", - "@type": "xsd:string" - }, - "primaryPurpose": { - "@id": "software:primaryPurpose", - "@type": "software:SoftwarePurpose" - }, - "sbomType": { - "@id": "software:sbomType", + "sensitivePersonalInformation": { + "@id": "dataset:sensitivePersonalInformation", "@type": "@vocab", "@context": { - "@vocab": "software:SBOMType/" + "@vocab": "dataset:PresenceType/" } }, + "severity": { + "@id": "security:severity", + "@type": "xsd:string" + }, + "sh": "http://www.w3.org/ns/shacl#", + "software": "https://spdx.org/rdf/Software/", "softwareLinkage": { "@id": "software:softwareLinkage", "@type": "@vocab", @@ -622,121 +651,95 @@ "@id": "software:sourceInfo", "@type": "xsd:string" }, - "Bundle": "core:Bundle", - "ExternalIdentifier": "core:ExternalIdentifier", - "ExternalReference": "core:ExternalReference", - "Hash": "core:Hash", - "Payload": "core:Payload", - "Relationship": "core:Relationship", - "SemVer": "core:SemVer", - "Tool": "core:Tool", - "name": { - "@id": "core:name", + "spdxId": "@id", + "specVersion": { + "@id": "core:specVersion", + "@type": "core:SemVer" + }, + "standard": { + "@id": "core:standard", "@type": "xsd:string" }, - "verifiedUsing": { - "@id": "core:verifiedUsing", - "@type": "core:IntegrityMethod" + "standardAdditionTemplate": { + "@id": "licensing:standardAdditionTemplate", + "@type": "xsd:string" }, - "deprecatedVersion": { - "@id": "licensing:deprecatedVersion", + "standardCompliance": { + "@id": "ai:standardCompliance", "@type": "xsd:string" }, - "listVersionAdded": { - "@id": "licensing:listVersionAdded", + "standardLicenseHeader": { + "@id": "licensing:standardLicenseHeader", "@type": "xsd:string" }, - "member": { - "@id": "licensing:member", - "@type": "licensing:AnyLicenseInfo" + "standardLicenseTemplate": { + "@id": "licensing:standardLicenseTemplate", + "@type": "xsd:string" }, - "obsoletedBy": { - "@id": "licensing:obsoletedBy", + "startTime": { + "@id": "core:startTime", + "@type": "core:DateTime" + }, + "statement": { + "@id": "core:statement", "@type": "xsd:string" }, - "seeAlso": { - "@id": "licensing:seeAlso", - "@type": "xsd:anyURI" + "statusNotes": { + "@id": "security:statusNotes", + "@type": "xsd:string" + }, + "subject": { + "@id": "core:subject", + "@type": "@id" + }, + "subjectAddition": { + "@id": "expandedlicense:subjectAddition", + "@type": "expandedlicense:LicenseAddition" }, "subjectLicense": { - "@id": "licensing:subjectLicense", + "@id": "expandedlicense:subjectLicense", "@type": "licensing:License" }, - "modifiedTime": { - "@id": "security:modifiedTime", - "@type": "core:DateTime" + "summary": { + "@id": "core:summary", + "@type": "xsd:string" }, - "publishedTime": { - "@id": "security:publishedTime", - "@type": "core:DateTime" + "suppliedBy": { + "@id": "core:suppliedBy", + "@type": "@id" }, - "score": { - "@id": "security:score", - "@type": "xsd:string" + "to": { + "@id": "core:to", + "@type": "@id" }, - "vector": { - "@id": "security:vector", + "type": "@type", + "typeOfModel": { + "@id": "ai:typeOfModel", "@type": "xsd:string" }, - "withdrawnTime": { - "@id": "security:withdrawnTime", + "validUntilTime": { + "@id": "core:validUntilTime", "@type": "core:DateTime" }, - "Package": "software:Package", - "creationInfo": { - "@id": "core:creationInfo", - "@type": "core:CreationInfo" + "value": { + "@id": "core:value", + "@type": "xsd:string" }, - "imports": { - "@id": "core:imports", - "@type": "core:ExternalMap" + "vector": { + "@id": "security:vector", + "@type": "xsd:string" }, - "namespaces": { - "@id": "core:namespaces", - "@type": "core:NamespaceMap" + "verifiedUsing": { + "@id": "core:verifiedUsing", + "@type": "core:IntegrityMethod" }, - "severity": { - "@id": "security:severity", + "vexVersion": { + "@id": "security:vexVersion", "@type": "xsd:string" }, - "SoftwareArtifact": "software:SoftwareArtifact", - "AnnotationType": "core:AnnotationType", - "CreationInfo": "core:CreationInfo", - "ExternalMap": "core:ExternalMap", - "IntegrityMethod": "core:IntegrityMethod", - "NamespaceMap": "core:NamespaceMap", - "PositiveIntegerRange": "core:PositiveIntegerRange", - "LicenseAddition": "licensing:LicenseAddition", - "ExploitCatalogType": "security:ExploitCatalogType", - "VexVulnAssessmentRelationship": "security:VexVulnAssessmentRelationship", - "MediaType": "core:MediaType", - "RelationshipCompleteness": "core:RelationshipCompleteness", - "comment": { - "@id": "core:comment", - "@type": "xsd:string" + "withdrawnTime": { + "@id": "security:withdrawnTime", + "@type": "core:DateTime" }, - "License": "licensing:License", - "SafetyRiskAssessmentType": "ai:SafetyRiskAssessmentType", - "ConfidentialityLevelType": "dataset:ConfidentialityLevelType", - "SsvcDecisionType": "security:SsvcDecisionType", - "VulnAssessmentRelationship": "security:VulnAssessmentRelationship", - "SoftwareDependencyLinkType": "software:SoftwareDependencyLinkType", - "PresenceType": "ai:PresenceType", - "DatasetAvailabilityType": "dataset:DatasetAvailabilityType", - "LicenseField": "licensing:LicenseField", - "VexJustificationType": "security:VexJustificationType", - "DependencyConditionalityType": "software:DependencyConditionalityType", - "LifecycleScopeType": "core:LifecycleScopeType", - "AnyLicenseInfo": "licensing:AnyLicenseInfo", - "SBOMType": "software:SBOMType", - "Agent": "core:Agent", - "ProfileIdentifierType": "core:ProfileIdentifierType", - "DictionaryEntry": "core:DictionaryEntry", - "ExternalIdentifierType": "core:ExternalIdentifierType", - "Element": "core:Element", - "ExternalReferenceType": "core:ExternalReferenceType", - "HashAlgorithm": "core:HashAlgorithm", - "SoftwarePurpose": "software:SoftwarePurpose", - "DateTime": "core:DateTime", - "RelationshipType": "core:RelationshipType" + "xsd": "http://www.w3.org/2001/XMLSchema#" } diff --git a/src/spdx_tools/spdx3/writer/json_ld/json_ld_converter.py b/src/spdx_tools/spdx3/writer/json_ld/json_ld_converter.py index 865053b71..bdfdc0a18 100644 --- a/src/spdx_tools/spdx3/writer/json_ld/json_ld_converter.py +++ b/src/spdx_tools/spdx3/writer/json_ld/json_ld_converter.py @@ -49,12 +49,7 @@ def _convert_to_json_ld_dict(element: Any, alt_creation_info=False, alt_hash=Fal hash_dict["comment"] = element.comment return hash_dict - # if issubclass(element.__class__, Element): - # element_dict = {"@type": element.__class__.__name__} - # else: - # element_dict = {} # typing of non-Element classes should be handled by the @context, I think - - element_dict = {"@type": element.__class__.__name__} + element_dict = {"type": element.__class__.__name__} for attribute_name in vars(element): attribute_value = getattr(element, attribute_name) @@ -67,9 +62,7 @@ def _convert_to_json_ld_dict(element: Any, alt_creation_info=False, alt_hash=Fal ) elif attribute_value: - if attribute_name == "_spdx_id": - attribute_name = "@id" - elif attribute_name == "_from_element": + if attribute_name == "_from_element": attribute_name = "from" else: attribute_name = snake_case_to_camel_case(attribute_name) diff --git a/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py b/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py index 69a4d763c..b6562fec1 100644 --- a/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py +++ b/src/spdx_tools/spdx3/writer/json_ld/json_ld_writer.py @@ -17,5 +17,5 @@ def write_payload(payload: Payload, file_name: str): complete_dict = {"@context": context, "@graph": element_list} - with open(file_name + ".jsonld", "w") as out: + with open(file_name, "w") as out: json.dump(complete_dict, out, indent=2) diff --git a/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py b/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py index f6bc7c35a..405c35fa1 100644 --- a/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py +++ b/src/spdx_tools/spdx3/writer/json_ld/owl_to_context.py @@ -108,6 +108,9 @@ def convert_spdx_owl_to_jsonld_context(spdx_owl: str = "SPDX_OWL.json"): else: print(f"unknown node_type: {node_type}") + context_dict["type"] = "@type" + context_dict["spdxId"] = "@id" + with open(os.path.join(os.path.dirname(__file__), "context.json"), "w") as infile: json.dump(context_dict, infile) diff --git a/tests/spdx3/data/json/single_package_example.json b/tests/spdx3/data/json/single_package_example.json new file mode 100644 index 000000000..64c0a5efe --- /dev/null +++ b/tests/spdx3/data/json/single_package_example.json @@ -0,0 +1,45 @@ +{ + "@context": "https://spdx.github.io/spdx-3-model/rdf/context.json", + "type": "Package", + "spdxId": "https://some.namespace#SPDXRef-Package", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2022-12-01T00:00:00Z", + "createdBy": ["https://spdx.dev/elements/3F26391C#spdx-dev"], + "createdUsing": ["https://spdx.dev/elements/3F26391C#spdx-dev"], + "profile": ["core", "software"], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "packageName", + "summary": "packageSummary", + "description": "packageDescription", + "comment": "packageComment", + "packageVersion": "12.2", + "downloadLocation": "https://download.com", + "packageUrl": "https://some.purl", + "homepage": "https://homepage.com", + "primaryPurpose": "source", + "contentIdentifier": "urn:spdx.dev:pkg:123456789", + "originatedBy": ["https://some.namespace#SPDXRef-Agent-creatorName-some@mail.com"], + "suppliedBy": ["https://some.namespace#john_smith"], + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "71c4025dd9897b364f3ebbb42c484ff43d00791c" + }, + { + "type": "Hash", + "algorithm": "sha256", + "hashValue": "fbea580d286bbbbb41314430d58ba887716a74d7134119c5307cdc9f0c7a4299" + } + ], + "externalReference": [ + { + "type": "ExternalReference", + "externalReferenceType": "securityFix", + "locator": ["https://support.com"] + } + ] +} diff --git a/tests/spdx3/data/json/spdx23_conversion.json b/tests/spdx3/data/json/spdx23_conversion.json new file mode 100644 index 000000000..43dba0540 --- /dev/null +++ b/tests/spdx3/data/json/spdx23_conversion.json @@ -0,0 +1,644 @@ +{ + "@context": [ + "https://spdx.github.io/spdx-3-model/rdf/context.json", + { + "spdx-example": "http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#" + } + ], + "@graph": [ + { + "type": "Tool", + "spdxId": "spdx-example:SPDXRef-Actor-LicenseFind-1.0", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "spdx-example:SPDXRef-Actor-JaneDoe" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "LicenseFind-1.0" + }, + { + "type": "Organization", + "spdxId": "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "spdx-example:SPDXRef-Actor-JaneDoe" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "ExampleCodeInspect" + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-JaneDoe", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "spdx-example:SPDXRef-Actor-JaneDoe" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "Jane Doe" + }, + { + "type": "SpdxDocument", + "spdxId": "spdx-example:SPDXRef-DOCUMENT", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "spdx-example:SPDXRef-Actor-JaneDoe" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "SPDX-Tools-v2.0", + "comment": "This document was created using SPDX 2.0 using licenses from the web site.", + "element": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0", + "spdx-example:SPDXRef-Actor-ExampleCodeInspect", + "spdx-example:SPDXRef-Actor-JaneDoe", + "spdx-example:SPDXRef-Actor-JaneDoe-jane.doe@example.com", + "spdx-example:SPDXRef-Actor-ExampleCodeInspect-contact@example.com", + "spdx-example:SPDXRef-Package", + "spdx-example:SPDXRef-fromDoap-1", + "spdx-example:SPDXRef-fromDoap-0", + "spdx-example:SPDXRef-Saxon", + "spdx-example:SPDXRef-DoapSource", + "spdx-example:SPDXRef-CommonsLangSrc", + "spdx-example:SPDXRef-JenaLib", + "spdx-example:SPDXRef-Specification", + "spdx-example:SPDXRef-File", + "spdx-example:SPDXRef-Snippet", + "spdx-example:SPDXRef-Relationship-0", + "spdx-example:SPDXRef-Relationship-1", + "spdx-example:SPDXRef-Relationship-2", + "spdx-example:SPDXRef-Relationship-4", + "spdx-example:SPDXRef-Relationship-5", + "spdx-example:SPDXRef-Relationship-6", + "spdx-example:SPDXRef-Relationship-8", + "spdx-example:SPDXRef-Relationship-12", + "spdx-example:SPDXRef-Annotation-0", + "spdx-example:SPDXRef-Actor-JoeReviewer", + "spdx-example:SPDXRef-Annotation-1", + "spdx-example:SPDXRef-Actor-SuzanneReviewer", + "spdx-example:SPDXRef-Annotation-2", + "spdx-example:SPDXRef-Actor-PackageCommenter", + "spdx-example:SPDXRef-Annotation-3", + "spdx-example:SPDXRef-Actor-FileCommenter", + "spdx-example:SPDXRef-Annotation-4" + ], + "rootElement": [ + "spdx-example:SPDXRef-File", + "spdx-example:SPDXRef-Package" + ], + "namespaces": [ + { + "type": "NamespaceMap", + "prefix": "DocumentRef-spdx-tool-1.2", + "namespace": "http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301#" + } + ], + "imports": [ + { + "type": "ExternalMap", + "externalId": "DocumentRef-spdx-tool-1.2:SPDXRef-DOCUMENT", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "d6a770ba38583ed4bb4525bd96e50461655d2759" + } + ] + } + ] + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-JaneDoe-jane.doe@example.com", + "name": "Jane Doe", + "externalIdentifier": [ + { + "type": "ExternalIdentifier", + "externalIdentifierType": "email", + "identifier": "jane.doe@example.com" + } + ] + }, + { + "type": "Organization", + "spdxId": "spdx-example:SPDXRef-Actor-ExampleCodeInspect-contact@example.com", + "name": "ExampleCodeInspect", + "externalIdentifier": [ + { + "type": "ExternalIdentifier", + "externalIdentifierType": "email", + "identifier": "contact@example.com" + } + ] + }, + { + "type": "Package", + "spdxId": "spdx-example:SPDXRef-Package", + "name": "glibc", + "summary": "GNU C library.", + "description": "The GNU C Library defines functions that are specified by the ISO C standard, as well as additional features specific to POSIX and other derivatives of the Unix operating system, and extensions specific to GNU systems.", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "md5", + "hashValue": "624c1abb3664f4b35547e7c73864ad24" + }, + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "85ed0817af83a24ad8da68c2b5094de69833983c" + }, + { + "type": "Hash", + "algorithm": "sha256", + "hashValue": "11b6d3ee554eedf79299905a98f9b9a04e498210b59f15094c916c91d150efcd" + }, + { + "type": "Hash", + "algorithm": "blake2B384", + "hashValue": "aaabd89c926ab525c242e6621f2f5fa73aa4afe3d9e24aed727faaadd6af38b620bdb623dd2b4788b1c8086984af8706" + } + ], + "externalIdentifier": [ + { + "type": "ExternalIdentifier", + "externalIdentifierType": "cpe23", + "identifier": "cpe:2.3:a:pivotal_software:spring_framework:4.1.0:*:*:*:*:*:*:*" + } + ], + "originatedBy": [ + "spdx-example:SPDXRef-Actor-ExampleCodeInspect-contact@example.com" + ], + "suppliedBy": [ + "spdx-example:SPDXRef-Actor-JaneDoe-jane.doe@example.com" + ], + "builtTime": "2011-01-29T18:30:22Z", + "releaseTime": "2012-01-29T18:30:22Z", + "validUntilTime": "2014-01-29T18:30:22Z", + "primaryPurpose": "source", + "copyrightText": "Copyright 2008-2010 John Smith", + "attributionText": "The GNU C Library is free software. See the file COPYING.LIB for copying conditions, and LICENSES for notices about a few contributions that require these additional notices to be distributed. License copyright years may be listed using range notation, e.g., 1996-2015, indicating that every year in the range, inclusive, is a copyrightable year that would otherwise be listed individually.", + "packageVersion": "2.11.1", + "downloadLocation": "http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz", + "homepage": "http://ftp.gnu.org/gnu/glibc", + "sourceInfo": "uses glibc-2_11-branch from git://sourceware.org/git/glibc.git." + }, + { + "type": "Package", + "spdxId": "spdx-example:SPDXRef-fromDoap-1", + "name": "Apache Commons Lang", + "homepage": "http://commons.apache.org/proper/commons-lang/" + }, + { + "type": "Package", + "spdxId": "spdx-example:SPDXRef-fromDoap-0", + "name": "Jena", + "packageVersion": "3.12.0", + "downloadLocation": "https://search.maven.org/remotecontent?filepath=org/apache/jena/apache-jena/3.12.0/apache-jena-3.12.0.tar.gz", + "packageUrl": "pkg:maven/org.apache.jena/apache-jena@3.12.0", + "homepage": "http://www.openjena.org/" + }, + { + "type": "Package", + "spdxId": "spdx-example:SPDXRef-Saxon", + "name": "Saxon", + "description": "The Saxon package is a collection of tools for processing XML documents.", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "85ed0817af83a24ad8da68c2b5094de69833983c" + } + ], + "copyrightText": "Copyright Saxonica Ltd", + "packageVersion": "8.8", + "downloadLocation": "https://sourceforge.net/projects/saxon/files/Saxon-B/8.8.0.7/saxonb8-8-0-7j.zip/download", + "homepage": "http://saxon.sourceforge.net/" + }, + { + "type": "File", + "spdxId": "spdx-example:SPDXRef-DoapSource", + "name": "./src/org/spdx/parser/DOAPProject.java", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" + } + ], + "copyrightText": "Copyright 2010, 2011 Source Auditor Inc." + }, + { + "type": "File", + "spdxId": "spdx-example:SPDXRef-CommonsLangSrc", + "name": "./lib-source/commons-lang3-3.1-sources.jar", + "comment": "This file is used by Jena", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "c2b4e1c67a2d28fced849ee1bb76e7391b93f125" + } + ], + "copyrightText": "Copyright 2001-2011 The Apache Software Foundation" + }, + { + "type": "File", + "spdxId": "spdx-example:SPDXRef-JenaLib", + "name": "./lib-source/jena-2.6.3-sources.jar", + "comment": "This file belongs to Jena", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "3ab4e1c67a2d28fced849ee1bb76e7391b93f125" + } + ], + "copyrightText": "(c) Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP" + }, + { + "type": "File", + "spdxId": "spdx-example:SPDXRef-Specification", + "name": "./docs/myspec.pdf", + "comment": "Specification Documentation", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "fff4e1c67a2d28fced849ee1bb76e7391b93f125" + } + ] + }, + { + "type": "File", + "spdxId": "spdx-example:SPDXRef-File", + "name": "./package/foo.c", + "comment": "The concluded license was taken from the package level that the file was included in.\nThis information was found in the COPYING.txt file in the xyz directory.", + "verifiedUsing": [ + { + "type": "Hash", + "algorithm": "sha1", + "hashValue": "d6a770ba38583ed4bb4525bd96e50461655d2758" + }, + { + "type": "Hash", + "algorithm": "md5", + "hashValue": "624c1abb3664f4b35547e7c73864ad24" + } + ], + "copyrightText": "Copyright 2008-2010 John Smith" + }, + { + "type": "Snippet", + "spdxId": "spdx-example:SPDXRef-Snippet", + "name": "from linux kernel", + "comment": "This snippet was identified as significant and highlighted in this Apache-2.0 file, when a commercial scanner identified it as being derived from file foo.c in package xyz which is licensed under GPL-2.0.", + "copyrightText": "Copyright 2008-2010 John Smith", + "byteRange": { + "type": "PositiveIntegerRange", + "begin": 310, + "end": 420 + }, + "lineRange": { + "type": "PositiveIntegerRange", + "begin": 5, + "end": 23 + } + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-0", + "from": "spdx-example:SPDXRef-DOCUMENT", + "to": [ + "spdx-example:SPDXRef-Package" + ], + "relationshipType": "contains" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-1", + "from": "spdx-example:SPDXRef-DOCUMENT", + "to": [ + "spdx-example:DocumentRef-spdx-tool-1.2:SPDXRef-ToolsElement" + ], + "relationshipType": "copy" + }, + { + "type": "SoftwareDependencyRelationship", + "spdxId": "spdx-example:SPDXRef-Relationship-2", + "from": "spdx-example:SPDXRef-Package", + "to": [ + "spdx-example:SPDXRef-Saxon" + ], + "relationshipType": "dependsOn", + "softwareLinkage": "dynamic" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-4", + "from": "spdx-example:SPDXRef-JenaLib", + "to": [ + "spdx-example:SPDXRef-Package" + ], + "relationshipType": "contains" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-5", + "from": "spdx-example:SPDXRef-Specification", + "to": [ + "spdx-example:SPDXRef-fromDoap-0" + ], + "relationshipType": "specificationFor" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-6", + "from": "spdx-example:SPDXRef-fromDoap-0", + "to": [ + "spdx-example:SPDXRef-File" + ], + "relationshipType": "generates" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-8", + "from": "spdx-example:SPDXRef-DOCUMENT", + "to": [ + "spdx-example:SPDXRef-File", + "spdx-example:SPDXRef-Package" + ], + "relationshipType": "describes" + }, + { + "type": "Relationship", + "spdxId": "spdx-example:SPDXRef-Relationship-12", + "from": "spdx-example:SPDXRef-Package", + "to": [ + "spdx-example:SPDXRef-Specification", + "spdx-example:SPDXRef-CommonsLangSrc", + "spdx-example:SPDXRef-JenaLib", + "spdx-example:SPDXRef-DoapSource" + ], + "relationshipType": "contains" + }, + { + "type": "Annotation", + "spdxId": "spdx-example:SPDXRef-Annotation-0", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-JaneDoe" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "annotationType": "other", + "subject": "spdx-example:SPDXRef-DOCUMENT", + "statement": "Document level annotation" + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-JoeReviewer", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-02-10T00:00:00Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-JoeReviewer" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "Joe Reviewer" + }, + { + "type": "Annotation", + "spdxId": "spdx-example:SPDXRef-Annotation-1", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2010-02-10T00:00:00Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-JoeReviewer" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "annotationType": "review", + "subject": "spdx-example:SPDXRef-DOCUMENT", + "statement": "This is just an example. Some of the non-standard licenses look like they are actually BSD 3 clause licenses" + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-SuzanneReviewer", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-03-13T00:00:00Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-SuzanneReviewer" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "Suzanne Reviewer" + }, + { + "type": "Annotation", + "spdxId": "spdx-example:SPDXRef-Annotation-2", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-03-13T00:00:00Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-SuzanneReviewer" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "annotationType": "review", + "subject": "spdx-example:SPDXRef-DOCUMENT", + "statement": "Another example reviewer." + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-PackageCommenter", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-PackageCommenter" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "Package Commenter" + }, + { + "type": "Annotation", + "spdxId": "spdx-example:SPDXRef-Annotation-3", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-PackageCommenter" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "annotationType": "other", + "subject": "spdx-example:SPDXRef-Package", + "statement": "Package level annotation" + }, + { + "type": "Person", + "spdxId": "spdx-example:SPDXRef-Actor-FileCommenter", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-FileCommenter" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "name": "File Commenter" + }, + { + "type": "Annotation", + "spdxId": "spdx-example:SPDXRef-Annotation-4", + "creationInfo": { + "type": "CreationInfo", + "specVersion": "3.0.0", + "created": "2011-01-29T18:30:22Z", + "createdBy": [ + "spdx-example:SPDXRef-Actor-FileCommenter" + ], + "createdUsing": [ + "spdx-example:SPDXRef-Actor-LicenseFind-1.0" + ], + "profile": [ + "core", + "software", + "licensing" + ], + "dataLicense": "https://spdx.org/licenses/CC0-1.0" + }, + "annotationType": "other", + "subject": "spdx-example:SPDXRef-File", + "statement": "File level annotation" + } + ] +} diff --git a/tests/spdx3/full_workflow.py b/tests/spdx3/full_workflow.py new file mode 100644 index 000000000..6f662a26a --- /dev/null +++ b/tests/spdx3/full_workflow.py @@ -0,0 +1,33 @@ +# SPDX-FileCopyrightText: 2023 spdx contributors +# +# SPDX-License-Identifier: Apache-2.0 +import filecmp +import os + +import pytest +from spdx.fixtures import document_fixture + +from spdx_tools.spdx3.bump_from_spdx2.spdx_document import bump_spdx_document +from spdx_tools.spdx3.parser.json.json_parser import parse_from_file +from spdx_tools.spdx3.writer.json_ld.json_ld_writer import write_payload + + +@pytest.fixture +def temporary_file_paths() -> str: + temporary_file_paths = ["temp_json_writer_output1.json", "temp_json_writer_output2.json"] + yield temporary_file_paths + os.remove(temporary_file_paths[0]) + os.remove(temporary_file_paths[1]) + + +def test_full_workflow(temporary_file_paths): + # this tests conversion->writing->parsing->writing and checks whether the same thing has been written twice + spdx2_document = document_fixture() + payload = bump_spdx_document(spdx2_document) + + write_payload(payload, temporary_file_paths[0]) + parsed_payload = parse_from_file(temporary_file_paths[0]) + + write_payload(parsed_payload, temporary_file_paths[1]) + + assert filecmp.cmp(temporary_file_paths[0], temporary_file_paths[1]) diff --git a/tests/spdx3/parser/__init__.py b/tests/spdx3/parser/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/spdx3/parser/json/__init__.py b/tests/spdx3/parser/json/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/spdx3/parser/json/test_json_parser.py b/tests/spdx3/parser/json/test_json_parser.py new file mode 100644 index 000000000..75218e142 --- /dev/null +++ b/tests/spdx3/parser/json/test_json_parser.py @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2023 spdx contributors +# +# SPDX-License-Identifier: Apache-2.0 +import os + +from spdx_tools.spdx3.parser.json.json_parser import parse_from_file + + +def test_converted_document_parsing(): + parse_from_file(os.path.join(os.path.dirname(__file__), "../../data/json/spdx23_conversion.json")) + + +def test_single_package_parsing(): + parse_from_file(os.path.join(os.path.dirname(__file__), "../../data/json/single_package_example.json"))