spdx_tools.spdx.writer.rdf.relationship_writer

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from beartype.typing import Dict
 5from rdflib import RDF, RDFS, BNode, Graph, Literal, URIRef
 6
 7from spdx_tools.spdx.casing_tools import snake_case_to_camel_case
 8from spdx_tools.spdx.model import Relationship, SpdxNoAssertion, SpdxNone
 9from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE
10from spdx_tools.spdx.writer.rdf.writer_utils import add_namespace_to_spdx_id
11
12
13def add_relationship_to_graph(
14    relationship: Relationship, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str]
15):
16    relationship_node = BNode()
17    graph.add((relationship_node, RDF.type, SPDX_NAMESPACE.Relationship))
18    graph.add(
19        (
20            relationship_node,
21            SPDX_NAMESPACE.relationshipType,
22            SPDX_NAMESPACE[f"relationshipType_{snake_case_to_camel_case(relationship.relationship_type.name)}"],
23        )
24    )
25    if isinstance(relationship.related_spdx_element_id, SpdxNone):
26        graph.add((relationship_node, SPDX_NAMESPACE.relatedSpdxElement, SPDX_NAMESPACE.none))
27    elif isinstance(relationship.related_spdx_element_id, SpdxNoAssertion):
28        graph.add((relationship_node, SPDX_NAMESPACE.relatedSpdxElement, SPDX_NAMESPACE.noassertion))
29    else:
30        graph.add(
31            (
32                relationship_node,
33                SPDX_NAMESPACE.relatedSpdxElement,
34                URIRef(
35                    add_namespace_to_spdx_id(
36                        relationship.related_spdx_element_id, doc_namespace, external_doc_ref_to_namespace
37                    )
38                ),
39            )
40        )
41    if relationship.comment:
42        graph.add((relationship_node, RDFS.comment, Literal(relationship.comment)))
43    relationship_resource = URIRef(
44        add_namespace_to_spdx_id(relationship.spdx_element_id, doc_namespace, external_doc_ref_to_namespace)
45    )
46    graph.add((relationship_resource, SPDX_NAMESPACE.relationship, relationship_node))
def add_relationship_to_graph( relationship: spdx_tools.spdx.model.relationship.Relationship, graph: rdflib.graph.Graph, doc_namespace: str, external_doc_ref_to_namespace: dict[str, str]):
14def add_relationship_to_graph(
15    relationship: Relationship, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str]
16):
17    relationship_node = BNode()
18    graph.add((relationship_node, RDF.type, SPDX_NAMESPACE.Relationship))
19    graph.add(
20        (
21            relationship_node,
22            SPDX_NAMESPACE.relationshipType,
23            SPDX_NAMESPACE[f"relationshipType_{snake_case_to_camel_case(relationship.relationship_type.name)}"],
24        )
25    )
26    if isinstance(relationship.related_spdx_element_id, SpdxNone):
27        graph.add((relationship_node, SPDX_NAMESPACE.relatedSpdxElement, SPDX_NAMESPACE.none))
28    elif isinstance(relationship.related_spdx_element_id, SpdxNoAssertion):
29        graph.add((relationship_node, SPDX_NAMESPACE.relatedSpdxElement, SPDX_NAMESPACE.noassertion))
30    else:
31        graph.add(
32            (
33                relationship_node,
34                SPDX_NAMESPACE.relatedSpdxElement,
35                URIRef(
36                    add_namespace_to_spdx_id(
37                        relationship.related_spdx_element_id, doc_namespace, external_doc_ref_to_namespace
38                    )
39                ),
40            )
41        )
42    if relationship.comment:
43        graph.add((relationship_node, RDFS.comment, Literal(relationship.comment)))
44    relationship_resource = URIRef(
45        add_namespace_to_spdx_id(relationship.spdx_element_id, doc_namespace, external_doc_ref_to_namespace)
46    )
47    graph.add((relationship_resource, SPDX_NAMESPACE.relationship, relationship_node))