spdx_tools.spdx.writer.rdf.annotation_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.datetime_conversions import datetime_to_iso_string
 9from spdx_tools.spdx.model import Annotation
10from spdx_tools.spdx.rdfschema.namespace import SPDX_NAMESPACE
11from spdx_tools.spdx.writer.rdf.writer_utils import add_namespace_to_spdx_id
12
13
14def add_annotation_to_graph(
15    annotation: Annotation, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str]
16):
17    annotation_resource = URIRef(
18        add_namespace_to_spdx_id(annotation.spdx_id, doc_namespace, external_doc_ref_to_namespace)
19    )
20    annotation_node = BNode()
21    graph.add((annotation_node, RDF.type, SPDX_NAMESPACE.Annotation))
22    graph.add(
23        (
24            annotation_node,
25            SPDX_NAMESPACE.annotationType,
26            SPDX_NAMESPACE[f"annotationType_{snake_case_to_camel_case(annotation.annotation_type.name)}"],
27        )
28    )
29    graph.add((annotation_node, SPDX_NAMESPACE.annotator, Literal(annotation.annotator.to_serialized_string())))
30    graph.add(
31        (annotation_node, SPDX_NAMESPACE.annotationDate, Literal(datetime_to_iso_string(annotation.annotation_date)))
32    )
33    graph.add((annotation_node, RDFS.comment, Literal(annotation.annotation_comment)))
34
35    graph.add((annotation_resource, SPDX_NAMESPACE.annotation, annotation_node))
def add_annotation_to_graph( annotation: spdx_tools.spdx.model.annotation.Annotation, graph: rdflib.graph.Graph, doc_namespace: str, external_doc_ref_to_namespace: dict[str, str]):
15def add_annotation_to_graph(
16    annotation: Annotation, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str]
17):
18    annotation_resource = URIRef(
19        add_namespace_to_spdx_id(annotation.spdx_id, doc_namespace, external_doc_ref_to_namespace)
20    )
21    annotation_node = BNode()
22    graph.add((annotation_node, RDF.type, SPDX_NAMESPACE.Annotation))
23    graph.add(
24        (
25            annotation_node,
26            SPDX_NAMESPACE.annotationType,
27            SPDX_NAMESPACE[f"annotationType_{snake_case_to_camel_case(annotation.annotation_type.name)}"],
28        )
29    )
30    graph.add((annotation_node, SPDX_NAMESPACE.annotator, Literal(annotation.annotator.to_serialized_string())))
31    graph.add(
32        (annotation_node, SPDX_NAMESPACE.annotationDate, Literal(datetime_to_iso_string(annotation.annotation_date)))
33    )
34    graph.add((annotation_node, RDFS.comment, Literal(annotation.annotation_comment)))
35
36    graph.add((annotation_resource, SPDX_NAMESPACE.annotation, annotation_node))