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))