diff --git a/src/spdx/writer/rdf/package_writer.py b/src/spdx/writer/rdf/package_writer.py index 37f963f91..602c6992b 100644 --- a/src/spdx/writer/rdf/package_writer.py +++ b/src/spdx/writer/rdf/package_writer.py @@ -54,7 +54,7 @@ def add_package_to_graph(package: Package, graph: Graph, doc_namespace: str, add_optional_literal(package.description, graph, package_resource, SPDX_NAMESPACE.description) add_optional_literal(package.comment, graph, package_resource, RDFS.comment) for external_reference in package.external_references: - add_external_package_ref_to_graph(external_reference, graph, package_resource) + add_external_package_ref_to_graph(external_reference, graph, package_resource, doc_namespace) for attribution_text in package.attribution_texts: add_optional_literal(attribution_text, graph, package_resource, SPDX_NAMESPACE.attributionText) if package.primary_package_purpose: @@ -81,7 +81,8 @@ def add_package_verification_code_to_graph(package_verification_code: PackageVer graph.add((package_node, SPDX_NAMESPACE.packageVerificationCode, package_verification_code_node)) -def add_external_package_ref_to_graph(external_package_ref: ExternalPackageRef, graph: Graph, package_node: URIRef): +def add_external_package_ref_to_graph(external_package_ref: ExternalPackageRef, graph: Graph, package_node: URIRef, + doc_namespace: str): external_package_ref_node = BNode() graph.add((external_package_ref_node, RDF.type, SPDX_NAMESPACE.ExternalRef)) graph.add((external_package_ref_node, SPDX_NAMESPACE.referenceCategory, @@ -92,7 +93,7 @@ def add_external_package_ref_to_graph(external_package_ref: ExternalPackageRef, REFERENCE_NAMESPACE[external_package_ref.reference_type])) else: graph.add((external_package_ref_node, SPDX_NAMESPACE.referenceType, - URIRef(external_package_ref.reference_type))) + URIRef(f"{doc_namespace}#{external_package_ref.reference_type}"))) graph.add((external_package_ref_node, SPDX_NAMESPACE.referenceLocator, Literal(external_package_ref.locator))) if external_package_ref.comment: graph.add((external_package_ref_node, RDFS.comment, Literal(external_package_ref.comment))) diff --git a/tests/spdx/writer/rdf/test_package_writer.py b/tests/spdx/writer/rdf/test_package_writer.py index 7d2bd20df..abec88493 100644 --- a/tests/spdx/writer/rdf/test_package_writer.py +++ b/tests/spdx/writer/rdf/test_package_writer.py @@ -8,7 +8,9 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import pytest from rdflib import Graph, URIRef, RDF, Literal, XSD, RDFS, DOAP +from spdx.model.package import ExternalPackageRefCategory from spdx.datetime_conversions import datetime_to_iso_string from spdx.writer.rdf.package_writer import add_package_to_graph, add_external_package_ref_to_graph, \ @@ -63,14 +65,22 @@ def test_add_package_verification_code_to_graph(): assert (None, SPDX_NAMESPACE.packageVerificationCodeExcludedFile, Literal("./exclude.py")) in graph -def test_external_package_ref_to_graph(): +@pytest.mark.parametrize("external_reference,ref_type,category", + [(external_package_ref_fixture(), URIRef("http://spdx.org/rdf/references/maven-central"), + SPDX_NAMESPACE.referenceCategory_packageManager), + (external_package_ref_fixture(locator="acmecorp/acmenator/4.1.3-alpha", + category=ExternalPackageRefCategory.OTHER, + reference_type="LocationRef-acmeforge", + comment="This is the external ref for Acme"), + URIRef("https://some.namespace#LocationRef-acmeforge"), + SPDX_NAMESPACE.referenceCategory_other)]) +def test_external_package_ref_to_graph(external_reference, ref_type, category): graph = Graph() - external_reference = external_package_ref_fixture() - - add_external_package_ref_to_graph(external_reference, graph, URIRef("docNamespace")) + doc_namespace = "https://some.namespace" + add_external_package_ref_to_graph(external_reference, graph, URIRef("docNamespace"), doc_namespace) assert (None, RDF.type, SPDX_NAMESPACE.ExternalRef) in graph - assert (None, SPDX_NAMESPACE.referenceCategory, SPDX_NAMESPACE.referenceCategory_packageManager) in graph - assert (None, SPDX_NAMESPACE.referenceType, URIRef("http://spdx.org/rdf/references/maven-central")) in graph - assert (None, SPDX_NAMESPACE.referenceLocator, Literal("org.apache.tomcat:tomcat:9.0.0.M4")) in graph - assert (None, RDFS.comment, Literal("externalPackageRefComment")) in graph + assert (None, SPDX_NAMESPACE.referenceCategory, category) in graph + assert (None, SPDX_NAMESPACE.referenceType, ref_type) in graph + assert (None, SPDX_NAMESPACE.referenceLocator, Literal(external_reference.locator)) in graph + assert (None, RDFS.comment, Literal(external_reference.comment)) in graph