spdx_tools.spdx.writer.rdf.snippet_writer
1# SPDX-FileCopyrightText: 2023 spdx contributors 2# 3# SPDX-License-Identifier: Apache-2.0 4from beartype.typing import Dict, Optional, Tuple 5from rdflib import RDF, RDFS, BNode, Graph, Literal, URIRef 6 7from spdx_tools.spdx.model import Snippet 8from spdx_tools.spdx.rdfschema.namespace import POINTER_NAMESPACE, SPDX_NAMESPACE 9from spdx_tools.spdx.writer.rdf.license_expression_writer import add_license_expression_or_none_or_no_assertion 10from spdx_tools.spdx.writer.rdf.writer_utils import add_namespace_to_spdx_id, add_optional_literal 11 12 13def add_snippet_to_graph( 14 snippet: Snippet, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str] 15): 16 snippet_resource = URIRef(add_namespace_to_spdx_id(snippet.spdx_id, doc_namespace, external_doc_ref_to_namespace)) 17 graph.add((snippet_resource, RDF.type, SPDX_NAMESPACE.Snippet)) 18 19 snippet_from_file_ref = URIRef( 20 add_namespace_to_spdx_id(snippet.file_spdx_id, doc_namespace, external_doc_ref_to_namespace) 21 ) 22 graph.add((snippet_resource, SPDX_NAMESPACE.snippetFromFile, snippet_from_file_ref)) 23 add_range_to_graph( 24 snippet.byte_range, graph, snippet_resource, snippet_from_file_ref, POINTER_NAMESPACE.ByteOffsetPointer 25 ) 26 add_range_to_graph( 27 snippet.line_range, graph, snippet_resource, snippet_from_file_ref, POINTER_NAMESPACE.LineCharPointer 28 ) 29 add_license_expression_or_none_or_no_assertion( 30 snippet.license_concluded, graph, snippet_resource, SPDX_NAMESPACE.licenseConcluded, doc_namespace 31 ) 32 add_license_expression_or_none_or_no_assertion( 33 snippet.license_info_in_snippet, graph, snippet_resource, SPDX_NAMESPACE.licenseInfoInSnippet, doc_namespace 34 ) 35 add_optional_literal(snippet.license_comment, graph, snippet_resource, SPDX_NAMESPACE.licenseComments) 36 add_optional_literal(snippet.copyright_text, graph, snippet_resource, SPDX_NAMESPACE.copyrightText) 37 add_optional_literal(snippet.comment, graph, snippet_resource, RDFS.comment) 38 add_optional_literal(snippet.name, graph, snippet_resource, SPDX_NAMESPACE.name) 39 for attribution_text in snippet.attribution_texts: 40 graph.add((snippet_resource, SPDX_NAMESPACE.attributionText, Literal(attribution_text))) 41 42 43def add_range_to_graph( 44 range_information: Optional[Tuple[int, int]], 45 graph: Graph, 46 snippet_node: URIRef, 47 snippet_from_file_ref: URIRef, 48 pointer_class: URIRef, 49): 50 start_end_pointer = BNode() 51 graph.add((start_end_pointer, RDF.type, POINTER_NAMESPACE.StartEndPointer)) 52 for predicate, value in [ 53 (POINTER_NAMESPACE.startPointer, range_information[0]), 54 (POINTER_NAMESPACE.endPointer, range_information[1]), 55 ]: 56 pointer_node = BNode() 57 graph.add((pointer_node, RDF.type, pointer_class)) 58 graph.add((start_end_pointer, predicate, pointer_node)) 59 graph.add((pointer_node, POINTER_NAMESPACE.reference, snippet_from_file_ref)) 60 if pointer_class == POINTER_NAMESPACE.ByteOffsetPointer: 61 graph.add((pointer_node, POINTER_NAMESPACE.offset, Literal(value))) 62 else: 63 graph.add((pointer_node, POINTER_NAMESPACE.lineNumber, Literal(value))) 64 65 graph.add((snippet_node, SPDX_NAMESPACE.range, start_end_pointer))
def
add_snippet_to_graph( snippet: spdx_tools.spdx.model.snippet.Snippet, graph: rdflib.graph.Graph, doc_namespace: str, external_doc_ref_to_namespace: dict[str, str]):
14def add_snippet_to_graph( 15 snippet: Snippet, graph: Graph, doc_namespace: str, external_doc_ref_to_namespace: Dict[str, str] 16): 17 snippet_resource = URIRef(add_namespace_to_spdx_id(snippet.spdx_id, doc_namespace, external_doc_ref_to_namespace)) 18 graph.add((snippet_resource, RDF.type, SPDX_NAMESPACE.Snippet)) 19 20 snippet_from_file_ref = URIRef( 21 add_namespace_to_spdx_id(snippet.file_spdx_id, doc_namespace, external_doc_ref_to_namespace) 22 ) 23 graph.add((snippet_resource, SPDX_NAMESPACE.snippetFromFile, snippet_from_file_ref)) 24 add_range_to_graph( 25 snippet.byte_range, graph, snippet_resource, snippet_from_file_ref, POINTER_NAMESPACE.ByteOffsetPointer 26 ) 27 add_range_to_graph( 28 snippet.line_range, graph, snippet_resource, snippet_from_file_ref, POINTER_NAMESPACE.LineCharPointer 29 ) 30 add_license_expression_or_none_or_no_assertion( 31 snippet.license_concluded, graph, snippet_resource, SPDX_NAMESPACE.licenseConcluded, doc_namespace 32 ) 33 add_license_expression_or_none_or_no_assertion( 34 snippet.license_info_in_snippet, graph, snippet_resource, SPDX_NAMESPACE.licenseInfoInSnippet, doc_namespace 35 ) 36 add_optional_literal(snippet.license_comment, graph, snippet_resource, SPDX_NAMESPACE.licenseComments) 37 add_optional_literal(snippet.copyright_text, graph, snippet_resource, SPDX_NAMESPACE.copyrightText) 38 add_optional_literal(snippet.comment, graph, snippet_resource, RDFS.comment) 39 add_optional_literal(snippet.name, graph, snippet_resource, SPDX_NAMESPACE.name) 40 for attribution_text in snippet.attribution_texts: 41 graph.add((snippet_resource, SPDX_NAMESPACE.attributionText, Literal(attribution_text)))
def
add_range_to_graph( range_information: Optional[tuple[int, int]], graph: rdflib.graph.Graph, snippet_node: rdflib.term.URIRef, snippet_from_file_ref: rdflib.term.URIRef, pointer_class: rdflib.term.URIRef):
44def add_range_to_graph( 45 range_information: Optional[Tuple[int, int]], 46 graph: Graph, 47 snippet_node: URIRef, 48 snippet_from_file_ref: URIRef, 49 pointer_class: URIRef, 50): 51 start_end_pointer = BNode() 52 graph.add((start_end_pointer, RDF.type, POINTER_NAMESPACE.StartEndPointer)) 53 for predicate, value in [ 54 (POINTER_NAMESPACE.startPointer, range_information[0]), 55 (POINTER_NAMESPACE.endPointer, range_information[1]), 56 ]: 57 pointer_node = BNode() 58 graph.add((pointer_node, RDF.type, pointer_class)) 59 graph.add((start_end_pointer, predicate, pointer_node)) 60 graph.add((pointer_node, POINTER_NAMESPACE.reference, snippet_from_file_ref)) 61 if pointer_class == POINTER_NAMESPACE.ByteOffsetPointer: 62 graph.add((pointer_node, POINTER_NAMESPACE.offset, Literal(value))) 63 else: 64 graph.add((pointer_node, POINTER_NAMESPACE.lineNumber, Literal(value))) 65 66 graph.add((snippet_node, SPDX_NAMESPACE.range, start_end_pointer))