spdx_tools.spdx.parser.rdf.relationship_parser

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from rdflib import RDFS, Graph, URIRef
 5from rdflib.term import Node
 6
 7from spdx_tools.spdx.model import Relationship, RelationshipType
 8from spdx_tools.spdx.parser.logger import Logger
 9from spdx_tools.spdx.parser.parsing_functions import (
10    construct_or_raise_parsing_error,
11    raise_parsing_error_if_logger_has_messages,
12)
13from spdx_tools.spdx.parser.rdf.graph_parsing_functions import (
14    parse_enum_value,
15    parse_literal,
16    parse_literal_or_no_assertion_or_none,
17    parse_spdx_id,
18)
19from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE
20
21
22def parse_relationship(relationship_node: Node, graph: Graph, parent_node: URIRef, doc_namespace: str) -> Relationship:
23    logger = Logger()
24    spdx_element_id = parse_spdx_id(parent_node, doc_namespace, graph)
25
26    relationship_type = parse_literal(
27        logger,
28        graph,
29        relationship_node,
30        SPDX_NAMESPACE.relationshipType,
31        parsing_method=lambda x: parse_enum_value(x, RelationshipType, SPDX_NAMESPACE.relationshipType_),
32    )
33    related_spdx_element = parse_literal_or_no_assertion_or_none(
34        logger,
35        graph,
36        relationship_node,
37        SPDX_NAMESPACE.relatedSpdxElement,
38        parsing_method=lambda x: parse_spdx_id(x, doc_namespace, graph),
39    )
40
41    comment = parse_literal(logger, graph, relationship_node, RDFS.comment)
42    raise_parsing_error_if_logger_has_messages(logger, "Relationship")
43    relationship = construct_or_raise_parsing_error(
44        Relationship,
45        dict(
46            spdx_element_id=spdx_element_id,
47            relationship_type=relationship_type,
48            related_spdx_element_id=related_spdx_element,
49            comment=comment,
50        ),
51    )
52
53    return relationship
54
55
56def parse_implicit_relationship(
57    spdx_element_node: URIRef,
58    relationship_type: RelationshipType,
59    related_spdx_element_node: URIRef,
60    graph: Graph,
61    doc_namespace: str,
62) -> Relationship:
63    spdx_element_id = parse_spdx_id(spdx_element_node, doc_namespace, graph)
64    related_spdx_element_id = parse_spdx_id(related_spdx_element_node, doc_namespace, graph)
65    relationship = construct_or_raise_parsing_error(
66        Relationship,
67        dict(
68            spdx_element_id=spdx_element_id,
69            relationship_type=relationship_type,
70            related_spdx_element_id=related_spdx_element_id,
71        ),
72    )
73    return relationship
def parse_relationship( relationship_node: rdflib.term.Node, graph: rdflib.graph.Graph, parent_node: rdflib.term.URIRef, doc_namespace: str) -> spdx_tools.spdx.model.relationship.Relationship:
23def parse_relationship(relationship_node: Node, graph: Graph, parent_node: URIRef, doc_namespace: str) -> Relationship:
24    logger = Logger()
25    spdx_element_id = parse_spdx_id(parent_node, doc_namespace, graph)
26
27    relationship_type = parse_literal(
28        logger,
29        graph,
30        relationship_node,
31        SPDX_NAMESPACE.relationshipType,
32        parsing_method=lambda x: parse_enum_value(x, RelationshipType, SPDX_NAMESPACE.relationshipType_),
33    )
34    related_spdx_element = parse_literal_or_no_assertion_or_none(
35        logger,
36        graph,
37        relationship_node,
38        SPDX_NAMESPACE.relatedSpdxElement,
39        parsing_method=lambda x: parse_spdx_id(x, doc_namespace, graph),
40    )
41
42    comment = parse_literal(logger, graph, relationship_node, RDFS.comment)
43    raise_parsing_error_if_logger_has_messages(logger, "Relationship")
44    relationship = construct_or_raise_parsing_error(
45        Relationship,
46        dict(
47            spdx_element_id=spdx_element_id,
48            relationship_type=relationship_type,
49            related_spdx_element_id=related_spdx_element,
50            comment=comment,
51        ),
52    )
53
54    return relationship
def parse_implicit_relationship( spdx_element_node: rdflib.term.URIRef, relationship_type: spdx_tools.spdx.model.relationship.RelationshipType, related_spdx_element_node: rdflib.term.URIRef, graph: rdflib.graph.Graph, doc_namespace: str) -> spdx_tools.spdx.model.relationship.Relationship:
57def parse_implicit_relationship(
58    spdx_element_node: URIRef,
59    relationship_type: RelationshipType,
60    related_spdx_element_node: URIRef,
61    graph: Graph,
62    doc_namespace: str,
63) -> Relationship:
64    spdx_element_id = parse_spdx_id(spdx_element_node, doc_namespace, graph)
65    related_spdx_element_id = parse_spdx_id(related_spdx_element_node, doc_namespace, graph)
66    relationship = construct_or_raise_parsing_error(
67        Relationship,
68        dict(
69            spdx_element_id=spdx_element_id,
70            relationship_type=relationship_type,
71            related_spdx_element_id=related_spdx_element_id,
72        ),
73    )
74    return relationship