diff --git a/cyclonedx/model/bom.py b/cyclonedx/model/bom.py
index 776fa8344..a46708572 100644
--- a/cyclonedx/model/bom.py
+++ b/cyclonedx/model/bom.py
@@ -552,7 +552,9 @@ def validate(self) -> bool:
         # 1. Make sure dependencies are all in this Bom.
         all_bom_refs = set(map(lambda c: c.bom_ref, self._get_all_components())) | set(
             map(lambda s: s.bom_ref, self.services))
-        all_dependency_bom_refs = set().union(*(d.dependencies_as_bom_refs() for d in self.dependencies))
+        all_dependency_bom_refs = set(chain((d.ref for d in self.dependencies),
+                                            chain.from_iterable(
+                                                d.dependencies_as_bom_refs() for d in self.dependencies)))
 
         dependency_diff = all_dependency_bom_refs - all_bom_refs
         if len(dependency_diff) > 0:
diff --git a/cyclonedx/model/component.py b/cyclonedx/model/component.py
index 516e11b71..29e51eed5 100644
--- a/cyclonedx/model/component.py
+++ b/cyclonedx/model/component.py
@@ -19,7 +19,6 @@
 from enum import Enum
 from os.path import exists
 from typing import Any, Iterable, Optional, Set, Union
-from uuid import uuid4
 
 # See https://github.com/package-url/packageurl-python/issues/65
 import serializable
@@ -769,7 +768,7 @@ def __init__(self, *, name: str, type: ComponentType = ComponentType.LIBRARY,
         if isinstance(bom_ref, BomRef):
             self._bom_ref = bom_ref
         else:
-            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else str(uuid4()))
+            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else None)
         self.supplier = supplier
         self.author = author
         self.publisher = publisher
@@ -809,8 +808,6 @@ def __init__(self, *, name: str, type: ComponentType = ComponentType.LIBRARY,
             if not licenses:
                 self.licenses = [LicenseChoice(expression=license_str)]  # type: ignore
 
-        self.__dependencies: "SortedSet[BomRef]" = SortedSet()
-
     @property
     @serializable.xml_attribute()
     def type(self) -> ComponentType:
diff --git a/cyclonedx/model/dependency.py b/cyclonedx/model/dependency.py
index 34155874f..317de1613 100644
--- a/cyclonedx/model/dependency.py
+++ b/cyclonedx/model/dependency.py
@@ -108,4 +108,4 @@ class Dependable(ABC):
     @property
     @abstractmethod
     def bom_ref(self) -> BomRef:
-        pass
+        ...
diff --git a/cyclonedx/model/service.py b/cyclonedx/model/service.py
index 16efea3a3..f681659a1 100644
--- a/cyclonedx/model/service.py
+++ b/cyclonedx/model/service.py
@@ -14,7 +14,6 @@
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
 from typing import Any, Iterable, Optional, Union
-from uuid import uuid4
 
 import serializable
 from sortedcontainers import SortedSet
@@ -66,7 +65,7 @@ def __init__(self, *, name: str, bom_ref: Optional[Union[str, BomRef]] = None,
         if isinstance(bom_ref, BomRef):
             self._bom_ref = bom_ref
         else:
-            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else str(uuid4()))
+            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else None)
         self.provider = provider
         self.group = group
         self.name = name
diff --git a/cyclonedx/model/vulnerability.py b/cyclonedx/model/vulnerability.py
index 004a28e18..53bcf453a 100644
--- a/cyclonedx/model/vulnerability.py
+++ b/cyclonedx/model/vulnerability.py
@@ -21,7 +21,6 @@
 from decimal import Decimal
 from enum import Enum
 from typing import Any, Iterable, Optional, Tuple, Union
-from uuid import uuid4
 
 import serializable
 from sortedcontainers import SortedSet
@@ -837,7 +836,7 @@ def __init__(self, *, bom_ref: Optional[Union[str, BomRef]] = None, id: Optional
         if isinstance(bom_ref, BomRef):
             self._bom_ref = bom_ref
         else:
-            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else str(uuid4()))
+            self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else None)
         self.id = id
         self.source = source
         self.references = references or []  # type: ignore
diff --git a/cyclonedx/schema/__init__.py b/cyclonedx/schema/__init__.py
index 9c592c252..ef2a696fe 100644
--- a/cyclonedx/schema/__init__.py
+++ b/cyclonedx/schema/__init__.py
@@ -32,6 +32,9 @@ class OutputFormat(Enum):
     def __hash__(self) -> int:
         return hash(self.name)
 
+    def __eq__(self, other: Any) -> bool:
+        return self is other
+
 
 _SV = TypeVar('_SV', bound='SchemaVersion')
 
diff --git a/pyproject.toml b/pyproject.toml
index feeaf0133..dbe4a8743 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -61,7 +61,7 @@ keywords = [
 # ATTENTION: keep `deps.lowest.r` file in sync
 python = "^3.8"
 packageurl-python = ">= 0.11"
-py-serializable =  "^0.14.0"
+py-serializable =  "^0.14.1"
 sortedcontainers = "^2.4.0"
 license-expression = "^30"
 jsonschema = { version = "^4.18", extras=['format'], optional=true }
diff --git a/tests/__init__.py b/tests/__init__.py
index ff33a2b8e..f70814842 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -16,9 +16,137 @@
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
 from os import getenv, path
+from os.path import join
+from typing import TYPE_CHECKING, Any, Generator, Iterable, List, Optional, TypeVar, Union
+from unittest import TestCase
+from uuid import UUID
 
-TESTDATA_DIRECTORY = path.join(path.dirname(__file__), '_data')
+from sortedcontainers import SortedSet
 
-RECREATE_SNAPSHOTS = bool(getenv('CDX_TEST_RECREATE_SNAPSHOTS'))
+from cyclonedx.schema import OutputFormat, SchemaVersion
+
+if TYPE_CHECKING:
+    from cyclonedx.model.bom import Bom
+    from cyclonedx.model.dependency import Dependency
+
+_T = TypeVar('_T')
+
+_TESTDATA_DIRECTORY = path.join(path.dirname(__file__), '_data')
+
+SCHEMA_TESTDATA_DIRECTORY = path.join(_TESTDATA_DIRECTORY, 'schemaTestData')
+OWN_DATA_DIRECTORY = path.join(_TESTDATA_DIRECTORY, 'own')
+SNAPSHOTS_DIRECTORY = path.join(_TESTDATA_DIRECTORY, 'snapshots')
+
+RECREATE_SNAPSHOTS = '1' == getenv('CDX_TEST_RECREATE_SNAPSHOTS')
 if RECREATE_SNAPSHOTS:
     print('!!! WILL RECREATE ALL SNAPSHOTS !!!')
+
+
+class SnapshotMixin:
+
+    @staticmethod
+    def getSnapshotFile(snapshot_name: str) -> str:
+        return join(SNAPSHOTS_DIRECTORY, f'{snapshot_name}.bin')
+
+    @classmethod
+    def writeSnapshot(cls, snapshot_name: str, data: str) -> None:
+        with open(cls.getSnapshotFile(snapshot_name), 'w') as s:
+            s.write(data)
+
+    @classmethod
+    def readSnapshot(cls, snapshot_name: str) -> str:
+        with open(cls.getSnapshotFile(snapshot_name), 'r') as s:
+            return s.read()
+
+    def assertEqualSnapshot(self: Union[TestCase, 'SnapshotMixin'], actual: str, snapshot_name: str) -> None:
+        if RECREATE_SNAPSHOTS:
+            self.writeSnapshot(snapshot_name, actual)
+        _omd = self.maxDiff
+        _omd = self.maxDiff
+        self.maxDiff = None
+        try:
+            self.assertEqual(actual, self.readSnapshot(snapshot_name))
+        finally:
+            self.maxDiff = _omd
+
+
+class DeepCompareMixin:
+    def assertDeepEqual(self: Union[TestCase, 'DeepCompareMixin'], first: Any, second: Any,
+                        msg: Optional[str] = None) -> None:
+        """costly compare, but very verbose"""
+        _omd = self.maxDiff
+        self.maxDiff = None
+        try:
+            self.maxDiff = None
+            dd1 = self.__deepDict(first)
+            dd2 = self.__deepDict(second)
+            self.assertDictEqual(dd1, dd2, msg)
+        finally:
+            self.maxDiff = _omd
+
+    def __deepDict(self, o: Any) -> Any:
+        if isinstance(o, tuple):
+            return tuple(self.__deepDict(i) for i in o)
+        if isinstance(o, list):
+            return list(self.__deepDict(i) for i in o)
+        if isinstance(o, dict):
+            return {k: self.__deepDict(v) for k, v in o.items()}
+        if isinstance(o, (set, SortedSet)):
+            # this method returns dict. `dict` is not hashable, so use `tuple` instead.
+            return tuple(self.__deepDict(i) for i in sorted(o, key=hash)) + ('%conv:%set',)
+        if hasattr(o, '__dict__'):
+            d = {a: self.__deepDict(v) for a, v in o.__dict__.items() if '__' not in a}
+            d['%conv'] = str(type(o))
+            return d
+        return o
+
+    def assertBomDeepEqual(self: Union[TestCase, 'DeepCompareMixin'], expected: 'Bom', actual: 'Bom',
+                           msg: Optional[str] = None, *,
+                           fuzzy_deps: bool = True) -> None:
+        # deps might have been upgraded on serialization, so they might differ
+        edeps = expected.dependencies
+        adeps = actual.dependencies
+        if fuzzy_deps:
+            expected.dependencies = []
+            actual.dependencies = []
+        try:
+            self.assertDeepEqual(expected, actual, msg)
+            if fuzzy_deps:
+                self._assertDependenciesFuzzyEqual(edeps, adeps)
+        finally:
+            expected.dependencies = edeps
+            actual.dependencies = adeps
+
+    def _assertDependenciesFuzzyEqual(self: TestCase, a: Iterable['Dependency'], b: Iterable['Dependency']) -> None:
+        delta = set(a) ^ set(b)
+        for d in delta:
+            # only actual relevant dependencies shall be taken into account.
+            self.assertEqual(0, len(d.dependencies), f'unexpected dependencies for {d.ref}')
+
+
+def reorder(items: List[_T], indexes: List[int]) -> List[_T]:
+    """
+    Return list of items in the order indicated by indexes.
+    """
+    reordered_items = []
+    for i in range(len(items)):
+        reordered_items.append(items[indexes[i]])
+    return reordered_items
+
+
+def uuid_generator(offset: int = 0, version: int = 4) -> Generator[UUID, None, None]:
+    v = offset
+    while True:
+        v += 1
+        yield UUID(int=v, version=version)
+
+
+_SNAME_EXT = {
+    OutputFormat.JSON: 'json',
+    OutputFormat.XML: 'xml',
+}
+
+
+def mksname(purpose: Union[Any], sv: SchemaVersion, f: OutputFormat) -> str:
+    purpose = purpose if isinstance(purpose, str) else purpose.__name__
+    return f'{purpose}-{sv.to_version()}.{_SNAME_EXT[f]}'
diff --git a/tests/_data/__init__.py b/tests/_data/__init__.py
new file mode 100644
index 000000000..308d97e7c
--- /dev/null
+++ b/tests/_data/__init__.py
@@ -0,0 +1,18 @@
+# encoding: utf-8
+
+# This file is part of CycloneDX Python Lib
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) OWASP Foundation. All Rights Reserved.
diff --git a/tests/data.py b/tests/_data/models.py
similarity index 82%
rename from tests/data.py
rename to tests/_data/models.py
index 3d8829318..d1e6e2ba7 100644
--- a/tests/data.py
+++ b/tests/_data/models.py
@@ -16,9 +16,11 @@
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
 import base64
+import sys
 from datetime import datetime, timezone
 from decimal import Decimal
-from typing import List, Optional, TypeVar
+from inspect import getmembers, isfunction
+from typing import Any, List, Optional
 from uuid import UUID
 
 # See https://github.com/package-url/packageurl-python/issues/65
@@ -26,6 +28,7 @@
 
 from cyclonedx.model import (
     AttachedText,
+    Copyright,
     DataClassification,
     DataFlow,
     Encoding,
@@ -43,29 +46,31 @@
     XsUri,
 )
 from cyclonedx.model.bom import Bom, BomMetaData
+from cyclonedx.model.bom_ref import BomRef
 from cyclonedx.model.component import (
     Commit,
     Component,
     ComponentEvidence,
     ComponentScope,
     ComponentType,
-    Copyright,
     Patch,
     PatchClassification,
     Pedigree,
     Swid,
 )
 from cyclonedx.model.dependency import Dependency
+from cyclonedx.model.impact_analysis import (
+    ImpactAnalysisAffectedStatus,
+    ImpactAnalysisJustification,
+    ImpactAnalysisResponse,
+    ImpactAnalysisState,
+)
 from cyclonedx.model.issue import IssueClassification, IssueType, IssueTypeSource
 from cyclonedx.model.release_note import ReleaseNotes
 from cyclonedx.model.service import Service
 from cyclonedx.model.vulnerability import (
     BomTarget,
     BomTargetVersionRange,
-    ImpactAnalysisAffectedStatus,
-    ImpactAnalysisJustification,
-    ImpactAnalysisResponse,
-    ImpactAnalysisState,
     Vulnerability,
     VulnerabilityAdvisory,
     VulnerabilityAnalysis,
@@ -77,49 +82,64 @@
     VulnerabilitySource,
 )
 
-MOCK_TIMESTAMP: datetime = datetime(2021, 12, 31, 10, 0, 0, 0).replace(tzinfo=timezone.utc)
-MOCK_UUID_1 = 'be2c6502-7e9a-47db-9a66-e34f729810a3'
-MOCK_UUID_2 = '17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda'
-MOCK_UUID_3 = '0b049d09-64c0-4490-a0f5-c84d9aacf857'
-MOCK_UUID_4 = 'cd3e9c95-9d41-49e7-9924-8cf0465ae789'
-MOCK_UUID_5 = 'bb5911d6-1a1d-41c9-b6e0-46e848d16655'
-MOCK_UUID_6 = 'df70b5f1-8f53-47a4-be48-669ae78795e6'
-MOCK_UUID_7 = UUID('6f266d1c-760f-4552-ae3b-41a9b74232fa')
-MOCK_UUID_8 = UUID('77d15ab9-5602-4cca-8ed2-59ae579aafd3')
-MOCK_UUID_9 = UUID('859ff614-35a7-4d37-803b-d89130cb2577')
-MOCK_UUID_10 = UUID('0afa65bc-4acd-428b-9e17-8e97b1969745')
-MOCK_BOM_UUID_1 = UUID('3e671687-395b-41f5-a30f-a58921a69b79')
-MOCK_BOM_UUID_2 = UUID('d0b24ba4-102b-497e-b31f-4fdc3f0a3005')
-
-TEST_UUIDS = [
-    UUID(MOCK_UUID_1), UUID(MOCK_UUID_2), UUID(MOCK_UUID_3), UUID(MOCK_UUID_4), UUID(MOCK_UUID_5), UUID(MOCK_UUID_6)
-]
+MOCK_TIMESTAMP = datetime.fromisoformat('2023-08-15 01:23:45.678900+00:00')
+
+MOCK_UUID = (
+    'be2c6502-7e9a-47db-9a66-e34f729810a3',
+    '17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda',
+    '0b049d09-64c0-4490-a0f5-c84d9aacf857',
+    'cd3e9c95-9d41-49e7-9924-8cf0465ae789',
+    'bb5911d6-1a1d-41c9-b6e0-46e848d16655',
+    'df70b5f1-8f53-47a4-be48-669ae78795e6',
+    '6f266d1c-760f-4552-ae3b-41a9b74232fa',
+    '77d15ab9-5602-4cca-8ed2-59ae579aafd3',
+    '859ff614-35a7-4d37-803b-d89130cb2577',
+    '0afa65bc-4acd-428b-9e17-8e97b1969745',
+    '3e671687-395b-41f5-a30f-a58921a69b79',
+    'd0b24ba4-102b-497e-b31f-4fdc3f0a3005',
+    'd0e0a795-6177-478b-b293-b0d19e4469f4',
+    '7b2a7a2c-66d5-4b30-8ee2-df966a41024e',
+    '68f7b744-84c2-4f0d-ac8b-c14bd48c37ff',
+    '1a2f9dfc-3c86-48c7-8ca7-1db488d5c2a0',
+    'a3f4096d-4211-4d68-9d2b-13973c86aca9',
+)
+
+
+BOM_SERIAL_NUMBER = UUID('1441d33a-e0fc-45b5-af3b-61ee52a88bac')
+BOM_TIMESTAMP = datetime.fromisoformat('2023-01-07 13:44:32.312678+00:00')
+
+
+def _makeBom(**kwargs: Any) -> Bom:
+    bom = Bom(**kwargs)
+    bom.serial_number = BOM_SERIAL_NUMBER
+    bom.metadata.timestamp = BOM_TIMESTAMP
+    return bom
 
 
 def get_bom_with_component_setuptools_basic() -> Bom:
-    return Bom(components=[get_component_setuptools_simple()])
+    return _makeBom(components=[get_component_setuptools_simple()])
 
 
 def get_bom_with_component_setuptools_with_cpe() -> Bom:
     component = get_component_setuptools_simple()
     component.cpe = 'cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*'
-    return Bom(components=[component])
+    return _makeBom(components=[component])
 
 
 def get_bom_with_component_setuptools_no_component_version() -> Bom:
-    return Bom(components=[get_component_setuptools_simple_no_version()])
+    return _makeBom(components=[get_component_setuptools_simple_no_version()])
 
 
 def get_bom_with_component_setuptools_with_release_notes() -> Bom:
     component = get_component_setuptools_simple()
     component.release_notes = get_release_notes()
-    return Bom(components=[component])
+    return _makeBom(components=[component])
 
 
 def get_bom_with_dependencies_valid() -> Bom:
     c1 = get_component_setuptools_simple()
     c2 = get_component_toml_with_hashes_with_references()
-    return Bom(
+    return _makeBom(
         components=[c1, c2], dependencies=[
             Dependency(ref=c1.bom_ref, dependencies=[
                 Dependency(ref=c2.bom_ref)
@@ -136,8 +156,7 @@ def get_bom_with_dependencies_hanging() -> Bom:
     """
     c1 = get_component_setuptools_simple('setuptools')
     c2 = get_component_toml_with_hashes_with_references('toml')
-    bom = Bom(
-        serial_number=UUID(hex='12345678395b41f5a30f1234567890ab'),
+    bom = _makeBom(
         version=23,
         metadata=BomMetaData(
             component=Component(name='rootComponent', type=ComponentType.APPLICATION, bom_ref='root-component'),
@@ -150,37 +169,38 @@ def get_bom_with_dependencies_hanging() -> Bom:
             Dependency(c2.bom_ref)
         ]
     )
-    bom.metadata.tools.clear()
-    bom.metadata.timestamp = datetime(
-        year=2023, month=6, day=1,
-        hour=3, minute=3, second=7, microsecond=0,
-        tzinfo=timezone.utc)
     return bom
 
 
-def get_bom_with_dependencies_invalid() -> Bom:
+def get_bom_with_dependencies_unlinked_invalid() -> Bom:
+    """generate a bom with an unlinked dependency.
+    it is expected to throw on output.
+    """
     c1 = get_component_setuptools_simple()
-    return Bom(components=[c1], dependencies=[Dependency(ref=c1.bom_ref)])
+    return _makeBom(components=[c1], dependencies=[Dependency(ref=BomRef('link-to-ref-not-in-document'))])
 
 
 def get_bom_with_metadata_component_and_dependencies() -> Bom:
-    bom = Bom(components=[get_component_toml_with_hashes_with_references()])
+    cs = get_component_toml_with_hashes_with_references()
+    bom = _makeBom(components=[cs])
     bom.metadata.component = get_component_setuptools_simple()
     bom.dependencies.add(
         Dependency(ref=bom.metadata.component.bom_ref, dependencies=[
-            Dependency(ref=get_component_toml_with_hashes_with_references().bom_ref)
+            Dependency(ref=cs.bom_ref)
         ])
     )
     return bom
 
 
 def get_bom_with_component_setuptools_complete() -> Bom:
-    return Bom(components=[get_component_setuptools_complete()])
+    return _makeBom(components=[get_component_setuptools_complete()])
 
 
 def get_bom_with_component_setuptools_with_vulnerability() -> Bom:
-    bom = Bom()
+    bom = _makeBom()
     component = get_component_setuptools_simple()
+    if not component.purl:
+        raise ValueError('purl is required here')
     bom.components.add(component)
     bom.vulnerabilities.add(Vulnerability(
         bom_ref='my-vuln-ref-1', id='CVE-2018-7489', source=get_vulnerability_source_nvd(),
@@ -191,12 +211,12 @@ def get_bom_with_component_setuptools_with_vulnerability() -> Bom:
         ],
         ratings=[
             VulnerabilityRating(
-                source=get_vulnerability_source_nvd(), score=Decimal(9.8), severity=VulnerabilitySeverity.CRITICAL,
+                source=get_vulnerability_source_nvd(), score=Decimal('9.8'), severity=VulnerabilitySeverity.CRITICAL,
                 method=VulnerabilityScoreSource.CVSS_V3,
                 vector='AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H', justification='Some justification'
             ),
             VulnerabilityRating(
-                source=get_vulnerability_source_owasp(), score=Decimal(2.7), severity=VulnerabilitySeverity.LOW,
+                source=get_vulnerability_source_owasp(), score=Decimal('2.7'), severity=VulnerabilitySeverity.LOW,
                 method=VulnerabilityScoreSource.CVSS_V3,
                 vector='AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N', justification='Some other justification'
             )
@@ -228,7 +248,7 @@ def get_bom_with_component_setuptools_with_vulnerability() -> Bom:
         ),
         affects=[
             BomTarget(
-                ref=component.purl.to_string() if component.purl else None,
+                ref=component.purl.to_string(),
                 versions=[BomTargetVersionRange(
                     range='49.0.0 - 54.0.0', status=ImpactAnalysisAffectedStatus.AFFECTED
                 )]
@@ -240,11 +260,11 @@ def get_bom_with_component_setuptools_with_vulnerability() -> Bom:
 
 
 def get_bom_with_component_toml_1() -> Bom:
-    return Bom(components=[get_component_toml_with_hashes_with_references()])
+    return _makeBom(components=[get_component_toml_with_hashes_with_references()])
 
 
 def get_bom_just_complete_metadata() -> Bom:
-    bom = Bom()
+    bom = _makeBom()
     bom.metadata.authors = [get_org_contact_1(), get_org_contact_2()]
     bom.metadata.component = get_component_setuptools_complete()
     bom.metadata.manufacture = get_org_entity_1()
@@ -259,25 +279,26 @@ def get_bom_just_complete_metadata() -> Bom:
 
 
 def get_bom_with_external_references() -> Bom:
-    bom = Bom(external_references=[
+    bom = _makeBom(external_references=[
         get_external_reference_1(), get_external_reference_2()
     ])
     return bom
 
 
 def get_bom_with_services_simple() -> Bom:
-    bom = Bom(services=[
-        Service(name='my-first-service'),
-        Service(name='my-second-service')
+    bom = _makeBom(services=[
+        Service(name='my-first-service', bom_ref='my-specific-bom-ref-for-my-first-service'),
+        Service(name='my-second-service', bom_ref='my-specific-bom-ref-for-my-second-service')
     ])
     bom.metadata.component = Component(
-        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY
+        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY,
+        bom_ref='my-specific-bom-ref-for-cpl'
     )
     return bom
 
 
 def get_bom_with_services_complex() -> Bom:
-    bom = Bom(services=[
+    bom = _makeBom(services=[
         Service(
             name='my-first-service', bom_ref='my-specific-bom-ref-for-my-first-service',
             provider=get_org_entity_1(), group='a-group', version='1.2.3',
@@ -297,16 +318,17 @@ def get_bom_with_services_complex() -> Bom:
             properties=get_properties_1(),
             release_notes=get_release_notes()
         ),
-        Service(name='my-second-service')
+        Service(name='my-second-service', bom_ref='my-specific-bom-ref-for-my-second-service')
     ])
     bom.metadata.component = Component(
-        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY
+        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY,
+        bom_ref='my-specific-bom-ref-for-cpl'
     )
     return bom
 
 
 def get_bom_with_nested_services() -> Bom:
-    bom = Bom(services=[
+    bom = _makeBom(services=[
         Service(
             name='my-first-service', bom_ref='my-specific-bom-ref-for-my-first-service',
             provider=get_org_entity_1(), group='a-group', version='1.2.3',
@@ -326,7 +348,7 @@ def get_bom_with_nested_services() -> Bom:
             properties=get_properties_1(),
             services=[
                 Service(
-                    name='first-nested-service'
+                    name='first-nested-service', bom_ref='my-specific-bom-ref-for-first-nested-service',
                 ),
                 Service(
                     name='second-nested-service', bom_ref='my-specific-bom-ref-for-second-nested-service',
@@ -338,6 +360,7 @@ def get_bom_with_nested_services() -> Bom:
         ),
         Service(
             name='my-second-service',
+            bom_ref='my-specific-bom-ref-for-my-second-service',
             services=[
                 Service(
                     name='yet-another-nested-service', provider=get_org_entity_1(), group='what-group', version='6.5.4'
@@ -350,7 +373,8 @@ def get_bom_with_nested_services() -> Bom:
         )
     ])
     bom.metadata.component = Component(
-        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY
+        name='cyclonedx-python-lib', version='1.0.0', type=ComponentType.LIBRARY,
+        bom_ref='my-specific-bom-ref-for-cpl'
     )
     return bom
 
@@ -360,10 +384,10 @@ def get_bom_for_issue_275_components() -> Bom:
     see https://github.com/CycloneDX/cyclonedx-python-lib/issues/275
     """
 
-    app = Component(bom_ref=MOCK_UUID_1, name="app", version="1.0.0")
-    comp_a = Component(bom_ref=MOCK_UUID_2, name="comp_a", version="1.0.0")
-    comp_b = Component(bom_ref=MOCK_UUID_3, name="comp_b", version="1.0.0")
-    comp_c = Component(bom_ref=MOCK_UUID_4, name="comp_c", version="1.0.0")
+    app = Component(bom_ref=MOCK_UUID[0], name="app", version="1.0.0")
+    comp_a = Component(bom_ref=MOCK_UUID[1], name="comp_a", version="1.0.0")
+    comp_b = Component(bom_ref=MOCK_UUID[2], name="comp_b", version="1.0.0")
+    comp_c = Component(bom_ref=MOCK_UUID[3], name="comp_c", version="1.0.0")
 
     comp_b.components.add(comp_c)
     # comp_b.dependencies.add(comp_c.bom_ref)
@@ -372,7 +396,7 @@ def get_bom_for_issue_275_components() -> Bom:
     # app.dependencies.add(comp_a.bom_ref)
     # app.dependencies.add(comp_b.bom_ref)
 
-    bom = Bom(components=libs)
+    bom = _makeBom(components=libs)
     bom.metadata.component = app
     bom.register_dependency(target=app, depends_on=[comp_a, comp_b])
     bom.register_dependency(target=comp_b, depends_on=[comp_c])
@@ -391,7 +415,7 @@ def get_bom_for_issue_275_components() -> Bom:
 #    serv_b.services.add(serv_c)
 #    serv_b.dependencies.add(serv_c.bom_ref)
 #
-#    bom = Bom(services=[serv_a, serv_b])
+#    bom = _makeBom(services=[serv_a, serv_b])
 #    bom.metadata.component = app
 #    return bom
 
@@ -400,6 +424,7 @@ def get_bom_for_issue_328_components() -> Bom:
     """regression test for issue #328
     see https://github.com/CycloneDX/cyclonedx-python-lib/issues/328
     """
+    bom = _makeBom()
 
     comp_root = Component(type=ComponentType.APPLICATION,
                           name='my-project', version='1', bom_ref='my-project')
@@ -410,19 +435,20 @@ def get_bom_for_issue_328_components() -> Bom:
     # Make a tree of components A -> B -> C
     comp_a.components = [comp_b]
     comp_b.components = [comp_c]
-    # Declare dependencies the same way: A -> B -> C
-    comp_a.dependencies = [comp_b.bom_ref]
-    comp_b.dependencies = [comp_c.bom_ref]
 
-    bom = Bom()
     bom.metadata.component = comp_root
-    comp_root.dependencies = [comp_a.bom_ref]
+    bom.register_dependency(comp_root, [comp_a])
     bom.components = [comp_a]
+
+    # Declare dependencies the same way: A -> B -> C
+    bom.register_dependency(comp_a, [comp_b])
+    bom.register_dependency(comp_b, [comp_c])
+
     return bom
 
 
 def get_component_setuptools_complete(include_pedigree: bool = True) -> Component:
-    component = get_component_setuptools_simple(bom_ref=None)
+    component = get_component_setuptools_simple(bom_ref='my-specific-bom-ref-for-dings')
     component.supplier = get_org_entity_1()
     component.publisher = 'CycloneDX'
     component.description = 'This component is awesome'
@@ -691,14 +717,28 @@ def get_bom_service_licenses_invalid() -> Bom:
     ])
 
 
-T = TypeVar('T')
+all_get_bom_funct_valid = tuple(
+    (n, f) for n, f in getmembers(sys.modules[__name__], isfunction)
+    if n.startswith('get_bom_') and not n.endswith('_invalid')
+)
 
+all_get_bom_funct_invalid = tuple(
+    (n, f) for n, f in getmembers(sys.modules[__name__], isfunction)
+    if n.startswith('get_bom_') and n.endswith('_invalid')
+)
 
-def reorder(items: List[T], indexes: List[int]) -> List[T]:
-    """
-    Return list of items in the order indicated by indexes.
-    """
-    reordered_items = []
-    for i in range(len(items)):
-        reordered_items.append(items[indexes[i]])
-    return reordered_items
+all_get_bom_funct_with_incomplete_deps = {
+    get_bom_just_complete_metadata,
+    get_bom_with_component_setuptools_basic,
+    get_bom_with_component_setuptools_complete,
+    get_bom_with_component_setuptools_no_component_version,
+    get_bom_with_component_setuptools_with_cpe,
+    get_bom_with_component_setuptools_with_release_notes,
+    get_bom_with_component_setuptools_with_vulnerability,
+    get_bom_with_component_toml_1,
+    get_bom_with_dependencies_hanging,
+    get_bom_with_metadata_component_and_dependencies,
+    get_bom_with_nested_services,
+    get_bom_with_services_complex,
+    get_bom_with_services_simple,
+}
diff --git a/tests/_data/own/.gitattributes b/tests/_data/own/.gitattributes
index 759d4136b..2b6ec797a 100644
--- a/tests/_data/own/.gitattributes
+++ b/tests/_data/own/.gitattributes
@@ -1,3 +1,2 @@
-*               binary
-xml/*/*.xml     linguist-generated diff=xml
-json/*/*.json   linguist-generated diff=json
+xml/*/*.xml     linguist-generated
+json/*/*.json   linguist-generated
diff --git a/tests/_data/own/README.md b/tests/_data/own/README.md
index f97432444..ad527e194 100644
--- a/tests/_data/own/README.md
+++ b/tests/_data/own/README.md
@@ -1,13 +1 @@
 # TEST FIXTURES
-
-## RE-CREATION
-
-Some assets here can be (re-)created automatically, by setting the env var `CDX_TEST_RECREATE_SNAPSHOTS=1`.  
-It might also help to set `PYTHONHASHSEED=0`!  
-As a shortcut just run:
-
-```shell
-CDX_TEST_RECREATE_SNAPSHOTS=1 poetry run tox -e py
-```
-
-The files will be written as is, which might not be human-readable. feel free to reformat the files manually.
diff --git a/tests/_data/own/json/1.4/bom_setuptools.json b/tests/_data/own/json/1.4/bom_setuptools.json
deleted file mode 100644
index 4fd30cacd..000000000
--- a/tests/_data/own/json/1.4/bom_setuptools.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ]
-  },
-  "components": [
-    {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ],
-  "dependencies": [
-    {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ]
-}
diff --git a/tests/_data/own/json/1.4/indented_4spaces.json b/tests/_data/own/json/1.4/indented_4spaces.json
deleted file mode 100644
index a37dc693d..000000000
--- a/tests/_data/own/json/1.4/indented_4spaces.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-    "components": [
-        {
-            "author": "Test Author",
-            "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-            "licenses": [
-                {
-                    "expression": "MIT License"
-                }
-            ],
-            "name": "setuptools",
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-            "type": "library",
-            "version": "50.3.2"
-        }
-    ],
-    "dependencies": [
-        {
-            "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-        }
-    ],
-    "metadata": {
-        "timestamp": "2021-12-31T10:00:00+00:00",
-        "tools": [
-            {
-                "externalReferences": [
-                    {
-                        "type": "build-system",
-                        "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
-                    },
-                    {
-                        "type": "distribution",
-                        "url": "https://pypi.org/project/cyclonedx-python-lib/"
-                    },
-                    {
-                        "type": "documentation",
-                        "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
-                    },
-                    {
-                        "type": "issue-tracker",
-                        "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
-                    },
-                    {
-                        "type": "license",
-                        "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
-                    },
-                    {
-                        "type": "release-notes",
-                        "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
-                    },
-                    {
-                        "type": "vcs",
-                        "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
-                    },
-                    {
-                        "type": "website",
-                        "url": "https://cyclonedx.org"
-                    }
-                ],
-                "name": "cyclonedx-python-lib",
-                "vendor": "CycloneDX",
-                "version": "TESTING"
-            }
-        ]
-    },
-    "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-    "version": 1,
-    "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-    "bomFormat": "CycloneDX",
-    "specVersion": "1.4"
-}
\ No newline at end of file
diff --git a/tests/_data/own/json/1.4/indented_None.json b/tests/_data/own/json/1.4/indented_None.json
deleted file mode 100644
index 5f0687d8c..000000000
--- a/tests/_data/own/json/1.4/indented_None.json
+++ /dev/null
@@ -1 +0,0 @@
-{"components": [{"author": "Test Author", "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz", "licenses": [{"expression": "MIT License"}], "name": "setuptools", "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz", "type": "library", "version": "50.3.2"}], "dependencies": [{"ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"}], "metadata": {"timestamp": "2021-12-31T10:00:00+00:00", "tools": [{"externalReferences": [{"type": "build-system", "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"}, {"type": "distribution", "url": "https://pypi.org/project/cyclonedx-python-lib/"}, {"type": "documentation", "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"}, {"type": "issue-tracker", "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"}, {"type": "license", "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"}, {"type": "release-notes", "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"}, {"type": "vcs", "url": "https://github.com/CycloneDX/cyclonedx-python-lib"}, {"type": "website", "url": "https://cyclonedx.org"}], "name": "cyclonedx-python-lib", "vendor": "CycloneDX", "version": "TESTING"}]}, "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79", "version": 1, "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.4"}
\ No newline at end of file
diff --git a/tests/_data/own/json/1.4/indented_tab.json b/tests/_data/own/json/1.4/indented_tab.json
deleted file mode 100644
index 5f4ddb09a..000000000
--- a/tests/_data/own/json/1.4/indented_tab.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-	"components": [
-		{
-			"author": "Test Author",
-			"bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-			"licenses": [
-				{
-					"expression": "MIT License"
-				}
-			],
-			"name": "setuptools",
-			"purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-			"type": "library",
-			"version": "50.3.2"
-		}
-	],
-	"dependencies": [
-		{
-			"ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-		}
-	],
-	"metadata": {
-		"timestamp": "2021-12-31T10:00:00+00:00",
-		"tools": [
-			{
-				"externalReferences": [
-					{
-						"type": "build-system",
-						"url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
-					},
-					{
-						"type": "distribution",
-						"url": "https://pypi.org/project/cyclonedx-python-lib/"
-					},
-					{
-						"type": "documentation",
-						"url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
-					},
-					{
-						"type": "issue-tracker",
-						"url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
-					},
-					{
-						"type": "license",
-						"url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
-					},
-					{
-						"type": "release-notes",
-						"url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
-					},
-					{
-						"type": "vcs",
-						"url": "https://github.com/CycloneDX/cyclonedx-python-lib"
-					},
-					{
-						"type": "website",
-						"url": "https://cyclonedx.org"
-					}
-				],
-				"name": "cyclonedx-python-lib",
-				"vendor": "CycloneDX",
-				"version": "TESTING"
-			}
-		]
-	},
-	"serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-	"version": 1,
-	"$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-	"bomFormat": "CycloneDX",
-	"specVersion": "1.4"
-}
\ No newline at end of file
diff --git a/tests/_data/own/xml/1.0/bom_issue_275_components.xml b/tests/_data/own/xml/1.0/bom_issue_275_components.xml
deleted file mode 100644
index c7c26afb1..000000000
--- a/tests/_data/own/xml/1.0/bom_issue_275_components.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>comp_a</name>
-            <version>1.0.0</version>
-            <modified>false</modified>
-        </component>
-        <component type="library">
-            <name>comp_b</name>
-            <version>1.0.0</version>
-            <modified>false</modified>
-            <components>
-                <component type="library">
-                    <name>comp_c</name>
-                    <version>1.0.0</version>
-                    <modified>false</modified>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_issue_328_components.xml b/tests/_data/own/xml/1.0/bom_issue_328_components.xml
deleted file mode 100644
index 3d2dc7ab9..000000000
--- a/tests/_data/own/xml/1.0/bom_issue_328_components.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>A</name>
-            <version>0.1</version>
-            <modified>false</modified>
-            <components>
-                <component type="library">
-                    <name>B</name>
-                    <version>1.0</version>
-                    <modified>false</modified>
-                    <components>
-                        <component type="library">
-                            <name>C</name>
-                            <version>1.0</version>
-                            <modified>false</modified>
-                        </component>
-                    </components>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_setuptools.xml b/tests/_data/own/xml/1.0/bom_setuptools.xml
deleted file mode 100644
index a88232144..000000000
--- a/tests/_data/own/xml/1.0/bom_setuptools.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <modified>false</modified>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_setuptools_complete.xml b/tests/_data/own/xml/1.0/bom_setuptools_complete.xml
deleted file mode 100644
index 796fce001..000000000
--- a/tests/_data/own/xml/1.0/bom_setuptools_complete.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <modified>false</modified>
-            <components>
-                <component type="library">
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    <modified>false</modified>
-                </component>
-                <component type="library">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <modified>false</modified>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_setuptools_no_version.xml b/tests/_data/own/xml/1.0/bom_setuptools_no_version.xml
deleted file mode 100644
index 2871e097f..000000000
--- a/tests/_data/own/xml/1.0/bom_setuptools_no_version.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>setuptools</name>
-            <version/>
-            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-            <modified>false</modified>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_setuptools_with_cpe.xml b/tests/_data/own/xml/1.0/bom_setuptools_with_cpe.xml
deleted file mode 100644
index 0b7982aec..000000000
--- a/tests/_data/own/xml/1.0/bom_setuptools_with_cpe.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <modified>false</modified>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.0/bom_toml_hashes_and_references.xml b/tests/_data/own/xml/1.0/bom_toml_hashes_and_references.xml
deleted file mode 100644
index 04b1faa65..000000000
--- a/tests/_data/own/xml/1.0/bom_toml_hashes_and_references.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components>
-        <component type="library">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <modified>false</modified>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_dependencies.xml b/tests/_data/own/xml/1.1/bom_dependencies.xml
deleted file mode 100644
index 44cb1a8d7..000000000
--- a/tests/_data/own/xml/1.1/bom_dependencies.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_empty.xml b/tests/_data/own/xml/1.1/bom_empty.xml
deleted file mode 100644
index 07db9157f..000000000
--- a/tests/_data/own/xml/1.1/bom_empty.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components/>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_external_references.xml b/tests/_data/own/xml/1.1/bom_external_references.xml
deleted file mode 100644
index 1100a3e88..000000000
--- a/tests/_data/own/xml/1.1/bom_external_references.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components/>
-    <externalReferences>
-        <reference type="distribution">
-            <url>https://cyclonedx.org</url>
-            <comment>No comment</comment>
-        </reference>
-        <reference type="website">
-            <url>https://cyclonedx.org</url>
-        </reference>
-    </externalReferences>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_issue_275_components.xml b/tests/_data/own/xml/1.1/bom_issue_275_components.xml
deleted file mode 100644
index 19b2b3573..000000000
--- a/tests/_data/own/xml/1.1/bom_issue_275_components.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>comp_a</name>
-            <version>1.0.0</version>
-        </component>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>comp_b</name>
-            <version>1.0.0</version>
-            <components>
-                <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-                    <name>comp_c</name>
-                    <version>1.0.0</version>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_issue_328_components.xml b/tests/_data/own/xml/1.1/bom_issue_328_components.xml
deleted file mode 100644
index b72c3bcc6..000000000
--- a/tests/_data/own/xml/1.1/bom_issue_328_components.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:fa443043-7dca-4c17-b9bc-e8b63faa9711">
-    <components>
-        <component type="library" bom-ref="component-A">
-            <name>A</name>
-            <version>0.1</version>
-            <components>
-                <component type="library" bom-ref="component-B">
-                    <name>B</name>
-                    <version>1.0</version>
-                    <components>
-                        <component type="library" bom-ref="component-C">
-                            <name>C</name>
-                            <version>1.0</version>
-                        </component>
-                    </components>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_setuptools.xml b/tests/_data/own/xml/1.1/bom_setuptools.xml
deleted file mode 100644
index 74c050f1a..000000000
--- a/tests/_data/own/xml/1.1/bom_setuptools.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_setuptools_complete.xml b/tests/_data/own/xml/1.1/bom_setuptools_complete.xml
deleted file mode 100644
index b18d1d36f..000000000
--- a/tests/_data/own/xml/1.1/bom_setuptools_complete.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_setuptools_no_version.xml b/tests/_data/own/xml/1.1/bom_setuptools_no_version.xml
deleted file mode 100644
index 2a24f4bc1..000000000
--- a/tests/_data/own/xml/1.1/bom_setuptools_no_version.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
-            <name>setuptools</name>
-            <version/>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_setuptools_with_cpe.xml b/tests/_data/own/xml/1.1/bom_setuptools_with_cpe.xml
deleted file mode 100644
index b8e9cf150..000000000
--- a/tests/_data/own/xml/1.1/bom_setuptools_with_cpe.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_setuptools_with_vulnerabilities.xml b/tests/_data/own/xml/1.1/bom_setuptools_with_vulnerabilities.xml
deleted file mode 100644
index 555d41868..000000000
--- a/tests/_data/own/xml/1.1/bom_setuptools_with_vulnerabilities.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:98149a18-a918-4083-837f-e006d26ab3b4"
-     xmlns:v="http://cyclonedx.org/schema/ext/vulnerability/1.0">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <v:vulnerabilities>
-                <v:vulnerability ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <v:id>CVE-2018-7489</v:id>
-                    <v:source name="NVD">
-                        <v:url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:url>
-                    </v:source>
-                    <v:ratings>
-                        <v:rating>
-                            <v:score>
-                                <v:base>9.8</v:base>
-                            </v:score>
-                            <v:severity>Critical</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</v:vector>
-                        </v:rating>
-                        <v:rating>
-                            <v:score>
-                                <v:base>2.7</v:base>
-                            </v:score>
-                            <v:severity>Low</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N</v:vector>
-                        </v:rating>
-                    </v:ratings>
-                    <v:cwes>
-                        <v:cwe>22</v:cwe>
-                        <v:cwe>33</v:cwe>
-                    </v:cwes>
-                    <v:description>A description here</v:description>
-                    <v:recommendations>
-                        <v:recommendation>Upgrade</v:recommendation>
-                    </v:recommendations>
-                    <v:advisories>
-                        <v:advisory>http://www.securitytracker.com/id/1040693</v:advisory>
-                        <v:advisory>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:advisory>
-                    </v:advisories>
-                </v:vulnerability>
-            </v:vulnerabilities>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.1/bom_toml_hashes_and_references.xml b/tests/_data/own/xml/1.1/bom_toml_hashes_and_references.xml
deleted file mode 100644
index 4020f6fef..000000000
--- a/tests/_data/own/xml/1.1/bom_toml_hashes_and_references.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.1" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_dependencies.xml b/tests/_data/own/xml/1.2/bom_dependencies.xml
deleted file mode 100644
index a3a52dc7d..000000000
--- a/tests/_data/own/xml/1.2/bom_dependencies.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_dependencies_component.xml b/tests/_data/own/xml/1.2/bom_dependencies_component.xml
deleted file mode 100644
index b301d92c0..000000000
--- a/tests/_data/own/xml/1.2/bom_dependencies_component.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_external_references.xml b/tests/_data/own/xml/1.2/bom_external_references.xml
deleted file mode 100644
index 3187c7a97..000000000
--- a/tests/_data/own/xml/1.2/bom_external_references.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <externalReferences>
-        <reference type="distribution">
-            <url>https://cyclonedx.org</url>
-            <comment>No comment</comment>
-        </reference>
-        <reference type="website">
-            <url>https://cyclonedx.org</url>
-        </reference>
-    </externalReferences>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_issue_275_components.xml b/tests/_data/own/xml/1.2/bom_issue_275_components.xml
deleted file mode 100644
index 2c0584bc8..000000000
--- a/tests/_data/own/xml/1.2/bom_issue_275_components.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>app</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>comp_a</name>
-            <version>1.0.0</version>
-        </component>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>comp_b</name>
-            <version>1.0.0</version>
-            <components>
-                <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-                    <name>comp_c</name>
-                    <version>1.0.0</version>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-            <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        </dependency>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-        </dependency>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_issue_328_components.xml b/tests/_data/own/xml/1.2/bom_issue_328_components.xml
deleted file mode 100644
index b5093aaea..000000000
--- a/tests/_data/own/xml/1.2/bom_issue_328_components.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:b348cb37-e5e3-4b10-81ac-fc4e2f72dbd6">
-    <metadata>
-        <timestamp>2023-01-07T13:52:31.865875+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="application" bom-ref="my-project">
-            <name>my-project</name>
-            <version>1</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="component-A">
-            <name>A</name>
-            <version>0.1</version>
-            <components>
-                <component type="library" bom-ref="component-B">
-                    <name>B</name>
-                    <version>1.0</version>
-                    <components>
-                        <component type="library" bom-ref="component-C">
-                            <name>C</name>
-                            <version>1.0</version>
-                        </component>
-                    </components>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="my-project">
-            <dependency ref="component-A"/>
-        </dependency>
-        <dependency ref="component-A">
-            <dependency ref="component-B"/>
-        </dependency>
-        <dependency ref="component-B">
-            <dependency ref="component-C"/>
-        </dependency>
-        <dependency ref="component-C"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_services_complex.xml b/tests/_data/own/xml/1.2/bom_services_complex.xml
deleted file mode 100644
index fb379dd24..000000000
--- a/tests/_data/own/xml/1.2/bom_services_complex.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </service>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3"/>
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_services_nested.xml b/tests/_data/own/xml/1.2/bom_services_nested.xml
deleted file mode 100644
index b3fce9899..000000000
--- a/tests/_data/own/xml/1.2/bom_services_nested.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="df70b5f1-8f53-47a4-be48-669ae78795e6">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-            <services>
-                <service bom-ref="my-specific-bom-ref-for-second-nested-service">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>no-group</group>
-                    <name>second-nested-service</name>
-                    <version>3.2.1</version>
-                    <authenticated>true</authenticated>
-                    <x-trust-boundary>false</x-trust-boundary>
-                </service>
-                <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-                    <name>first-nested-service</name>
-                </service>
-            </services>
-        </service>
-        <service bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>my-second-service</name>
-            <services>
-                <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>what-group</group>
-                    <name>yet-another-nested-service</name>
-                    <version>6.5.4</version>
-                </service>
-                <service bom-ref="my-specific-bom-ref-for-another-nested-service">
-                    <name>another-nested-service</name>
-                </service>
-            </services>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="df70b5f1-8f53-47a4-be48-669ae78795e6"/>
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_services_simple.xml b/tests/_data/own/xml/1.2/bom_services_simple.xml
deleted file mode 100644
index 7595971a2..000000000
--- a/tests/_data/own/xml/1.2/bom_services_simple.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-first-service</name>
-        </service>
-        <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3"/>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_setuptools.xml b/tests/_data/own/xml/1.2/bom_setuptools.xml
deleted file mode 100644
index ffdfcc422..000000000
--- a/tests/_data/own/xml/1.2/bom_setuptools.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_setuptools_complete.xml b/tests/_data/own/xml/1.2/bom_setuptools_complete.xml
deleted file mode 100644
index 4a16c92c7..000000000
--- a/tests/_data/own/xml/1.2/bom_setuptools_complete.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_setuptools_no_version.xml b/tests/_data/own/xml/1.2/bom_setuptools_no_version.xml
deleted file mode 100644
index c80352ac6..000000000
--- a/tests/_data/own/xml/1.2/bom_setuptools_no_version.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version/>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_setuptools_with_cpe.xml b/tests/_data/own/xml/1.2/bom_setuptools_with_cpe.xml
deleted file mode 100644
index f143d86ea..000000000
--- a/tests/_data/own/xml/1.2/bom_setuptools_with_cpe.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_setuptools_with_vulnerabilities.xml b/tests/_data/own/xml/1.2/bom_setuptools_with_vulnerabilities.xml
deleted file mode 100644
index 39e4c53c3..000000000
--- a/tests/_data/own/xml/1.2/bom_setuptools_with_vulnerabilities.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:985deff3-4e92-4284-a6da-eab046d13ecf"
-     xmlns:v="http://cyclonedx.org/schema/ext/vulnerability/1.0">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.626402+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <v:vulnerabilities>
-                <v:vulnerability ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <v:id>CVE-2018-7489</v:id>
-                    <v:source name="NVD">
-                        <v:url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:url>
-                    </v:source>
-                    <v:ratings>
-                        <v:rating>
-                            <v:score>
-                                <v:base>9.8</v:base>
-                            </v:score>
-                            <v:severity>Critical</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</v:vector>
-                        </v:rating>
-                        <v:rating>
-                            <v:score>
-                                <v:base>2.7</v:base>
-                            </v:score>
-                            <v:severity>Low</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N</v:vector>
-                        </v:rating>
-                    </v:ratings>
-                    <v:cwes>
-                        <v:cwe>22</v:cwe>
-                        <v:cwe>33</v:cwe>
-                    </v:cwes>
-                    <v:description>A description here</v:description>
-                    <v:recommendations>
-                        <v:recommendation>Upgrade</v:recommendation>
-                    </v:recommendations>
-                    <v:advisories>
-                        <v:advisory>http://www.securitytracker.com/id/1040693</v:advisory>
-                        <v:advisory>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:advisory>
-                    </v:advisories>
-                </v:vulnerability>
-            </v:vulnerabilities>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_toml_hashes_and_references.xml b/tests/_data/own/xml/1.2/bom_toml_hashes_and_references.xml
deleted file mode 100644
index 30cf691b6..000000000
--- a/tests/_data/own/xml/1.2/bom_toml_hashes_and_references.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.2/bom_with_full_metadata.xml b/tests/_data/own/xml/1.2/bom_with_full_metadata.xml
deleted file mode 100644
index 056af1731..000000000
--- a/tests/_data/own/xml/1.2/bom_with_full_metadata.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.2" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <authors>
-            <author>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </author>
-            <author>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </author>
-        </authors>
-        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                </reference>
-            </externalReferences>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-        </component>
-        <manufacture>
-            <name>CycloneDX</name>
-            <url>https://cyclonedx.org</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-            <contact>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </contact>
-        </manufacture>
-        <supplier>
-            <name>Cyclone DX</name>
-            <url>https://cyclonedx.org/</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-        </supplier>
-    </metadata>
-    <dependencies>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_dependencies.xml b/tests/_data/own/xml/1.3/bom_dependencies.xml
deleted file mode 100644
index 3685ff849..000000000
--- a/tests/_data/own/xml/1.3/bom_dependencies.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_dependencies_component.xml b/tests/_data/own/xml/1.3/bom_dependencies_component.xml
deleted file mode 100644
index bbe61960d..000000000
--- a/tests/_data/own/xml/1.3/bom_dependencies_component.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_external_references.xml b/tests/_data/own/xml/1.3/bom_external_references.xml
deleted file mode 100644
index 443d36cc8..000000000
--- a/tests/_data/own/xml/1.3/bom_external_references.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <externalReferences>
-        <reference type="distribution">
-            <url>https://cyclonedx.org</url>
-            <comment>No comment</comment>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-        </reference>
-        <reference type="website">
-            <url>https://cyclonedx.org</url>
-        </reference>
-    </externalReferences>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_issue_275_components.xml b/tests/_data/own/xml/1.3/bom_issue_275_components.xml
deleted file mode 100644
index d41ae90b5..000000000
--- a/tests/_data/own/xml/1.3/bom_issue_275_components.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>app</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>comp_a</name>
-            <version>1.0.0</version>
-        </component>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>comp_b</name>
-            <version>1.0.0</version>
-            <components>
-                <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-                    <name>comp_c</name>
-                    <version>1.0.0</version>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-            <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        </dependency>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-        </dependency>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_issue_328_components.xml b/tests/_data/own/xml/1.3/bom_issue_328_components.xml
deleted file mode 100644
index ad5e62583..000000000
--- a/tests/_data/own/xml/1.3/bom_issue_328_components.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:2c421d7e-7a78-46db-a60c-6648b2b76eea">
-    <metadata>
-        <timestamp>2023-01-07T13:52:32.198166+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="application" bom-ref="my-project">
-            <name>my-project</name>
-            <version>1</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="component-A">
-            <name>A</name>
-            <version>0.1</version>
-            <components>
-                <component type="library" bom-ref="component-B">
-                    <name>B</name>
-                    <version>1.0</version>
-                    <components>
-                        <component type="library" bom-ref="component-C">
-                            <name>C</name>
-                            <version>1.0</version>
-                        </component>
-                    </components>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="my-project">
-            <dependency ref="component-A"/>
-        </dependency>
-        <dependency ref="component-A">
-            <dependency ref="component-B"/>
-        </dependency>
-        <dependency ref="component-B">
-            <dependency ref="component-C"/>
-        </dependency>
-        <dependency ref="component-C"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_services_complex.xml b/tests/_data/own/xml/1.3/bom_services_complex.xml
deleted file mode 100644
index f62058f0b..000000000
--- a/tests/_data/own/xml/1.3/bom_services_complex.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-        </service>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789" />
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_services_nested.xml b/tests/_data/own/xml/1.3/bom_services_nested.xml
deleted file mode 100644
index ccb0684d6..000000000
--- a/tests/_data/own/xml/1.3/bom_services_nested.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="df70b5f1-8f53-47a4-be48-669ae78795e6">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <services>
-                <service bom-ref="my-specific-bom-ref-for-second-nested-service">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>no-group</group>
-                    <name>second-nested-service</name>
-                    <version>3.2.1</version>
-                    <authenticated>true</authenticated>
-                    <x-trust-boundary>false</x-trust-boundary>
-                </service>
-                <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-                    <name>first-nested-service</name>
-                </service>
-            </services>
-        </service>
-        <service bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>my-second-service</name>
-            <services>
-                <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>what-group</group>
-                    <name>yet-another-nested-service</name>
-                    <version>6.5.4</version>
-                </service>
-                <service bom-ref="my-specific-bom-ref-for-another-nested-service">
-                    <name>another-nested-service</name>
-                </service>
-            </services>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="df70b5f1-8f53-47a4-be48-669ae78795e6"/>
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_services_simple.xml b/tests/_data/own/xml/1.3/bom_services_simple.xml
deleted file mode 100644
index 7eaaaa6a5..000000000
--- a/tests/_data/own/xml/1.3/bom_services_simple.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-first-service</name>
-        </service>
-        <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3"/>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_setuptools.xml b/tests/_data/own/xml/1.3/bom_setuptools.xml
deleted file mode 100644
index dbe2a1578..000000000
--- a/tests/_data/own/xml/1.3/bom_setuptools.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_setuptools_complete.xml b/tests/_data/own/xml/1.3/bom_setuptools_complete.xml
deleted file mode 100644
index f9ac65f03..000000000
--- a/tests/_data/own/xml/1.3/bom_setuptools_complete.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                            <hashes>
-                                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                            </hashes>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-            <evidence>
-                <copyright>
-                    <text>Commercial</text>
-                    <text>Commercial 2</text>
-                </copyright>
-            </evidence>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_setuptools_no_version.xml b/tests/_data/own/xml/1.3/bom_setuptools_no_version.xml
deleted file mode 100644
index 9fe150363..000000000
--- a/tests/_data/own/xml/1.3/bom_setuptools_no_version.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version/>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_setuptools_with_cpe.xml b/tests/_data/own/xml/1.3/bom_setuptools_with_cpe.xml
deleted file mode 100644
index 27abd9b21..000000000
--- a/tests/_data/own/xml/1.3/bom_setuptools_with_cpe.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_setuptools_with_vulnerabilities.xml b/tests/_data/own/xml/1.3/bom_setuptools_with_vulnerabilities.xml
deleted file mode 100644
index 6cce456e5..000000000
--- a/tests/_data/own/xml/1.3/bom_setuptools_with_vulnerabilities.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:962e7fd7-d097-4cbe-b2b7-19bf54f71075"
-     xmlns:v="http://cyclonedx.org/schema/ext/vulnerability/1.0">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.964601+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <v:vulnerabilities>
-                <v:vulnerability ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <v:id>CVE-2018-7489</v:id>
-                    <v:source name="NVD">
-                        <v:url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:url>
-                    </v:source>
-                    <v:ratings>
-                        <v:rating>
-                            <v:score>
-                                <v:base>9.8</v:base>
-                            </v:score>
-                            <v:severity>Critical</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</v:vector>
-                        </v:rating>
-                        <v:rating>
-                            <v:score>
-                                <v:base>2.7</v:base>
-                            </v:score>
-                            <v:severity>Low</v:severity>
-                            <v:method>CVSSv3</v:method>
-                            <v:vector>AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N</v:vector>
-                        </v:rating>
-                    </v:ratings>
-                    <v:cwes>
-                        <v:cwe>22</v:cwe>
-                        <v:cwe>33</v:cwe>
-                    </v:cwes>
-                    <v:description>A description here</v:description>
-                    <v:recommendations>
-                        <v:recommendation>Upgrade</v:recommendation>
-                    </v:recommendations>
-                    <v:advisories>
-                        <v:advisory>http://www.securitytracker.com/id/1040693</v:advisory>
-                        <v:advisory>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</v:advisory>
-                    </v:advisories>
-                </v:vulnerability>
-            </v:vulnerabilities>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_toml_hashes_and_references.xml b/tests/_data/own/xml/1.3/bom_toml_hashes_and_references.xml
deleted file mode 100644
index 3e3c02bc1..000000000
--- a/tests/_data/own/xml/1.3/bom_toml_hashes_and_references.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.3/bom_with_full_metadata.xml b/tests/_data/own/xml/1.3/bom_with_full_metadata.xml
deleted file mode 100644
index 434dd66cf..000000000
--- a/tests/_data/own/xml/1.3/bom_with_full_metadata.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.3" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-            </tool>
-        </tools>
-        <authors>
-            <author>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </author>
-            <author>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </author>
-        </authors>
-        <component type="library" bom-ref="bb5911d6-1a1d-41c9-b6e0-46e848d16655">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version/>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                            <hashes>
-                                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                            </hashes>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-            <evidence>
-                <copyright>
-                    <text>Commercial</text>
-                    <text>Commercial 2</text>
-                </copyright>
-            </evidence>
-        </component>
-        <manufacture>
-            <name>CycloneDX</name>
-            <url>https://cyclonedx.org</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-            <contact>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </contact>
-        </manufacture>
-        <supplier>
-            <name>Cyclone DX</name>
-            <url>https://cyclonedx.org/</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-        </supplier>
-        <licenses>
-            <license>
-                <id>Apache-2.0</id>
-                <text content-type="text/plain" encoding="base64">VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=</text>
-                <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            </license>
-        </licenses>
-        <properties>
-            <property name="key1">val1</property>
-            <property name="key2">val2</property>
-        </properties>
-    </metadata>
-    <dependencies>
-        <dependency ref="bb5911d6-1a1d-41c9-b6e0-46e848d16655"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_dependencies.xml b/tests/_data/own/xml/1.4/bom_dependencies.xml
deleted file mode 100644
index ecdb150c4..000000000
--- a/tests/_data/own/xml/1.4/bom_dependencies.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_dependencies_component.xml b/tests/_data/own/xml/1.4/bom_dependencies_component.xml
deleted file mode 100644
index 0aadc91a1..000000000
--- a/tests/_data/own/xml/1.4/bom_dependencies_component.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-        </dependency>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_external_references.xml b/tests/_data/own/xml/1.4/bom_external_references.xml
deleted file mode 100644
index 146497d34..000000000
--- a/tests/_data/own/xml/1.4/bom_external_references.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <externalReferences>
-        <reference type="distribution">
-            <url>https://cyclonedx.org</url>
-            <comment>No comment</comment>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-        </reference>
-        <reference type="website">
-            <url>https://cyclonedx.org</url>
-        </reference>
-    </externalReferences>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_issue_275_components.xml b/tests/_data/own/xml/1.4/bom_issue_275_components.xml
deleted file mode 100644
index 7d6924a8b..000000000
--- a/tests/_data/own/xml/1.4/bom_issue_275_components.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>app</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>comp_a</name>
-            <version>1.0.0</version>
-        </component>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>comp_b</name>
-            <version>1.0.0</version>
-            <components>
-                <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-                    <name>comp_c</name>
-                    <version>1.0.0</version>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
-            <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        </dependency>
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-        </dependency>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_issue_328_components.xml b/tests/_data/own/xml/1.4/bom_issue_328_components.xml
deleted file mode 100644
index 004ce30d6..000000000
--- a/tests/_data/own/xml/1.4/bom_issue_328_components.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="application" bom-ref="my-project">
-            <name>my-project</name>
-            <version>1</version>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="component-A">
-            <name>A</name>
-            <version>0.1</version>
-            <components>
-                <component type="library" bom-ref="component-B">
-                    <name>B</name>
-                    <version>1.0</version>
-                    <components>
-                        <component type="library" bom-ref="component-C">
-                            <name>C</name>
-                            <version>1.0</version>
-                        </component>
-                    </components>
-                </component>
-            </components>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="my-project">
-            <dependency ref="component-A"/>
-        </dependency>
-        <dependency ref="component-A">
-            <dependency ref="component-B"/>
-        </dependency>
-        <dependency ref="component-B">
-            <dependency ref="component-C"/>
-        </dependency>
-        <dependency ref="component-C"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_services_complex.xml b/tests/_data/own/xml/1.4/bom_services_complex.xml
deleted file mode 100644
index 03d2c4600..000000000
--- a/tests/_data/own/xml/1.4/bom_services_complex.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <releaseNotes>
-                <type>major</type>
-                <title>Release Notes Title</title>
-                <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
-                <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
-                <description>This release is a test release</description>
-                <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-                <aliases>
-                    <alias>First Test Release</alias>
-                </aliases>
-                <tags>
-                    <tag>alpha</tag>
-                    <tag>test</tag>
-                </tags>
-                <resolves>
-                    <issue type="security">
-                        <id>CVE-2021-44228</id>
-                        <name>Apache Log3Shell</name>
-                        <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
-                        <source>
-                            <name>NVD</name>
-                            <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
-                        </source>
-                        <references>
-                            <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
-                            <url>https://logging.apache.org/log4j/2.x/security.html</url>
-                        </references>
-                    </issue>
-                </resolves>
-                <notes>
-                    <note>
-                        <locale>en-GB</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                    <note>
-                        <locale>en-US</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                </notes>
-                <properties>
-                    <property name="key1">val1</property>
-                    <property name="key2">val2</property>
-                </properties>
-            </releaseNotes>
-        </service>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_services_nested.xml b/tests/_data/own/xml/1.4/bom_services_nested.xml
deleted file mode 100644
index a0cc89ec4..000000000
--- a/tests/_data/own/xml/1.4/bom_services_nested.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="df70b5f1-8f53-47a4-be48-669ae78795e6">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="my-specific-bom-ref-for-my-first-service">
-            <provider>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </provider>
-            <group>a-group</group>
-            <name>my-first-service</name>
-            <version>1.2.3</version>
-            <description>Description goes here</description>
-            <endpoints>
-                <endpoint>/api/thing/1</endpoint>
-                <endpoint>/api/thing/2</endpoint>
-            </endpoints>
-            <authenticated>false</authenticated>
-            <x-trust-boundary>true</x-trust-boundary>
-            <data>
-                <classification flow="outbound">public</classification>
-            </data>
-            <licenses>
-                <expression>Commercial</expression>
-            </licenses>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <services>
-                <service bom-ref="my-specific-bom-ref-for-second-nested-service">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>no-group</group>
-                    <name>second-nested-service</name>
-                    <version>3.2.1</version>
-                    <authenticated>true</authenticated>
-                    <x-trust-boundary>false</x-trust-boundary>
-                </service>
-                <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-                    <name>first-nested-service</name>
-                </service>
-            </services>
-            <releaseNotes>
-                <type>major</type>
-                <title>Release Notes Title</title>
-                <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
-                <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
-                <description>This release is a test release</description>
-                <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-                <aliases>
-                    <alias>First Test Release</alias>
-                </aliases>
-                <tags>
-                    <tag>alpha</tag>
-                    <tag>test</tag>
-                </tags>
-                <resolves>
-                    <issue type="security">
-                        <id>CVE-2021-44228</id>
-                        <name>Apache Log3Shell</name>
-                        <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
-                        <source>
-                            <name>NVD</name>
-                            <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
-                        </source>
-                        <references>
-                            <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
-                            <url>https://logging.apache.org/log4j/2.x/security.html</url>
-                        </references>
-                    </issue>
-                </resolves>
-                <notes>
-                    <note>
-                        <locale>en-GB</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                    <note>
-                        <locale>en-US</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                </notes>
-                <properties>
-                    <property name="key1">val1</property>
-                    <property name="key2">val2</property>
-                </properties>
-            </releaseNotes>
-        </service>
-        <service bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>my-second-service</name>
-            <services>
-                <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-                    <provider>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </provider>
-                    <group>what-group</group>
-                    <name>yet-another-nested-service</name>
-                    <version>6.5.4</version>
-                </service>
-                <service bom-ref="my-specific-bom-ref-for-another-nested-service">
-                    <name>another-nested-service</name>
-                </service>
-            </services>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="df70b5f1-8f53-47a4-be48-669ae78795e6"/>
-        <dependency ref="my-specific-bom-ref-for-my-first-service"/>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857" />
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_services_simple.xml b/tests/_data/own/xml/1.4/bom_services_simple.xml
deleted file mode 100644
index a8c80c9e6..000000000
--- a/tests/_data/own/xml/1.4/bom_services_simple.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
-            <name>cyclonedx-python-lib</name>
-            <version>1.0.0</version>
-        </component>
-    </metadata>
-    <services>
-        <service bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
-            <name>my-first-service</name>
-        </service>
-        <service bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
-            <name>my-second-service</name>
-        </service>
-    </services>
-    <dependencies>
-        <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857" />
-        <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3" />
-        <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda" />
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_setuptools_complete.xml b/tests/_data/own/xml/1.4/bom_setuptools_complete.xml
deleted file mode 100644
index 61ba86898..000000000
--- a/tests/_data/own/xml/1.4/bom_setuptools_complete.xml
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                            <hashes>
-                                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                            </hashes>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-            <evidence>
-                <copyright>
-                    <text>Commercial</text>
-                    <text>Commercial 2</text>
-                </copyright>
-            </evidence>
-            <releaseNotes>
-                <type>major</type>
-                <title>Release Notes Title</title>
-                <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
-                <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
-                <description>This release is a test release</description>
-                <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-                <aliases>
-                    <alias>First Test Release</alias>
-                </aliases>
-                <tags>
-                    <tag>alpha</tag>
-                    <tag>test</tag>
-                </tags>
-                <resolves>
-                    <issue type="security">
-                        <id>CVE-2021-44228</id>
-                        <name>Apache Log3Shell</name>
-                        <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
-                        <source>
-                            <name>NVD</name>
-                            <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
-                        </source>
-                        <references>
-                            <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
-                            <url>https://logging.apache.org/log4j/2.x/security.html</url>
-                        </references>
-                    </issue>
-                </resolves>
-                <notes>
-                    <note>
-                        <locale>en-GB</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                    <note>
-                        <locale>en-US</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                </notes>
-                <properties>
-                    <property name="key1">val1</property>
-                    <property name="key2">val2</property>
-                </properties>
-            </releaseNotes>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_setuptools_no_version.xml b/tests/_data/own/xml/1.4/bom_setuptools_no_version.xml
deleted file mode 100644
index 73becdb0e..000000000
--- a/tests/_data/own/xml/1.4/bom_setuptools_no_version.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_setuptools_with_cpe.xml b/tests/_data/own/xml/1.4/bom_setuptools_with_cpe.xml
deleted file mode 100644
index db9869876..000000000
--- a/tests/_data/own/xml/1.4/bom_setuptools_with_cpe.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_setuptools_with_release_notes.xml b/tests/_data/own/xml/1.4/bom_setuptools_with_release_notes.xml
deleted file mode 100644
index 5467da423..000000000
--- a/tests/_data/own/xml/1.4/bom_setuptools_with_release_notes.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <releaseNotes>
-                <type>major</type>
-                <title>Release Notes Title</title>
-                <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
-                <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
-                <description>This release is a test release</description>
-                <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-                <aliases>
-                    <alias>First Test Release</alias>
-                </aliases>
-                <tags>
-                    <tag>alpha</tag>
-                    <tag>test</tag>
-                </tags>
-                <resolves>
-                    <issue type="security">
-                        <id>CVE-2021-44228</id>
-                        <name>Apache Log3Shell</name>
-                        <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
-                        <source>
-                            <name>NVD</name>
-                            <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
-                        </source>
-                        <references>
-                            <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
-                            <url>https://logging.apache.org/log4j/2.x/security.html</url>
-                        </references>
-                    </issue>
-                </resolves>
-                <notes>
-                    <note>
-                        <locale>en-GB</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                    <note>
-                        <locale>en-US</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                </notes>
-                <properties>
-                    <property name="key1">val1</property>
-                    <property name="key2">val2</property>
-                </properties>
-            </releaseNotes>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_setuptools_with_vulnerabilities.xml b/tests/_data/own/xml/1.4/bom_setuptools_with_vulnerabilities.xml
deleted file mode 100644
index 1936e2863..000000000
--- a/tests/_data/own/xml/1.4/bom_setuptools_with_vulnerabilities.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-    <vulnerabilities>
-        <vulnerability bom-ref="my-vuln-ref-1">
-            <id>CVE-2018-7489</id>
-            <source>
-                <name>NVD</name>
-                <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
-            </source>
-            <references>
-                <reference>
-                    <id>SOME-OTHER-ID</id>
-                    <source>
-                        <name>OSS Index</name>
-                        <url>https://ossindex.sonatype.org/component/pkg:pypi/setuptools</url>
-                    </source>
-                </reference>
-            </references>
-            <ratings>
-                <rating>
-                    <source>
-                        <name>NVD</name>
-                        <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
-                    </source>
-                    <score>9.8</score>
-                    <severity>critical</severity>
-                    <method>CVSSv3</method>
-                    <vector>AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</vector>
-                    <justification>Some justification</justification>
-                </rating>
-                <rating>
-                    <source>
-                        <name>OWASP</name>
-                        <url>https://owasp.org</url>
-                    </source>
-                    <score>2.7</score>
-                    <severity>low</severity>
-                    <method>CVSSv3</method>
-                    <vector>AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N</vector>
-                    <justification>Some other justification</justification>
-                </rating>
-            </ratings>
-            <cwes>
-                <cwe>22</cwe>
-                <cwe>33</cwe>
-            </cwes>
-            <description>A description here</description>
-            <detail>Some detail here</detail>
-            <recommendation>Upgrade</recommendation>
-            <advisories>
-                <advisory>
-                    <url>http://www.securitytracker.com/id/1040693</url>
-                </advisory>
-                <advisory>
-                    <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
-                </advisory>
-            </advisories>
-            <created>2021-09-01T10:50:42.051979+00:00</created>
-            <published>2021-09-02T10:50:42.051979+00:00</published>
-            <updated>2021-09-03T10:50:42.051979+00:00</updated>
-            <credits>
-                <organizations>
-                    <organization>
-                        <name>CycloneDX</name>
-                        <url>https://cyclonedx.org</url>
-                        <contact>
-                            <name>A N Other</name>
-                            <email>someone@somewhere.tld</email>
-                            <phone>+44 (0)1234 567890</phone>
-                        </contact>
-                        <contact>
-                            <name>Paul Horton</name>
-                            <email>paul.horton@owasp.org</email>
-                        </contact>
-                    </organization>
-                </organizations>
-                <individuals>
-                    <individual>
-                        <name>A N Other</name>
-                        <email>someone@somewhere.tld</email>
-                        <phone>+44 (0)1234 567890</phone>
-                    </individual>
-                </individuals>
-            </credits>
-            <tools>
-                <tool>
-                    <vendor>CycloneDX</vendor>
-                    <name>cyclonedx-python-lib</name>
-                </tool>
-            </tools>
-            <analysis>
-                <state>exploitable</state>
-                <justification>requires_environment</justification>
-                <responses>
-                    <response>can_not_fix</response>
-                </responses>
-                <detail>Some extra detail</detail>
-            </analysis>
-            <affects>
-                <target>
-                    <ref>pkg:pypi/setuptools@50.3.2?extension=tar.gz</ref>
-                    <versions>
-                        <version>
-                            <range>49.0.0 - 54.0.0</range>
-                            <status>affected</status>
-                        </version>
-                    </versions>
-                </target>
-            </affects>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-        </vulnerability>
-    </vulnerabilities>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_toml_hashes_and_references.xml b/tests/_data/own/xml/1.4/bom_toml_hashes_and_references.xml
deleted file mode 100644
index 3ead1df94..000000000
--- a/tests/_data/own/xml/1.4/bom_toml_hashes_and_references.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/bom_with_dependencies_hanging.xml b/tests/_data/own/xml/1.4/bom_with_dependencies_hanging.xml
deleted file mode 100644
index 29395f604..000000000
--- a/tests/_data/own/xml/1.4/bom_with_dependencies_hanging.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4"
-     serialNumber="urn:uuid:12345678-395b-41f5-a30f-1234567890ab"
-     version="23">
-    <metadata>
-        <timestamp>2023-06-01T03:03:07+00:00</timestamp>
-        <component type="application" bom-ref="root-component">
-            <name>rootComponent</name>
-        </component>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="setuptools">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-        <component type="library" bom-ref="toml">
-            <name>toml</name>
-            <version>0.10.2</version>
-            <hashes>
-                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-            </hashes>
-            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="root-component"/>
-        <dependency ref="setuptools">
-            <dependency ref="toml"/>
-        </dependency>
-        <dependency ref="toml"/>
-    </dependencies>
-</bom>
-
diff --git a/tests/_data/own/xml/1.4/bom_with_full_metadata.xml b/tests/_data/own/xml/1.4/bom_with_full_metadata.xml
deleted file mode 100644
index 24ee7aa01..000000000
--- a/tests/_data/own/xml/1.4/bom_with_full_metadata.xml
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" version="1"
-     serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79">
-    <metadata>
-        <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-        <authors>
-            <author>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </author>
-            <author>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </author>
-        </authors>
-        <component type="library" bom-ref="df70b5f1-8f53-47a4-be48-669ae78795e6">
-            <supplier>
-                <name>CycloneDX</name>
-                <url>https://cyclonedx.org</url>
-                <contact>
-                    <name>A N Other</name>
-                    <email>someone@somewhere.tld</email>
-                    <phone>+44 (0)1234 567890</phone>
-                </contact>
-                <contact>
-                    <name>Paul Horton</name>
-                    <email>paul.horton@owasp.org</email>
-                </contact>
-            </supplier>
-            <author>Test Author</author>
-            <publisher>CycloneDX</publisher>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <description>This component is awesome</description>
-            <scope>required</scope>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <copyright>Apache 2.0 baby!</copyright>
-            <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-            <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
-                <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
-            </swid>
-            <pedigree>
-                <ancestors>
-                    <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                </ancestors>
-                <descendants>
-                    <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </descendants>
-                <variants>
-                    <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
-                        <author>Test Author</author>
-                        <name>setuptools</name>
-                        <version>50.3.2</version>
-                        <licenses>
-                            <expression>MIT License</expression>
-                        </licenses>
-                        <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                    </component>
-                    <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
-                        <name>toml</name>
-                        <version>0.10.2</version>
-                        <hashes>
-                            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                        </hashes>
-                        <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                        <externalReferences>
-                            <reference type="distribution">
-                                <url>https://cyclonedx.org</url>
-                                <comment>No comment</comment>
-                                <hashes>
-                                    <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                                </hashes>
-                            </reference>
-                        </externalReferences>
-                    </component>
-                </variants>
-                <commits>
-                    <commit>
-                        <uid>a-random-uid</uid>
-                        <message>A commit message</message>
-                    </commit>
-                </commits>
-                <patches>
-                    <patch type="backport"/>
-                </patches>
-                <notes>Some notes here please</notes>
-            </pedigree>
-            <externalReferences>
-                <reference type="distribution">
-                    <url>https://cyclonedx.org</url>
-                    <comment>No comment</comment>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                </reference>
-            </externalReferences>
-            <properties>
-                <property name="key1">val1</property>
-                <property name="key2">val2</property>
-            </properties>
-            <components>
-                <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-                    <author>Test Author</author>
-                    <name>setuptools</name>
-                    <version>50.3.2</version>
-                    <licenses>
-                        <expression>MIT License</expression>
-                    </licenses>
-                    <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-                </component>
-                <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
-                    <name>toml</name>
-                    <version>0.10.2</version>
-                    <hashes>
-                        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                    </hashes>
-                    <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
-                    <externalReferences>
-                        <reference type="distribution">
-                            <url>https://cyclonedx.org</url>
-                            <comment>No comment</comment>
-                            <hashes>
-                                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
-                            </hashes>
-                        </reference>
-                    </externalReferences>
-                </component>
-            </components>
-            <evidence>
-                <copyright>
-                    <text>Commercial</text>
-                    <text>Commercial 2</text>
-                </copyright>
-            </evidence>
-            <releaseNotes>
-                <type>major</type>
-                <title>Release Notes Title</title>
-                <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
-                <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
-                <description>This release is a test release</description>
-                <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-                <aliases>
-                    <alias>First Test Release</alias>
-                </aliases>
-                <tags>
-                    <tag>alpha</tag>
-                    <tag>test</tag>
-                </tags>
-                <resolves>
-                    <issue type="security">
-                        <id>CVE-2021-44228</id>
-                        <name>Apache Log3Shell</name>
-                        <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
-                        <source>
-                            <name>NVD</name>
-                            <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
-                        </source>
-                        <references>
-                            <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
-                            <url>https://logging.apache.org/log4j/2.x/security.html</url>
-                        </references>
-                    </issue>
-                </resolves>
-                <notes>
-                    <note>
-                        <locale>en-GB</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                    <note>
-                        <locale>en-US</locale>
-                        <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
-                    </note>
-                </notes>
-                <properties>
-                    <property name="key1">val1</property>
-                    <property name="key2">val2</property>
-                </properties>
-            </releaseNotes>
-        </component>
-        <manufacture>
-            <name>CycloneDX</name>
-            <url>https://cyclonedx.org</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-            <contact>
-                <name>Paul Horton</name>
-                <email>paul.horton@owasp.org</email>
-            </contact>
-        </manufacture>
-        <supplier>
-            <name>Cyclone DX</name>
-            <url>https://cyclonedx.org/</url>
-            <contact>
-                <name>A N Other</name>
-                <email>someone@somewhere.tld</email>
-                <phone>+44 (0)1234 567890</phone>
-            </contact>
-        </supplier>
-        <licenses>
-            <license>
-                <id>Apache-2.0</id>
-                <text content-type="text/plain" encoding="base64">VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=</text>
-                <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            </license>
-        </licenses>
-        <properties>
-            <property name="key1">val1</property>
-            <property name="key2">val2</property>
-        </properties>
-    </metadata>
-    <dependencies>
-        <dependency ref="df70b5f1-8f53-47a4-be48-669ae78795e6"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/indented_4spaces.xml b/tests/_data/own/xml/1.4/indented_4spaces.xml
deleted file mode 100644
index d59c71266..000000000
--- a/tests/_data/own/xml/1.4/indented_4spaces.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" ?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
-    <metadata>
-        <timestamp>2021-12-31T10:00:00+00:00</timestamp>
-        <tools>
-            <tool>
-                <vendor>CycloneDX</vendor>
-                <name>cyclonedx-python-lib</name>
-                <version>TESTING</version>
-                <externalReferences>
-                    <reference type="build-system">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-                    </reference>
-                    <reference type="distribution">
-                        <url>https://pypi.org/project/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="documentation">
-                        <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-                    </reference>
-                    <reference type="issue-tracker">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-                    </reference>
-                    <reference type="license">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-                    </reference>
-                    <reference type="release-notes">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-                    </reference>
-                    <reference type="vcs">
-                        <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-                    </reference>
-                    <reference type="website">
-                        <url>https://cyclonedx.org</url>
-                    </reference>
-                </externalReferences>
-            </tool>
-        </tools>
-    </metadata>
-    <components>
-        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-            <author>Test Author</author>
-            <name>setuptools</name>
-            <version>50.3.2</version>
-            <licenses>
-                <expression>MIT License</expression>
-            </licenses>
-            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-        </component>
-    </components>
-    <dependencies>
-        <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-    </dependencies>
-</bom>
diff --git a/tests/_data/own/xml/1.4/indented_None.xml b/tests/_data/own/xml/1.4/indented_None.xml
deleted file mode 100644
index 52d425fb9..000000000
--- a/tests/_data/own/xml/1.4/indented_None.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" ?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1"><metadata><timestamp>2021-12-31T10:00:00+00:00</timestamp><tools><tool><vendor>CycloneDX</vendor><name>cyclonedx-python-lib</name><version>TESTING</version><externalReferences><reference type="build-system"><url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url></reference><reference type="distribution"><url>https://pypi.org/project/cyclonedx-python-lib/</url></reference><reference type="documentation"><url>https://cyclonedx.github.io/cyclonedx-python-lib/</url></reference><reference type="issue-tracker"><url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url></reference><reference type="license"><url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url></reference><reference type="release-notes"><url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url></reference><reference type="vcs"><url>https://github.com/CycloneDX/cyclonedx-python-lib</url></reference><reference type="website"><url>https://cyclonedx.org</url></reference></externalReferences></tool></tools></metadata><components><component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"><author>Test Author</author><name>setuptools</name><version>50.3.2</version><licenses><expression>MIT License</expression></licenses><purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl></component></components><dependencies><dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz" /></dependencies></bom>
\ No newline at end of file
diff --git a/tests/_data/own/xml/1.4/indented_tab.xml b/tests/_data/own/xml/1.4/indented_tab.xml
deleted file mode 100644
index 48d7c99f3..000000000
--- a/tests/_data/own/xml/1.4/indented_tab.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" ?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
-	<metadata>
-		<timestamp>2021-12-31T10:00:00+00:00</timestamp>
-		<tools>
-			<tool>
-				<vendor>CycloneDX</vendor>
-				<name>cyclonedx-python-lib</name>
-				<version>TESTING</version>
-				<externalReferences>
-					<reference type="build-system">
-						<url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
-					</reference>
-					<reference type="distribution">
-						<url>https://pypi.org/project/cyclonedx-python-lib/</url>
-					</reference>
-					<reference type="documentation">
-						<url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
-					</reference>
-					<reference type="issue-tracker">
-						<url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
-					</reference>
-					<reference type="license">
-						<url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
-					</reference>
-					<reference type="release-notes">
-						<url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
-					</reference>
-					<reference type="vcs">
-						<url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
-					</reference>
-					<reference type="website">
-						<url>https://cyclonedx.org</url>
-					</reference>
-				</externalReferences>
-			</tool>
-		</tools>
-	</metadata>
-	<components>
-		<component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
-			<author>Test Author</author>
-			<name>setuptools</name>
-			<version>50.3.2</version>
-			<licenses>
-				<expression>MIT License</expression>
-			</licenses>
-			<purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
-		</component>
-	</components>
-	<dependencies>
-		<dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
-	</dependencies>
-</bom>
diff --git a/tests/_data/snapshots/.gitattributes b/tests/_data/snapshots/.gitattributes
new file mode 100644
index 000000000..cb164e3db
--- /dev/null
+++ b/tests/_data/snapshots/.gitattributes
@@ -0,0 +1,3 @@
+# files are compared bype-wise, so they need to be treated as binary
+xml/**      linguist-generated binary diff=xml
+json/**     linguist-generated binary diff=json
diff --git a/tests/_data/snapshots/README.md b/tests/_data/snapshots/README.md
new file mode 100644
index 000000000..f97432444
--- /dev/null
+++ b/tests/_data/snapshots/README.md
@@ -0,0 +1,13 @@
+# TEST FIXTURES
+
+## RE-CREATION
+
+Some assets here can be (re-)created automatically, by setting the env var `CDX_TEST_RECREATE_SNAPSHOTS=1`.  
+It might also help to set `PYTHONHASHSEED=0`!  
+As a shortcut just run:
+
+```shell
+CDX_TEST_RECREATE_SNAPSHOTS=1 poetry run tox -e py
+```
+
+The files will be written as is, which might not be human-readable. feel free to reformat the files manually.
diff --git a/tests/_data/snapshots/get_bom_for_issue_275_components-1.0.xml.bin b/tests/_data/snapshots/get_bom_for_issue_275_components-1.0.xml.bin
new file mode 100644
index 000000000..9c17482c6
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.0.xml.bin
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>comp_a</name>
+      <version>1.0.0</version>
+      <modified>false</modified>
+    </component>
+    <component type="library">
+      <name>comp_b</name>
+      <version>1.0.0</version>
+      <modified>false</modified>
+      <components>
+        <component type="library">
+          <name>comp_c</name>
+          <version>1.0.0</version>
+          <modified>false</modified>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_for_issue_275_components-1.1.xml.bin b/tests/_data/snapshots/get_bom_for_issue_275_components-1.1.xml.bin
new file mode 100644
index 000000000..85289a746
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.1.xml.bin
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
+      <name>comp_a</name>
+      <version>1.0.0</version>
+    </component>
+    <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <name>comp_b</name>
+      <version>1.0.0</version>
+      <components>
+        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
+          <name>comp_c</name>
+          <version>1.0.0</version>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_issue_275_components.json b/tests/_data/snapshots/get_bom_for_issue_275_components-1.2.json.bin
similarity index 79%
rename from tests/_data/own/json/1.2/bom_issue_275_components.json
rename to tests/_data/snapshots/get_bom_for_issue_275_components-1.2.json.bin
index 8fc7cf7e2..b4eef0f9f 100644
--- a/tests/_data/own/json/1.2/bom_issue_275_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.2.json.bin
@@ -1,66 +1,66 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:e8a76c00-84d4-447e-8bc5-d8a3cefd01f0",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.651650+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-      "name": "app",
-      "version": "1.0.0"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
       "name": "comp_a",
+      "type": "library",
       "version": "1.0.0"
     },
     {
-      "type": "library",
       "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-      "name": "comp_b",
-      "version": "1.0.0",
       "components": [
         {
-          "type": "library",
           "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
           "name": "comp_c",
+          "type": "library",
           "version": "1.0.0"
         }
-      ]
+      ],
+      "name": "comp_b",
+      "type": "library",
+      "version": "1.0.0"
     }
   ],
   "dependencies": [
     {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
       "dependsOn": [
-        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-      ]
+        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
+      ],
+      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
     },
     {
       "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
     },
     {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
       "dependsOn": [
-        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-      ]
+        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
+      ],
+      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
     },
     {
       "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "name": "app",
+      "type": "library",
+      "version": "1.0.0"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_275_components-1.2.xml.bin b/tests/_data/snapshots/get_bom_for_issue_275_components-1.2.xml.bin
new file mode 100644
index 000000000..e9568f560
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.2.xml.bin
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <name>app</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
+      <name>comp_a</name>
+      <version>1.0.0</version>
+    </component>
+    <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <name>comp_b</name>
+      <version>1.0.0</version>
+      <components>
+        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
+          <name>comp_c</name>
+          <version>1.0.0</version>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+    </dependency>
+    <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
+      <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    </dependency>
+    <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_issue_275_components.json b/tests/_data/snapshots/get_bom_for_issue_275_components-1.3.json.bin
similarity index 79%
rename from tests/_data/own/json/1.3/bom_issue_275_components.json
rename to tests/_data/snapshots/get_bom_for_issue_275_components-1.3.json.bin
index f1f7596de..b57b1676b 100644
--- a/tests/_data/own/json/1.3/bom_issue_275_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.3.json.bin
@@ -1,66 +1,66 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:4d8c5007-3d0b-4556-bbda-e9902c183b82",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.962469+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-      "name": "app",
-      "version": "1.0.0"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
       "name": "comp_a",
+      "type": "library",
       "version": "1.0.0"
     },
     {
-      "type": "library",
       "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-      "name": "comp_b",
-      "version": "1.0.0",
       "components": [
         {
-          "type": "library",
           "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
           "name": "comp_c",
+          "type": "library",
           "version": "1.0.0"
         }
-      ]
+      ],
+      "name": "comp_b",
+      "type": "library",
+      "version": "1.0.0"
     }
   ],
   "dependencies": [
     {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
       "dependsOn": [
-        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-      ]
+        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
+      ],
+      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
     },
     {
       "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
     },
     {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
       "dependsOn": [
-        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-      ]
+        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
+      ],
+      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
     },
     {
       "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "name": "app",
+      "type": "library",
+      "version": "1.0.0"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_275_components-1.3.xml.bin b/tests/_data/snapshots/get_bom_for_issue_275_components-1.3.xml.bin
new file mode 100644
index 000000000..c77704fc5
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.3.xml.bin
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <name>app</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
+      <name>comp_a</name>
+      <version>1.0.0</version>
+    </component>
+    <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <name>comp_b</name>
+      <version>1.0.0</version>
+      <components>
+        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
+          <name>comp_c</name>
+          <version>1.0.0</version>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+    </dependency>
+    <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
+      <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    </dependency>
+    <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_issue_275_components.json b/tests/_data/snapshots/get_bom_for_issue_275_components-1.4.json.bin
similarity index 71%
rename from tests/_data/own/json/1.4/bom_issue_275_components.json
rename to tests/_data/snapshots/get_bom_for_issue_275_components-1.4.json.bin
index 6826b7a16..32f27cdd8 100644
--- a/tests/_data/own/json/1.4/bom_issue_275_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.4.json.bin
@@ -1,100 +1,100 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:75d08821-33b4-4f66-8577-6caa2fc718ac",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:58.871481+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-      "name": "app",
-      "version": "1.0.0"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
       "name": "comp_a",
+      "type": "library",
       "version": "1.0.0"
     },
     {
-      "type": "library",
       "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-      "name": "comp_b",
-      "version": "1.0.0",
       "components": [
         {
-          "type": "library",
           "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
           "name": "comp_c",
+          "type": "library",
           "version": "1.0.0"
         }
-      ]
+      ],
+      "name": "comp_b",
+      "type": "library",
+      "version": "1.0.0"
     }
   ],
   "dependencies": [
     {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
       "dependsOn": [
-        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-      ]
+        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
+      ],
+      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
     },
     {
       "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
     },
     {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
       "dependsOn": [
-        "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-      ]
+        "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+        "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
+      ],
+      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
     },
     {
       "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "name": "app",
+      "type": "library",
+      "version": "1.0.0"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_275_components-1.4.xml.bin b/tests/_data/snapshots/get_bom_for_issue_275_components-1.4.xml.bin
new file mode 100644
index 000000000..dcd23b6a7
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_275_components-1.4.xml.bin
@@ -0,0 +1,70 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <name>app</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda">
+      <name>comp_a</name>
+      <version>1.0.0</version>
+    </component>
+    <component type="library" bom-ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <name>comp_b</name>
+      <version>1.0.0</version>
+      <components>
+        <component type="library" bom-ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789">
+          <name>comp_c</name>
+          <version>1.0.0</version>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857">
+      <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+    </dependency>
+    <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    <dependency ref="be2c6502-7e9a-47db-9a66-e34f729810a3">
+      <dependency ref="0b049d09-64c0-4490-a0f5-c84d9aacf857"/>
+      <dependency ref="17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"/>
+    </dependency>
+    <dependency ref="cd3e9c95-9d41-49e7-9924-8cf0465ae789"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_for_issue_328_components-1.0.xml.bin b/tests/_data/snapshots/get_bom_for_issue_328_components-1.0.xml.bin
new file mode 100644
index 000000000..8f2aeebc8
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.0.xml.bin
@@ -0,0 +1,24 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>A</name>
+      <version>0.1</version>
+      <modified>false</modified>
+      <components>
+        <component type="library">
+          <name>B</name>
+          <version>1.0</version>
+          <modified>false</modified>
+          <components>
+            <component type="library">
+              <name>C</name>
+              <version>1.0</version>
+              <modified>false</modified>
+            </component>
+          </components>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_for_issue_328_components-1.1.xml.bin b/tests/_data/snapshots/get_bom_for_issue_328_components-1.1.xml.bin
new file mode 100644
index 000000000..210e36e9f
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.1.xml.bin
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="component-A">
+      <name>A</name>
+      <version>0.1</version>
+      <components>
+        <component type="library" bom-ref="component-B">
+          <name>B</name>
+          <version>1.0</version>
+          <components>
+            <component type="library" bom-ref="component-C">
+              <name>C</name>
+              <version>1.0</version>
+            </component>
+          </components>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_issue_328_components.json b/tests/_data/snapshots/get_bom_for_issue_328_components-1.2.json.bin
similarity index 72%
rename from tests/_data/own/json/1.2/bom_issue_328_components.json
rename to tests/_data/snapshots/get_bom_for_issue_328_components-1.2.json.bin
index 1ad1cce25..80f814faa 100644
--- a/tests/_data/own/json/1.2/bom_issue_328_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.2.json.bin
@@ -1,71 +1,70 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:0e7ce694-c130-4965-8716-85015b42c729",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:52:27.732107+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "application",
-      "bom-ref": "my-project",
-      "name": "my-project",
-      "version": "1"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "component-A",
-      "name": "A",
-      "version": "0.1",
       "components": [
         {
-          "type": "library",
           "bom-ref": "component-B",
-          "name": "B",
-          "version": "1.0",
           "components": [
             {
-              "type": "library",
               "bom-ref": "component-C",
               "name": "C",
+              "type": "library",
               "version": "1.0"
             }
-          ]
+          ],
+          "name": "B",
+          "type": "library",
+          "version": "1.0"
         }
-      ]
+      ],
+      "name": "A",
+      "type": "library",
+      "version": "0.1"
     }
   ],
   "dependencies": [
     {
-      "ref": "my-project",
-      "dependsOn": [
-        "component-A"
-      ]
-    },
-    {
-      "ref": "component-A",
       "dependsOn": [
         "component-B"
-      ]
+      ],
+      "ref": "component-A"
     },
     {
-      "ref": "component-B",
       "dependsOn": [
         "component-C"
-      ]
+      ],
+      "ref": "component-B"
     },
     {
-      "ref": "component-C",
-      "dependsOn": []
+      "ref": "component-C"
+    },
+    {
+      "dependsOn": [
+        "component-A"
+      ],
+      "ref": "my-project"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "my-project",
+      "name": "my-project",
+      "type": "application",
+      "version": "1"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_328_components-1.2.xml.bin b/tests/_data/snapshots/get_bom_for_issue_328_components-1.2.xml.bin
new file mode 100644
index 000000000..4e712c8c5
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.2.xml.bin
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="my-project">
+      <name>my-project</name>
+      <version>1</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="component-A">
+      <name>A</name>
+      <version>0.1</version>
+      <components>
+        <component type="library" bom-ref="component-B">
+          <name>B</name>
+          <version>1.0</version>
+          <components>
+            <component type="library" bom-ref="component-C">
+              <name>C</name>
+              <version>1.0</version>
+            </component>
+          </components>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="component-A">
+      <dependency ref="component-B"/>
+    </dependency>
+    <dependency ref="component-B">
+      <dependency ref="component-C"/>
+    </dependency>
+    <dependency ref="component-C"/>
+    <dependency ref="my-project">
+      <dependency ref="component-A"/>
+    </dependency>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_issue_328_components.json b/tests/_data/snapshots/get_bom_for_issue_328_components-1.3.json.bin
similarity index 72%
rename from tests/_data/own/json/1.3/bom_issue_328_components.json
rename to tests/_data/snapshots/get_bom_for_issue_328_components-1.3.json.bin
index 7d515941c..a4dce742d 100644
--- a/tests/_data/own/json/1.3/bom_issue_328_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.3.json.bin
@@ -1,71 +1,70 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d59b94a8-25bc-4876-a1ae-c21a73fecd2c",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:52:28.562184+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "application",
-      "bom-ref": "my-project",
-      "name": "my-project",
-      "version": "1"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "component-A",
-      "name": "A",
-      "version": "0.1",
       "components": [
         {
-          "type": "library",
           "bom-ref": "component-B",
-          "name": "B",
-          "version": "1.0",
           "components": [
             {
-              "type": "library",
               "bom-ref": "component-C",
               "name": "C",
+              "type": "library",
               "version": "1.0"
             }
-          ]
+          ],
+          "name": "B",
+          "type": "library",
+          "version": "1.0"
         }
-      ]
+      ],
+      "name": "A",
+      "type": "library",
+      "version": "0.1"
     }
   ],
   "dependencies": [
     {
-      "ref": "my-project",
-      "dependsOn": [
-        "component-A"
-      ]
-    },
-    {
-      "ref": "component-A",
       "dependsOn": [
         "component-B"
-      ]
+      ],
+      "ref": "component-A"
     },
     {
-      "ref": "component-B",
       "dependsOn": [
         "component-C"
-      ]
+      ],
+      "ref": "component-B"
     },
     {
-      "ref": "component-C",
-      "dependsOn": []
+      "ref": "component-C"
+    },
+    {
+      "dependsOn": [
+        "component-A"
+      ],
+      "ref": "my-project"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "my-project",
+      "name": "my-project",
+      "type": "application",
+      "version": "1"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_328_components-1.3.xml.bin b/tests/_data/snapshots/get_bom_for_issue_328_components-1.3.xml.bin
new file mode 100644
index 000000000..022354c04
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.3.xml.bin
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="my-project">
+      <name>my-project</name>
+      <version>1</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="component-A">
+      <name>A</name>
+      <version>0.1</version>
+      <components>
+        <component type="library" bom-ref="component-B">
+          <name>B</name>
+          <version>1.0</version>
+          <components>
+            <component type="library" bom-ref="component-C">
+              <name>C</name>
+              <version>1.0</version>
+            </component>
+          </components>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="component-A">
+      <dependency ref="component-B"/>
+    </dependency>
+    <dependency ref="component-B">
+      <dependency ref="component-C"/>
+    </dependency>
+    <dependency ref="component-C"/>
+    <dependency ref="my-project">
+      <dependency ref="component-A"/>
+    </dependency>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_issue_328_components.json b/tests/_data/snapshots/get_bom_for_issue_328_components-1.4.json.bin
similarity index 66%
rename from tests/_data/own/json/1.4/bom_issue_328_components.json
rename to tests/_data/snapshots/get_bom_for_issue_328_components-1.4.json.bin
index 278722235..a1ee1181a 100644
--- a/tests/_data/own/json/1.4/bom_issue_328_components.json
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.4.json.bin
@@ -1,105 +1,104 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:282ec6f4-455e-4b07-b4b8-561bad2010c5",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:52:30.247202+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ],
-    "component": {
-      "type": "application",
-      "bom-ref": "my-project",
-      "name": "my-project",
-      "version": "1"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "component-A",
-      "name": "A",
-      "version": "0.1",
       "components": [
         {
-          "type": "library",
           "bom-ref": "component-B",
-          "name": "B",
-          "version": "1.0",
           "components": [
             {
-              "type": "library",
               "bom-ref": "component-C",
               "name": "C",
+              "type": "library",
               "version": "1.0"
             }
-          ]
+          ],
+          "name": "B",
+          "type": "library",
+          "version": "1.0"
         }
-      ]
+      ],
+      "name": "A",
+      "type": "library",
+      "version": "0.1"
     }
   ],
   "dependencies": [
     {
-      "ref": "my-project",
-      "dependsOn": [
-        "component-A"
-      ]
-    },
-    {
-      "ref": "component-A",
       "dependsOn": [
         "component-B"
-      ]
+      ],
+      "ref": "component-A"
     },
     {
-      "ref": "component-B",
       "dependsOn": [
         "component-C"
-      ]
+      ],
+      "ref": "component-B"
+    },
+    {
+      "ref": "component-C"
     },
     {
-      "ref": "component-C",
-      "dependsOn": []
+      "dependsOn": [
+        "component-A"
+      ],
+      "ref": "my-project"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "my-project",
+      "name": "my-project",
+      "type": "application",
+      "version": "1"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_for_issue_328_components-1.4.xml.bin b/tests/_data/snapshots/get_bom_for_issue_328_components-1.4.xml.bin
new file mode 100644
index 000000000..d646d17d1
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_for_issue_328_components-1.4.xml.bin
@@ -0,0 +1,73 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="my-project">
+      <name>my-project</name>
+      <version>1</version>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="component-A">
+      <name>A</name>
+      <version>0.1</version>
+      <components>
+        <component type="library" bom-ref="component-B">
+          <name>B</name>
+          <version>1.0</version>
+          <components>
+            <component type="library" bom-ref="component-C">
+              <name>C</name>
+              <version>1.0</version>
+            </component>
+          </components>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="component-A">
+      <dependency ref="component-B"/>
+    </dependency>
+    <dependency ref="component-B">
+      <dependency ref="component-C"/>
+    </dependency>
+    <dependency ref="component-C"/>
+    <dependency ref="my-project">
+      <dependency ref="component-A"/>
+    </dependency>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/xml/1.0/bom_empty.xml b/tests/_data/snapshots/get_bom_just_complete_metadata-1.0.xml.bin
similarity index 54%
rename from tests/_data/own/xml/1.0/bom_empty.xml
rename to tests/_data/snapshots/get_bom_just_complete_metadata-1.0.xml.bin
index a803aa60f..acb066124 100644
--- a/tests/_data/own/xml/1.0/bom_empty.xml
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.0.xml.bin
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" ?>
 <bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
-    <components/>
+  <components/>
 </bom>
diff --git a/tests/_data/snapshots/get_bom_just_complete_metadata-1.1.xml.bin b/tests/_data/snapshots/get_bom_just_complete_metadata-1.1.xml.bin
new file mode 100644
index 000000000..55ef5cda2
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.1.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_with_full_metadata.json b/tests/_data/snapshots/get_bom_just_complete_metadata-1.2.json.bin
similarity index 80%
rename from tests/_data/own/json/1.2/bom_with_full_metadata.json
rename to tests/_data/snapshots/get_bom_just_complete_metadata-1.2.json.bin
index d24684c69..7233c3c12 100644
--- a/tests/_data/own/json/1.2/bom_with_full_metadata.json
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.2.json.bin
@@ -1,262 +1,262 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-dings"
+    }
+  ],
   "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
     "authors": [
       {
-        "name": "A N Other",
         "email": "someone@somewhere.tld",
+        "name": "A N Other",
         "phone": "+44 (0)1234 567890"
       },
       {
-        "name": "Paul Horton",
-        "email": "paul.horton@owasp.org"
+        "email": "paul.horton@owasp.org",
+        "name": "Paul Horton"
       }
     ],
     "component": {
-      "type": "library",
-      "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          },
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          }
-        ]
-      },
       "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
-      "licenses": [
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
         {
-          "expression": "MIT License"
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
         }
       ],
       "copyright": "Apache 2.0 baby!",
       "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
+      "description": "This component is awesome",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      },
+      ],
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
+            "externalReferences": [
+              {
+                "comment": "No comment",
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
+              }
+            ],
             "hashes": [
               {
                 "alg": "SHA-256",
                 "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
+            "name": "toml",
             "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "externalReferences": [
-              {
-                "url": "https://cyclonedx.org",
-                "comment": "No comment",
-                "type": "distribution"
-              }
-            ]
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
             "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
+            "externalReferences": [
+              {
+                "comment": "No comment",
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
+              }
+            ],
             "hashes": [
               {
                 "alg": "SHA-256",
                 "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
+            "name": "toml",
             "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "externalReferences": [
-              {
-                "url": "https://cyclonedx.org",
-                "comment": "No comment",
-                "type": "distribution"
-              }
-            ]
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "commits": [
+        ]
+      },
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "scope": "required",
+      "supplier": {
+        "contact": [
           {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
           {
-            "type": "backport"
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
         ],
-        "notes": "Some notes here please"
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
       },
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution"
-        }
-      ],
-      "components": [
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "externalReferences": [
-            {
-              "url": "https://cyclonedx.org",
-              "comment": "No comment",
-              "type": "distribution"
-            }
-          ]
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     },
     "manufacture": {
-      "name": "CycloneDX",
-      "url": [
-        "https://cyclonedx.org"
-      ],
       "contact": [
         {
-          "name": "A N Other",
           "email": "someone@somewhere.tld",
+          "name": "A N Other",
           "phone": "+44 (0)1234 567890"
         },
         {
-          "name": "Paul Horton",
-          "email": "paul.horton@owasp.org"
+          "email": "paul.horton@owasp.org",
+          "name": "Paul Horton"
         }
+      ],
+      "name": "CycloneDX",
+      "url": [
+        "https://cyclonedx.org"
       ]
     },
     "supplier": {
-      "name": "Cyclone DX",
-      "url": [
-        "https://cyclonedx.org/"
-      ],
       "contact": [
         {
-          "name": "A N Other",
           "email": "someone@somewhere.tld",
+          "name": "A N Other",
           "phone": "+44 (0)1234 567890"
         }
+      ],
+      "name": "Cyclone DX",
+      "url": [
+        "https://cyclonedx.org/"
       ]
-    }
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
   },
-  "dependencies": [
-    {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_just_complete_metadata-1.2.xml.bin b/tests/_data/snapshots/get_bom_just_complete_metadata-1.2.xml.bin
new file mode 100644
index 000000000..75b6733e3
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.2.xml.bin
@@ -0,0 +1,192 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <authors>
+      <author>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </author>
+      <author>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </author>
+    </authors>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+    </component>
+    <manufacture>
+      <name>CycloneDX</name>
+      <url>https://cyclonedx.org</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+      <contact>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </contact>
+    </manufacture>
+    <supplier>
+      <name>Cyclone DX</name>
+      <url>https://cyclonedx.org/</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+    </supplier>
+  </metadata>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_with_full_metadata.json b/tests/_data/snapshots/get_bom_just_complete_metadata-1.3.json.bin
similarity index 84%
rename from tests/_data/own/json/1.3/bom_with_full_metadata.json
rename to tests/_data/snapshots/get_bom_just_complete_metadata-1.3.json.bin
index 9cd5271c2..1a720cf21 100644
--- a/tests/_data/own/json/1.3/bom_with_full_metadata.json
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.3.json.bin
@@ -1,210 +1,221 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-dings"
+    }
+  ],
   "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
     "authors": [
       {
-        "name": "A N Other",
         "email": "someone@somewhere.tld",
+        "name": "A N Other",
         "phone": "+44 (0)1234 567890"
       },
       {
-        "name": "Paul Horton",
-        "email": "paul.horton@owasp.org"
+        "email": "paul.horton@owasp.org",
+        "name": "Paul Horton"
       }
     ],
     "component": {
-      "type": "library",
-      "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
+      "author": "Test Author",
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
+        {
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "hashes": [
+                {
+                  "alg": "SHA-256",
+                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                }
+              ],
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
+        }
+      ],
+      "copyright": "Apache 2.0 baby!",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
+      "description": "This component is awesome",
+      "evidence": {
+        "copyright": [
           {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
+            "text": "Commercial"
           },
           {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
+            "text": "Commercial 2"
           }
         ]
       },
-      "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "copyright": "Apache 2.0 baby!",
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
-        }
-      },
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
             "externalReferences": [
               {
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
-                "type": "distribution",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
+              }
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
-            ]
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
             "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
             "externalReferences": [
               {
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
-                "type": "distribution",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
-          }
-        ],
-        "commits": [
-          {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
-          {
-            "type": "backport"
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+              }
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "notes": "Some notes here please"
+        ]
       },
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
-        }
-      ],
       "properties": [
         {
           "name": "key1",
@@ -215,101 +226,69 @@
           "value": "val2"
         }
       ],
-      "components": [
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-        },
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "externalReferences": [
-            {
-              "url": "https://cyclonedx.org",
-              "comment": "No comment",
-              "type": "distribution",
-              "hashes": [
-                {
-                  "alg": "SHA-256",
-                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-                }
-              ]
-            }
-          ]
-        }
-      ],
-      "evidence": {
-        "copyright": [
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "scope": "required",
+      "supplier": {
+        "contact": [
           {
-            "text": "Commercial"
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
           },
           {
-            "text": "Commercial 2"
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
         ]
-      }
-    },
-    "manufacture": {
-      "name": "CycloneDX",
-      "url": [
-        "https://cyclonedx.org"
-      ],
-      "contact": [
-        {
-          "name": "A N Other",
-          "email": "someone@somewhere.tld",
-          "phone": "+44 (0)1234 567890"
+      },
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "name": "Paul Horton",
-          "email": "paul.horton@owasp.org"
-        }
-      ]
-    },
-    "supplier": {
-      "name": "Cyclone DX",
-      "url": [
-        "https://cyclonedx.org/"
-      ],
-      "contact": [
-        {
-          "name": "A N Other",
-          "email": "someone@somewhere.tld",
-          "phone": "+44 (0)1234 567890"
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     },
     "licenses": [
       {
         "license": {
           "id": "Apache-2.0",
           "text": {
+            "content": "VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=",
             "contentType": "text/plain",
-            "encoding": "base64",
-            "content": "VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE="
+            "encoding": "base64"
           },
           "url": "https://www.apache.org/licenses/LICENSE-2.0.txt"
         }
       }
     ],
+    "manufacture": {
+      "contact": [
+        {
+          "email": "someone@somewhere.tld",
+          "name": "A N Other",
+          "phone": "+44 (0)1234 567890"
+        },
+        {
+          "email": "paul.horton@owasp.org",
+          "name": "Paul Horton"
+        }
+      ],
+      "name": "CycloneDX",
+      "url": [
+        "https://cyclonedx.org"
+      ]
+    },
     "properties": [
       {
         "name": "key1",
@@ -319,11 +298,32 @@
         "name": "key2",
         "value": "val2"
       }
+    ],
+    "supplier": {
+      "contact": [
+        {
+          "email": "someone@somewhere.tld",
+          "name": "A N Other",
+          "phone": "+44 (0)1234 567890"
+        }
+      ],
+      "name": "Cyclone DX",
+      "url": [
+        "https://cyclonedx.org/"
+      ]
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
     ]
   },
-  "dependencies": [
-    {
-      "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_just_complete_metadata-1.3.xml.bin b/tests/_data/snapshots/get_bom_just_complete_metadata-1.3.xml.bin
new file mode 100644
index 000000000..4b03243b0
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.3.xml.bin
@@ -0,0 +1,225 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <authors>
+      <author>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </author>
+      <author>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </author>
+    </authors>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+              <hashes>
+                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+              </hashes>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+      <evidence>
+        <copyright>
+          <text>Commercial</text>
+          <text>Commercial 2</text>
+        </copyright>
+      </evidence>
+    </component>
+    <manufacture>
+      <name>CycloneDX</name>
+      <url>https://cyclonedx.org</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+      <contact>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </contact>
+    </manufacture>
+    <supplier>
+      <name>Cyclone DX</name>
+      <url>https://cyclonedx.org/</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+    </supplier>
+    <licenses>
+      <license>
+        <id>Apache-2.0</id>
+        <text content-type="text/plain" encoding="base64">VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=</text>
+        <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      </license>
+    </licenses>
+    <properties>
+      <property name="key1">val1</property>
+      <property name="key2">val2</property>
+    </properties>
+  </metadata>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_with_full_metadata.json b/tests/_data/snapshots/get_bom_just_complete_metadata-1.4.json.bin
similarity index 82%
rename from tests/_data/own/json/1.4/bom_with_full_metadata.json
rename to tests/_data/snapshots/get_bom_just_complete_metadata-1.4.json.bin
index 0fab3971e..60b9249af 100644
--- a/tests/_data/own/json/1.4/bom_with_full_metadata.json
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.4.json.bin
@@ -1,242 +1,219 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-dings"
+    }
+  ],
   "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ],
     "authors": [
       {
-        "name": "A N Other",
         "email": "someone@somewhere.tld",
+        "name": "A N Other",
         "phone": "+44 (0)1234 567890"
       },
       {
-        "name": "Paul Horton",
-        "email": "paul.horton@owasp.org"
+        "email": "paul.horton@owasp.org",
+        "name": "Paul Horton"
       }
     ],
     "component": {
-      "type": "library",
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
+      "author": "Test Author",
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
+        {
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "hashes": [
+                {
+                  "alg": "SHA-256",
+                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                }
+              ],
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
+        }
+      ],
+      "copyright": "Apache 2.0 baby!",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
+      "description": "This component is awesome",
+      "evidence": {
+        "copyright": [
           {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
+            "text": "Commercial"
           },
           {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
+            "text": "Commercial 2"
           }
         ]
       },
-      "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "copyright": "Apache 2.0 baby!",
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
-        }
-      },
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library"
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library"
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
             "externalReferences": [
               {
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
-                "type": "distribution",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+              }
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
             "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
             "externalReferences": [
               {
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
-                "type": "distribution",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
-          }
-        ],
-        "commits": [
-          {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
-          {
-            "type": "backport"
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+              }
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "notes": "Some notes here please"
+        ]
       },
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
-        }
-      ],
       "properties": [
         {
           "name": "key1",
@@ -247,103 +224,30 @@
           "value": "val2"
         }
       ],
-      "components": [
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-        },
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "externalReferences": [
-            {
-              "url": "https://cyclonedx.org",
-              "comment": "No comment",
-              "type": "distribution",
-              "hashes": [
-                {
-                  "alg": "SHA-256",
-                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-                }
-              ]
-            }
-          ]
-        }
-      ],
-      "evidence": {
-        "copyright": [
-          {
-            "text": "Commercial"
-          },
-          {
-            "text": "Commercial 2"
-          }
-        ]
-      },
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "releaseNotes": {
-        "type": "major",
-        "title": "Release Notes Title",
-        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
-        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
-        "description": "This release is a test release",
-        "timestamp": "2021-12-31T10:00:00+00:00",
         "aliases": [
           "First Test Release"
         ],
-        "tags": [
-          "alpha",
-          "test"
-        ],
-        "resolves": [
-          {
-            "type": "security",
-            "id": "CVE-2021-44228",
-            "name": "Apache Log3Shell",
-            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
-            "source": {
-              "name": "NVD",
-              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
-            },
-            "references": [
-              "https://central.sonatype.org/news/20211213_log4shell_help",
-              "https://logging.apache.org/log4j/2.x/security.html"
-            ]
-          }
-        ],
+        "description": "This release is a test release",
+        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
         "notes": [
           {
+            "locale": "en-GB",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-GB"
+            }
           },
           {
+            "locale": "en-US",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-US"
+            }
           }
         ],
         "properties": [
@@ -355,52 +259,93 @@
             "name": "key2",
             "value": "val2"
           }
+        ],
+        "resolves": [
+          {
+            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
+            "id": "CVE-2021-44228",
+            "name": "Apache Log3Shell",
+            "references": [
+              "https://central.sonatype.org/news/20211213_log4shell_help",
+              "https://logging.apache.org/log4j/2.x/security.html"
+            ],
+            "source": {
+              "name": "NVD",
+              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
+            },
+            "type": "security"
+          }
+        ],
+        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
+        "tags": [
+          "alpha",
+          "test"
+        ],
+        "timestamp": "2023-08-15T01:23:45.678900+00:00",
+        "title": "Release Notes Title",
+        "type": "major"
+      },
+      "scope": "required",
+      "supplier": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
         ]
-      }
-    },
-    "manufacture": {
-      "name": "CycloneDX",
-      "url": [
-        "https://cyclonedx.org"
-      ],
-      "contact": [
-        {
-          "name": "A N Other",
-          "email": "someone@somewhere.tld",
-          "phone": "+44 (0)1234 567890"
+      },
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "name": "Paul Horton",
-          "email": "paul.horton@owasp.org"
-        }
-      ]
-    },
-    "supplier": {
-      "name": "Cyclone DX",
-      "url": [
-        "https://cyclonedx.org/"
-      ],
-      "contact": [
-        {
-          "name": "A N Other",
-          "email": "someone@somewhere.tld",
-          "phone": "+44 (0)1234 567890"
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     },
     "licenses": [
       {
         "license": {
           "id": "Apache-2.0",
           "text": {
+            "content": "VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=",
             "contentType": "text/plain",
-            "encoding": "base64",
-            "content": "VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE="
+            "encoding": "base64"
           },
           "url": "https://www.apache.org/licenses/LICENSE-2.0.txt"
         }
       }
     ],
+    "manufacture": {
+      "contact": [
+        {
+          "email": "someone@somewhere.tld",
+          "name": "A N Other",
+          "phone": "+44 (0)1234 567890"
+        },
+        {
+          "email": "paul.horton@owasp.org",
+          "name": "Paul Horton"
+        }
+      ],
+      "name": "CycloneDX",
+      "url": [
+        "https://cyclonedx.org"
+      ]
+    },
     "properties": [
       {
         "name": "key1",
@@ -410,11 +355,66 @@
         "name": "key2",
         "value": "val2"
       }
+    ],
+    "supplier": {
+      "contact": [
+        {
+          "email": "someone@somewhere.tld",
+          "name": "A N Other",
+          "phone": "+44 (0)1234 567890"
+        }
+      ],
+      "name": "Cyclone DX",
+      "url": [
+        "https://cyclonedx.org/"
+      ]
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
     ]
   },
-  "dependencies": [
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_just_complete_metadata-1.4.xml.bin b/tests/_data/snapshots/get_bom_just_complete_metadata-1.4.xml.bin
new file mode 100644
index 000000000..98e51691d
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_just_complete_metadata-1.4.xml.bin
@@ -0,0 +1,293 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <authors>
+      <author>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </author>
+      <author>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </author>
+    </authors>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+              <hashes>
+                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+              </hashes>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+      <evidence>
+        <copyright>
+          <text>Commercial</text>
+          <text>Commercial 2</text>
+        </copyright>
+      </evidence>
+      <releaseNotes>
+        <type>major</type>
+        <title>Release Notes Title</title>
+        <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
+        <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
+        <description>This release is a test release</description>
+        <timestamp>2023-08-15T01:23:45.678900+00:00</timestamp>
+        <aliases>
+          <alias>First Test Release</alias>
+        </aliases>
+        <tags>
+          <tag>alpha</tag>
+          <tag>test</tag>
+        </tags>
+        <resolves>
+          <issue type="security">
+            <id>CVE-2021-44228</id>
+            <name>Apache Log3Shell</name>
+            <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
+            <source>
+              <name>NVD</name>
+              <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
+            </source>
+            <references>
+              <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
+              <url>https://logging.apache.org/log4j/2.x/security.html</url>
+            </references>
+          </issue>
+        </resolves>
+        <notes>
+          <note>
+            <locale>en-GB</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+          <note>
+            <locale>en-US</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+        </notes>
+        <properties>
+          <property name="key1">val1</property>
+          <property name="key2">val2</property>
+        </properties>
+      </releaseNotes>
+    </component>
+    <manufacture>
+      <name>CycloneDX</name>
+      <url>https://cyclonedx.org</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+      <contact>
+        <name>Paul Horton</name>
+        <email>paul.horton@owasp.org</email>
+      </contact>
+    </manufacture>
+    <supplier>
+      <name>Cyclone DX</name>
+      <url>https://cyclonedx.org/</url>
+      <contact>
+        <name>A N Other</name>
+        <email>someone@somewhere.tld</email>
+        <phone>+44 (0)1234 567890</phone>
+      </contact>
+    </supplier>
+    <licenses>
+      <license>
+        <id>Apache-2.0</id>
+        <text content-type="text/plain" encoding="base64">VGVzdCBjb250ZW50IC0gdGhpcyBpcyBub3QgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSE=</text>
+        <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      </license>
+    </licenses>
+    <properties>
+      <property name="key1">val1</property>
+      <property name="key2">val2</property>
+    </properties>
+  </metadata>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.0.xml.bin
new file mode 100644
index 000000000..961bb4798
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.0.xml.bin
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.1.xml.bin
new file mode 100644
index 000000000..0b33bec2a
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.1.xml.bin
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_setuptools.json b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.json.bin
similarity index 79%
rename from tests/_data/own/json/1.2/bom_setuptools.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.json.bin
index 961c69d90..9d0993c87 100644
--- a/tests/_data/own/json/1.2/bom_setuptools.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.json.bin
@@ -1,37 +1,37 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.xml.bin
new file mode 100644
index 000000000..ce6f3e6c6
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.2.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_setuptools.json b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.json.bin
similarity index 79%
rename from tests/_data/own/json/1.3/bom_setuptools.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.json.bin
index 33d6d3992..6e2f630e8 100644
--- a/tests/_data/own/json/1.3/bom_setuptools.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.json.bin
@@ -1,37 +1,37 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.xml.bin
new file mode 100644
index 000000000..39cbf1d85
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.3.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/indented_two.json b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.json.bin
similarity index 94%
rename from tests/_data/own/json/1.4/indented_two.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.json.bin
index 8d60c03db..d3c70bb7b 100644
--- a/tests/_data/own/json/1.4/indented_two.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.json.bin
@@ -20,7 +20,7 @@
     }
   ],
   "metadata": {
-    "timestamp": "2021-12-31T10:00:00+00:00",
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
         "externalReferences": [
@@ -63,7 +63,7 @@
       }
     ]
   },
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "version": 1,
   "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
   "bomFormat": "CycloneDX",
diff --git a/tests/_data/own/xml/1.4/indented_two.xml b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.xml.bin
similarity index 94%
rename from tests/_data/own/xml/1.4/indented_two.xml
rename to tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.xml.bin
index ce7e1a87c..bef590f2f 100644
--- a/tests/_data/own/xml/1.4/indented_two.xml
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_basic-1.4.xml.bin
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
-<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
   <metadata>
-    <timestamp>2021-12-31T10:00:00+00:00</timestamp>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
     <tools>
       <tool>
         <vendor>CycloneDX</vendor>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.0.xml.bin
new file mode 100644
index 000000000..dc8f73327
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.0.xml.bin
@@ -0,0 +1,33 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+      <components>
+        <component type="library">
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          <modified>false</modified>
+        </component>
+        <component type="library">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <modified>false</modified>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.1.xml.bin
new file mode 100644
index 000000000..cf2184b05
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.1.xml.bin
@@ -0,0 +1,123 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_setuptools_complete.json b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.json.bin
similarity index 80%
rename from tests/_data/own/json/1.2/bom_setuptools_complete.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.json.bin
index 1bfc41dc8..9cf4af5be 100644
--- a/tests/_data/own/json/1.2/bom_setuptools_complete.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.json.bin
@@ -1,223 +1,223 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          },
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          }
-        ]
-      },
       "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
-      "licenses": [
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
         {
-          "expression": "MIT License"
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
         }
       ],
       "copyright": "Apache 2.0 baby!",
       "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
+      "description": "This component is awesome",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      },
+      ],
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "externalReferences": [
+              {
+                "comment": "No comment",
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
+              }
+            ],
             "hashes": [
               {
                 "alg": "SHA-256",
                 "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
-            "externalReferences": [
-              {
-                "type": "distribution",
-                "url": "https://cyclonedx.org",
-                "comment": "No comment"
-              }
-            ]
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "hashes": [
+            "author": "Test Author",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
+            "licenses": [
               {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                "expression": "MIT License"
               }
             ],
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
+          },
+          {
+            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
             "externalReferences": [
               {
+                "comment": "No comment",
                 "type": "distribution",
-                "url": "https://cyclonedx.org",
-                "comment": "No comment"
+                "url": "https://cyclonedx.org"
               }
-            ]
-          },
-          {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
-            "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
-            "licenses": [
+            ],
+            "hashes": [
               {
-                "expression": "MIT License"
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "commits": [
+        ]
+      },
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "scope": "required",
+      "supplier": {
+        "contact": [
           {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
           {
-            "type": "backport"
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
         ],
-        "notes": "Some notes here please"
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
       },
-      "externalReferences": [
-        {
-          "type": "distribution",
-          "url": "https://cyclonedx.org",
-          "comment": "No comment"
-        }
-      ],
-      "components": [
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "externalReferences": [
-            {
-              "type": "distribution",
-              "url": "https://cyclonedx.org",
-              "comment": "No comment"
-            }
-          ]
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
+      "ref": "my-specific-bom-ref-for-dings"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.xml.bin
new file mode 100644
index 000000000..7c9f77b41
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.2.xml.bin
@@ -0,0 +1,161 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_setuptools_complete.json b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.json.bin
similarity index 84%
rename from tests/_data/own/json/1.3/bom_setuptools_complete.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.json.bin
index d32d02004..cf2dc3e1f 100644
--- a/tests/_data/own/json/1.3/bom_setuptools_complete.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.json.bin
@@ -1,267 +1,267 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
+      "author": "Test Author",
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
+        {
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "hashes": [
+                {
+                  "alg": "SHA-256",
+                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                }
+              ],
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
+        }
+      ],
+      "copyright": "Apache 2.0 baby!",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
+      "description": "This component is awesome",
+      "evidence": {
+        "copyright": [
           {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
+            "text": "Commercial"
           },
           {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
+            "text": "Commercial 2"
           }
         ]
       },
-      "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "copyright": "Apache 2.0 baby!",
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
-        }
-      },
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library",
+            "version": ""
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
             "externalReferences": [
               {
-                "type": "distribution",
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+              }
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "hashes": [
+            "author": "Test Author",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
+            "licenses": [
               {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                "expression": "MIT License"
               }
             ],
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
+          },
+          {
+            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
             "externalReferences": [
               {
-                "type": "distribution",
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
-          },
-          {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
-            "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
-            "licenses": [
+            ],
+            "hashes": [
               {
-                "expression": "MIT License"
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-          }
-        ],
-        "commits": [
-          {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
-          {
-            "type": "backport"
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "notes": "Some notes here please"
+        ]
       },
-      "externalReferences": [
-        {
-          "type": "distribution",
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
-        }
-      ],
-      "components": [
+      "properties": [
         {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+          "name": "key1",
+          "value": "val1"
         },
         {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "externalReferences": [
-            {
-              "type": "distribution",
-              "url": "https://cyclonedx.org",
-              "comment": "No comment",
-              "hashes": [
-                {
-                  "alg": "SHA-256",
-                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-                }
-              ]
-            }
-          ]
+          "name": "key2",
+          "value": "val2"
         }
       ],
-      "evidence": {
-        "copyright": [
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "scope": "required",
+      "supplier": {
+        "contact": [
           {
-            "text": "Commercial"
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
           },
           {
-            "text": "Commercial 2"
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
         ]
       },
-      "properties": [
-        {
-          "name": "key1",
-          "value": "val1"
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "name": "key2",
-          "value": "val2"
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
+      "ref": "my-specific-bom-ref-for-dings"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.xml.bin
new file mode 100644
index 000000000..316f55629
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.3.xml.bin
@@ -0,0 +1,183 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version/>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+              <hashes>
+                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+              </hashes>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+      <evidence>
+        <copyright>
+          <text>Commercial</text>
+          <text>Commercial 2</text>
+        </copyright>
+      </evidence>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_setuptools_complete.json b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.json.bin
similarity index 84%
rename from tests/_data/own/json/1.4/bom_setuptools_complete.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.json.bin
index ceb5903c2..525c924c4 100644
--- a/tests/_data/own/json/1.4/bom_setuptools_complete.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.json.bin
@@ -1,329 +1,236 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "type": "build-system",
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
-          },
-          {
-            "type": "distribution",
-            "url": "https://pypi.org/project/cyclonedx-python-lib/"
-          },
-          {
-            "type": "documentation",
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
-          },
-          {
-            "type": "issue-tracker",
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
-          },
-          {
-            "type": "license",
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
-          },
-          {
-            "type": "release-notes",
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
-          },
-          {
-            "type": "vcs",
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
-          },
-          {
-            "type": "website",
-            "url": "https://cyclonedx.org"
-          }
-        ]
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "supplier": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
+      "author": "Test Author",
+      "bom-ref": "my-specific-bom-ref-for-dings",
+      "components": [
+        {
+          "author": "Test Author",
+          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "licenses": [
+            {
+              "expression": "MIT License"
+            }
+          ],
+          "name": "setuptools",
+          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "type": "library",
+          "version": "50.3.2"
+        },
+        {
+          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "externalReferences": [
+            {
+              "comment": "No comment",
+              "hashes": [
+                {
+                  "alg": "SHA-256",
+                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                }
+              ],
+              "type": "distribution",
+              "url": "https://cyclonedx.org"
+            }
+          ],
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "name": "toml",
+          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+          "type": "library",
+          "version": "0.10.2"
+        }
+      ],
+      "copyright": "Apache 2.0 baby!",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
+      "description": "This component is awesome",
+      "evidence": {
+        "copyright": [
           {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
+            "text": "Commercial"
           },
           {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
+            "text": "Commercial 2"
           }
         ]
       },
-      "author": "Test Author",
-      "publisher": "CycloneDX",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "description": "This component is awesome",
-      "scope": "required",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "copyright": "Apache 2.0 baby!",
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "swid": {
-        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
-        "name": "Test Application",
-        "version": "3.4.5",
-        "text": {
-          "contentType": "text/xml",
-          "encoding": "base64",
-          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg=="
-        }
-      },
+      "name": "setuptools",
       "pedigree": {
         "ancestors": [
           {
-            "type": "library",
-            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
+            "bom-ref": "ccc8d7ee-4b9c-4750-aee0-a72585152291",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
           },
           {
-            "type": "library",
-            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "author": "Test Author",
-            "name": "setuptools",
+            "bom-ref": "8a3893b3-9923-4adb-a1d3-47456636ba0a",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library"
+          }
+        ],
+        "commits": [
+          {
+            "message": "A commit message",
+            "uid": "a-random-uid"
           }
         ],
         "descendants": [
           {
-            "type": "library",
-            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "author": "Test Author",
-            "name": "setuptools",
+            "bom-ref": "28b2d8ce-def0-446f-a221-58dee0b44acc",
             "licenses": [
               {
                 "expression": "MIT License"
               }
             ],
-            "purl": "pkg:pypi/setuptools?extension=tar.gz"
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools?extension=tar.gz",
+            "type": "library"
           },
           {
-            "type": "library",
             "bom-ref": "555ca729-93c6-48f3-956e-bdaa4a2f0bfa",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "hashes": [
-              {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-              }
-            ],
             "externalReferences": [
               {
-                "type": "distribution",
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
+            ],
+            "hashes": [
+              {
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+              }
+            ],
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
+          }
+        ],
+        "notes": "Some notes here please",
+        "patches": [
+          {
+            "type": "backport"
           }
         ],
         "variants": [
           {
-            "type": "library",
-            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
-            "name": "toml",
-            "version": "0.10.2",
-            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-            "hashes": [
+            "author": "Test Author",
+            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
+            "licenses": [
               {
-                "alg": "SHA-256",
-                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+                "expression": "MIT License"
               }
             ],
+            "name": "setuptools",
+            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+            "type": "library",
+            "version": "50.3.2"
+          },
+          {
+            "bom-ref": "e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66",
             "externalReferences": [
               {
-                "type": "distribution",
-                "url": "https://cyclonedx.org",
                 "comment": "No comment",
                 "hashes": [
                   {
                     "alg": "SHA-256",
                     "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
                   }
-                ]
+                ],
+                "type": "distribution",
+                "url": "https://cyclonedx.org"
               }
-            ]
-          },
-          {
-            "type": "library",
-            "bom-ref": "ded1d73e-1fca-4302-b520-f1bc53979958",
-            "author": "Test Author",
-            "name": "setuptools",
-            "version": "50.3.2",
-            "licenses": [
+            ],
+            "hashes": [
               {
-                "expression": "MIT License"
+                "alg": "SHA-256",
+                "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
               }
             ],
-            "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-          }
-        ],
-        "commits": [
-          {
-            "uid": "a-random-uid",
-            "message": "A commit message"
-          }
-        ],
-        "patches": [
-          {
-            "type": "backport"
+            "name": "toml",
+            "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+            "type": "library",
+            "version": "0.10.2"
           }
-        ],
-        "notes": "Some notes here please"
+        ]
       },
-      "externalReferences": [
-        {
-          "type": "distribution",
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
-        }
-      ],
-      "components": [
+      "properties": [
         {
-          "type": "library",
-          "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "author": "Test Author",
-          "name": "setuptools",
-          "version": "50.3.2",
-          "licenses": [
-            {
-              "expression": "MIT License"
-            }
-          ],
-          "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+          "name": "key1",
+          "value": "val1"
         },
         {
-          "type": "library",
-          "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "name": "toml",
-          "version": "0.10.2",
-          "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ],
-          "externalReferences": [
-            {
-              "type": "distribution",
-              "url": "https://cyclonedx.org",
-              "comment": "No comment",
-              "hashes": [
-                {
-                  "alg": "SHA-256",
-                  "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-                }
-              ]
-            }
-          ]
+          "name": "key2",
+          "value": "val2"
         }
       ],
-      "evidence": {
-        "copyright": [
-          {
-            "text": "Commercial"
-          },
-          {
-            "text": "Commercial 2"
-          }
-        ]
-      },
+      "publisher": "CycloneDX",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "releaseNotes": {
-        "type": "major",
-        "title": "Release Notes Title",
-        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
-        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
-        "description": "This release is a test release",
-        "timestamp": "2021-12-31T10:00:00+00:00",
         "aliases": [
           "First Test Release"
         ],
-        "tags": [
-          "test",
-          "alpha"
-        ],
-        "resolves": [
-          {
-            "type": "security",
-            "id": "CVE-2021-44228",
-            "name": "Apache Log3Shell",
-            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
-            "source": {
-              "name": "NVD",
-              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
-            },
-            "references": [
-              "https://logging.apache.org/log4j/2.x/security.html",
-              "https://central.sonatype.org/news/20211213_log4shell_help"
-            ]
-          }
-        ],
+        "description": "This release is a test release",
+        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
         "notes": [
           {
             "locale": "en-GB",
             "text": {
+              "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
-              "encoding": "base64",
-              "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA=="
+              "encoding": "base64"
             }
           },
           {
             "locale": "en-US",
             "text": {
+              "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
-              "encoding": "base64",
-              "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA=="
+              "encoding": "base64"
             }
           }
         ],
@@ -336,23 +243,116 @@
             "name": "key2",
             "value": "val2"
           }
+        ],
+        "resolves": [
+          {
+            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
+            "id": "CVE-2021-44228",
+            "name": "Apache Log3Shell",
+            "references": [
+              "https://central.sonatype.org/news/20211213_log4shell_help",
+              "https://logging.apache.org/log4j/2.x/security.html"
+            ],
+            "source": {
+              "name": "NVD",
+              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
+            },
+            "type": "security"
+          }
+        ],
+        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
+        "tags": [
+          "alpha",
+          "test"
+        ],
+        "timestamp": "2023-08-15T01:23:45.678900+00:00",
+        "title": "Release Notes Title",
+        "type": "major"
+      },
+      "scope": "required",
+      "supplier": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
         ]
       },
-      "properties": [
-        {
-          "name": "key1",
-          "value": "val1"
+      "swid": {
+        "name": "Test Application",
+        "tagId": "swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1",
+        "text": {
+          "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==",
+          "contentType": "text/xml",
+          "encoding": "base64"
         },
-        {
-          "name": "key2",
-          "value": "val2"
-        }
-      ]
+        "version": "3.4.5"
+      },
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
+      "ref": "my-specific-bom-ref-for-dings"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.xml.bin
new file mode 100644
index 000000000..24b43c3f0
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_complete-1.4.xml.bin
@@ -0,0 +1,251 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="my-specific-bom-ref-for-dings">
+      <supplier>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </supplier>
+      <author>Test Author</author>
+      <publisher>CycloneDX</publisher>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <description>This component is awesome</description>
+      <scope>required</scope>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <copyright>Apache 2.0 baby!</copyright>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <swid tagId="swidgen-242eb18a-503e-ca37-393b-cf156ef09691_9.1.1" name="Test Application" version="3.4.5">
+        <text content-type="text/xml" encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxTb2Z0d2FyZUlkZW50aXR5IHhtbDpsYW5nPSJFTiIgbmFtZT0iQWNtZSBBcHBsaWNhdGlvbiIgdmVyc2lvbj0iOS4xLjEiIAogdmVyc2lvblNjaGVtZT0ibXVsdGlwYXJ0bnVtZXJpYyIgCiB0YWdJZD0ic3dpZGdlbi1iNTk1MWFjOS00MmMwLWYzODItM2YxZS1iYzdhMmE0NDk3Y2JfOS4xLjEiIAogeG1sbnM9Imh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTk3NzAvLTIvMjAxNS9zY2hlbWEueHNkIj4gCiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTc3MC8tMi8yMDE1LWN1cnJlbnQvc2NoZW1hLnhzZCBzY2hlbWEueHNkIiA+CiAgPE1ldGEgZ2VuZXJhdG9yPSJTV0lEIFRhZyBPbmxpbmUgR2VuZXJhdG9yIHYwLjEiIC8+IAogIDxFbnRpdHkgbmFtZT0iQWNtZSwgSW5jLiIgcmVnaWQ9ImV4YW1wbGUuY29tIiByb2xlPSJ0YWdDcmVhdG9yIiAvPiAKPC9Tb2Z0d2FyZUlkZW50aXR5Pg==</text>
+      </swid>
+      <pedigree>
+        <ancestors>
+          <component type="library" bom-ref="ccc8d7ee-4b9c-4750-aee0-a72585152291">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="8a3893b3-9923-4adb-a1d3-47456636ba0a">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+        </ancestors>
+        <descendants>
+          <component type="library" bom-ref="28b2d8ce-def0-446f-a221-58dee0b44acc">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="555ca729-93c6-48f3-956e-bdaa4a2f0bfa">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </descendants>
+        <variants>
+          <component type="library" bom-ref="ded1d73e-1fca-4302-b520-f1bc53979958">
+            <author>Test Author</author>
+            <name>setuptools</name>
+            <version>50.3.2</version>
+            <licenses>
+              <expression>MIT License</expression>
+            </licenses>
+            <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+          </component>
+          <component type="library" bom-ref="e7abdcca-5ba2-4f29-b2cf-b1e1ef788e66">
+            <name>toml</name>
+            <version>0.10.2</version>
+            <hashes>
+              <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+            </hashes>
+            <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+            <externalReferences>
+              <reference type="distribution">
+                <url>https://cyclonedx.org</url>
+                <comment>No comment</comment>
+                <hashes>
+                  <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+                </hashes>
+              </reference>
+            </externalReferences>
+          </component>
+        </variants>
+        <commits>
+          <commit>
+            <uid>a-random-uid</uid>
+            <message>A commit message</message>
+          </commit>
+        </commits>
+        <patches>
+          <patch type="backport"/>
+        </patches>
+        <notes>Some notes here please</notes>
+      </pedigree>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <components>
+        <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+          <author>Test Author</author>
+          <name>setuptools</name>
+          <version>50.3.2</version>
+          <licenses>
+            <expression>MIT License</expression>
+          </licenses>
+          <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+        </component>
+        <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+          <name>toml</name>
+          <version>0.10.2</version>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+          <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+          <externalReferences>
+            <reference type="distribution">
+              <url>https://cyclonedx.org</url>
+              <comment>No comment</comment>
+              <hashes>
+                <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+              </hashes>
+            </reference>
+          </externalReferences>
+        </component>
+      </components>
+      <evidence>
+        <copyright>
+          <text>Commercial</text>
+          <text>Commercial 2</text>
+        </copyright>
+      </evidence>
+      <releaseNotes>
+        <type>major</type>
+        <title>Release Notes Title</title>
+        <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
+        <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
+        <description>This release is a test release</description>
+        <timestamp>2023-08-15T01:23:45.678900+00:00</timestamp>
+        <aliases>
+          <alias>First Test Release</alias>
+        </aliases>
+        <tags>
+          <tag>alpha</tag>
+          <tag>test</tag>
+        </tags>
+        <resolves>
+          <issue type="security">
+            <id>CVE-2021-44228</id>
+            <name>Apache Log3Shell</name>
+            <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
+            <source>
+              <name>NVD</name>
+              <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
+            </source>
+            <references>
+              <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
+              <url>https://logging.apache.org/log4j/2.x/security.html</url>
+            </references>
+          </issue>
+        </resolves>
+        <notes>
+          <note>
+            <locale>en-GB</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+          <note>
+            <locale>en-US</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+        </notes>
+        <properties>
+          <property name="key1">val1</property>
+          <property name="key2">val2</property>
+        </properties>
+      </releaseNotes>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-dings"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.0.xml.bin
new file mode 100644
index 000000000..19b807ce8
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.0.xml.bin
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version/>
+      <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.1.xml.bin
new file mode 100644
index 000000000..4d6b504d4
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.1.xml.bin
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
+      <name>setuptools</name>
+      <version/>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_setuptools_no_version.json b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.json.bin
similarity index 80%
rename from tests/_data/own/json/1.2/bom_setuptools_no_version.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.json.bin
index 8fb2dd782..7bb0d1e15 100644
--- a/tests/_data/own/json/1.2/bom_setuptools_no_version.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.json.bin
@@ -1,37 +1,37 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:77d15ab9-5602-4cca-8ed2-59ae579aafd3",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "",
+      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools?extension=tar.gz",
+      "type": "library",
+      "version": ""
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.xml.bin
new file mode 100644
index 000000000..a993370c3
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.2.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version/>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_setuptools_no_version.json b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.json.bin
similarity index 80%
rename from tests/_data/own/json/1.3/bom_setuptools_no_version.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.json.bin
index c59f067e7..1fb453b4a 100644
--- a/tests/_data/own/json/1.3/bom_setuptools_no_version.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.json.bin
@@ -1,37 +1,37 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:77d15ab9-5602-4cca-8ed2-59ae579aafd3",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "",
+      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools?extension=tar.gz",
+      "type": "library",
+      "version": ""
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.xml.bin
new file mode 100644
index 000000000..f12eaf368
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.3.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version/>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_setuptools_no_version.json b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.json.bin
similarity index 67%
rename from tests/_data/own/json/1.4/bom_setuptools_no_version.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.json.bin
index ea3bb5d6d..ac80eda9a 100644
--- a/tests/_data/own/json/1.4/bom_setuptools_no_version.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.json.bin
@@ -1,70 +1,70 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:77d15ab9-5602-4cca-8ed2-59ae579aafd3",
-  "version": 1,
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools?extension=tar.gz",
+      "type": "library"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools?extension=tar.gz"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
     ]
   },
-  "components": [
-    {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools?extension=tar.gz"
-    }
-  ],
-  "dependencies": [
-    {
-      "ref": "pkg:pypi/setuptools?extension=tar.gz"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.xml.bin
new file mode 100644
index 000000000..a08ce14db
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_no_component_version-1.4.xml.bin
@@ -0,0 +1,52 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.0.xml.bin
new file mode 100644
index 000000000..79dbb1afc
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.0.xml.bin
@@ -0,0 +1,12 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.1.xml.bin
new file mode 100644
index 000000000..1ac5e156d
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.1.xml.bin
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_setuptools_with_cpe.json b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.json.bin
similarity index 80%
rename from tests/_data/own/json/1.2/bom_setuptools_with_cpe.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.json.bin
index 0d7e9b9e2..2dd754f8f 100644
--- a/tests/_data/own/json/1.2/bom_setuptools_with_cpe.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.json.bin
@@ -1,38 +1,38 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.xml.bin
new file mode 100644
index 000000000..7a23d5d11
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.2.xml.bin
@@ -0,0 +1,28 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_setuptools_with_cpe.json b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.json.bin
similarity index 80%
rename from tests/_data/own/json/1.3/bom_setuptools_with_cpe.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.json.bin
index baf80bccb..077f8b253 100644
--- a/tests/_data/own/json/1.3/bom_setuptools_with_cpe.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.json.bin
@@ -1,38 +1,38 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.xml.bin
new file mode 100644
index 000000000..a2d699055
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.3.xml.bin
@@ -0,0 +1,28 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_setuptools_with_cpe.json b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.json.bin
similarity index 68%
rename from tests/_data/own/json/1.4/bom_setuptools_with_cpe.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.json.bin
index 7ad22406a..66f999c5f 100644
--- a/tests/_data/own/json/1.4/bom_setuptools_with_cpe.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.json.bin
@@ -1,72 +1,72 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
     ]
   },
-  "components": [
-    {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "cpe": "cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*",
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ],
-  "dependencies": [
-    {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.xml.bin
new file mode 100644
index 000000000..a2c30d437
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_cpe-1.4.xml.bin
@@ -0,0 +1,54 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <cpe>cpe:2.3:a:python:setuptools:50.3.2:*:*:*:*:*:*:*</cpe>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.0.xml.bin
new file mode 100644
index 000000000..961bb4798
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.0.xml.bin
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.1.xml.bin
new file mode 100644
index 000000000..0b33bec2a
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.1.xml.bin
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.json.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.json.bin
new file mode 100644
index 000000000..9d0993c87
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.json.bin
@@ -0,0 +1,37 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.xml.bin
new file mode 100644
index 000000000..ce6f3e6c6
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.2.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.json.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.json.bin
new file mode 100644
index 000000000..6e2f630e8
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.json.bin
@@ -0,0 +1,37 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.xml.bin
new file mode 100644
index 000000000..39cbf1d85
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.3.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_setuptools_with_release_notes.json b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.json.bin
similarity index 78%
rename from tests/_data/own/json/1.4/bom_setuptools_with_release_notes.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.json.bin
index 492be373e..6eed4f13c 100644
--- a/tests/_data/own/json/1.4/bom_setuptools_with_release_notes.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.json.bin
@@ -1,112 +1,37 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
+      "name": "setuptools",
       "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "releaseNotes": {
-        "type": "major",
-        "title": "Release Notes Title",
-        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
-        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
-        "description": "This release is a test release",
-        "timestamp": "2021-12-31T10:00:00+00:00",
         "aliases": [
           "First Test Release"
         ],
-        "tags": [
-          "alpha",
-          "test"
-        ],
-        "resolves": [
-          {
-            "type": "security",
-            "id": "CVE-2021-44228",
-            "name": "Apache Log3Shell",
-            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
-            "source": {
-              "name": "NVD",
-              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
-            },
-            "references": [
-              "https://central.sonatype.org/news/20211213_log4shell_help",
-              "https://logging.apache.org/log4j/2.x/security.html"
-            ]
-          }
-        ],
+        "description": "This release is a test release",
+        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
         "notes": [
           {
+            "locale": "en-GB",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-GB"
+            }
           },
           {
+            "locale": "en-US",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-US"
+            }
           }
         ],
         "properties": [
@@ -118,13 +43,88 @@
             "name": "key2",
             "value": "val2"
           }
-        ]
-      }
+        ],
+        "resolves": [
+          {
+            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
+            "id": "CVE-2021-44228",
+            "name": "Apache Log3Shell",
+            "references": [
+              "https://central.sonatype.org/news/20211213_log4shell_help",
+              "https://logging.apache.org/log4j/2.x/security.html"
+            ],
+            "source": {
+              "name": "NVD",
+              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
+            },
+            "type": "security"
+          }
+        ],
+        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
+        "tags": [
+          "alpha",
+          "test"
+        ],
+        "timestamp": "2023-08-15T01:23:45.678900+00:00",
+        "title": "Release Notes Title",
+        "type": "major"
+      },
+      "type": "library",
+      "version": "50.3.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.xml.bin
new file mode 100644
index 000000000..2d067b43e
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_release_notes-1.4.xml.bin
@@ -0,0 +1,97 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <releaseNotes>
+        <type>major</type>
+        <title>Release Notes Title</title>
+        <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
+        <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
+        <description>This release is a test release</description>
+        <timestamp>2023-08-15T01:23:45.678900+00:00</timestamp>
+        <aliases>
+          <alias>First Test Release</alias>
+        </aliases>
+        <tags>
+          <tag>alpha</tag>
+          <tag>test</tag>
+        </tags>
+        <resolves>
+          <issue type="security">
+            <id>CVE-2021-44228</id>
+            <name>Apache Log3Shell</name>
+            <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
+            <source>
+              <name>NVD</name>
+              <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
+            </source>
+            <references>
+              <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
+              <url>https://logging.apache.org/log4j/2.x/security.html</url>
+            </references>
+          </issue>
+        </resolves>
+        <notes>
+          <note>
+            <locale>en-GB</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+          <note>
+            <locale>en-US</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+        </notes>
+        <properties>
+          <property name="key1">val1</property>
+          <property name="key2">val2</property>
+        </properties>
+      </releaseNotes>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.0.xml.bin
new file mode 100644
index 000000000..961bb4798
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.0.xml.bin
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.1.xml.bin
new file mode 100644
index 000000000..0b33bec2a
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.1.xml.bin
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.json.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.json.bin
new file mode 100644
index 000000000..9d0993c87
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.json.bin
@@ -0,0 +1,37 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.xml.bin
new file mode 100644
index 000000000..ce6f3e6c6
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.2.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.json.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.json.bin
new file mode 100644
index 000000000..6e2f630e8
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.json.bin
@@ -0,0 +1,37 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.xml.bin
new file mode 100644
index 000000000..39cbf1d85
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.3.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_setuptools_with_vulnerabilities.json b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.json.bin
similarity index 77%
rename from tests/_data/own/json/1.4/bom_setuptools_with_vulnerabilities.json
rename to tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.json.bin
index c7c0ed05c..296520bee 100644
--- a/tests/_data/own/json/1.4/bom_setuptools_with_vulnerabilities.json
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.json.bin
@@ -1,121 +1,72 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
     ]
   },
-  "components": [
-    {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ],
-  "dependencies": [
-    {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  ],
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
   "vulnerabilities": [
     {
-      "bom-ref": "my-vuln-ref-1",
-      "id": "CVE-2018-7489",
-      "source": {
-        "name": "NVD",
-        "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7489"
-      },
-      "references": [
-        {
-          "id": "SOME-OTHER-ID",
-          "source": {
-            "name": "OSS Index",
-            "url": "https://ossindex.sonatype.org/component/pkg:pypi/setuptools"
-          }
-        }
-      ],
-      "ratings": [
-        {
-          "source": {
-            "name": "NVD",
-            "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7489"
-          },
-          "score": 9.8,
-          "severity": "critical",
-          "method": "CVSSv3",
-          "vector": "AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-          "justification": "Some justification"
-        },
-        {
-          "source": {
-            "name": "OWASP",
-            "url": "https://owasp.org"
-          },
-          "score": 2.7,
-          "severity": "low",
-          "method": "CVSSv3",
-          "vector": "AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N",
-          "justification": "Some other justification"
-        }
-      ],
-      "cwes": [
-        22,
-        33
-      ],
-      "description": "A description here",
-      "detail": "Some detail here",
-      "recommendation": "Upgrade",
       "advisories": [
         {
           "url": "http://www.securitytracker.com/id/1040693"
@@ -124,62 +75,62 @@
           "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7489"
         }
       ],
+      "affects": [
+        {
+          "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+          "versions": [
+            {
+              "range": "49.0.0 - 54.0.0",
+              "status": "affected"
+            }
+          ]
+        }
+      ],
+      "analysis": {
+        "detail": "Some extra detail",
+        "justification": "requires_environment",
+        "response": [
+          "can_not_fix"
+        ],
+        "state": "exploitable"
+      },
+      "bom-ref": "my-vuln-ref-1",
       "created": "2021-09-01T10:50:42.051979+00:00",
-      "published": "2021-09-02T10:50:42.051979+00:00",
-      "updated": "2021-09-03T10:50:42.051979+00:00",
       "credits": {
+        "individuals": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          }
+        ],
         "organizations": [
           {
-            "name": "CycloneDX",
-            "url": [
-              "https://cyclonedx.org"
-            ],
             "contact": [
               {
-                "name": "A N Other",
                 "email": "someone@somewhere.tld",
+                "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
               },
               {
-                "name": "Paul Horton",
-                "email": "paul.horton@owasp.org"
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
+            ],
+            "name": "CycloneDX",
+            "url": [
+              "https://cyclonedx.org"
             ]
           }
-        ],
-        "individuals": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          }
         ]
       },
-      "tools": [
-        {
-          "vendor": "CycloneDX",
-          "name": "cyclonedx-python-lib"
-        }
-      ],
-      "analysis": {
-        "state": "exploitable",
-        "justification": "requires_environment",
-        "response": [
-          "can_not_fix"
-        ],
-        "detail": "Some extra detail"
-      },
-      "affects": [
-        {
-          "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-          "versions": [
-            {
-              "range": "49.0.0 - 54.0.0",
-              "status": "affected"
-            }
-          ]
-        }
+      "cwes": [
+        22,
+        33
       ],
+      "description": "A description here",
+      "detail": "Some detail here",
+      "id": "CVE-2018-7489",
       "properties": [
         {
           "name": "key1",
@@ -189,7 +140,56 @@
           "name": "key2",
           "value": "val2"
         }
-      ]
+      ],
+      "published": "2021-09-02T10:50:42.051979+00:00",
+      "ratings": [
+        {
+          "justification": "Some justification",
+          "method": "CVSSv3",
+          "score": 9.8,
+          "severity": "critical",
+          "source": {
+            "name": "NVD",
+            "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7489"
+          },
+          "vector": "AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
+        },
+        {
+          "justification": "Some other justification",
+          "method": "CVSSv3",
+          "score": 2.7,
+          "severity": "low",
+          "source": {
+            "name": "OWASP",
+            "url": "https://owasp.org"
+          },
+          "vector": "AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N"
+        }
+      ],
+      "recommendation": "Upgrade",
+      "references": [
+        {
+          "id": "SOME-OTHER-ID",
+          "source": {
+            "name": "OSS Index",
+            "url": "https://ossindex.sonatype.org/component/pkg:pypi/setuptools"
+          }
+        }
+      ],
+      "source": {
+        "name": "NVD",
+        "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-7489"
+      },
+      "tools": [
+        {
+          "name": "cyclonedx-python-lib",
+          "vendor": "CycloneDX"
+        }
+      ],
+      "updated": "2021-09-03T10:50:42.051979+00:00"
     }
-  ]
-}
+  ],
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.xml.bin
new file mode 100644
index 000000000..7ccc65ebd
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.4.xml.bin
@@ -0,0 +1,166 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz"/>
+  </dependencies>
+  <vulnerabilities>
+    <vulnerability bom-ref="my-vuln-ref-1">
+      <id>CVE-2018-7489</id>
+      <source>
+        <name>NVD</name>
+        <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
+      </source>
+      <references>
+        <reference>
+          <id>SOME-OTHER-ID</id>
+          <source>
+            <name>OSS Index</name>
+            <url>https://ossindex.sonatype.org/component/pkg:pypi/setuptools</url>
+          </source>
+        </reference>
+      </references>
+      <ratings>
+        <rating>
+          <source>
+            <name>NVD</name>
+            <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
+          </source>
+          <score>9.8</score>
+          <severity>critical</severity>
+          <method>CVSSv3</method>
+          <vector>AN/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</vector>
+          <justification>Some justification</justification>
+        </rating>
+        <rating>
+          <source>
+            <name>OWASP</name>
+            <url>https://owasp.org</url>
+          </source>
+          <score>2.7</score>
+          <severity>low</severity>
+          <method>CVSSv3</method>
+          <vector>AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N</vector>
+          <justification>Some other justification</justification>
+        </rating>
+      </ratings>
+      <cwes>
+        <cwe>22</cwe>
+        <cwe>33</cwe>
+      </cwes>
+      <description>A description here</description>
+      <detail>Some detail here</detail>
+      <recommendation>Upgrade</recommendation>
+      <advisories>
+        <advisory>
+          <url>http://www.securitytracker.com/id/1040693</url>
+        </advisory>
+        <advisory>
+          <url>https://nvd.nist.gov/vuln/detail/CVE-2018-7489</url>
+        </advisory>
+      </advisories>
+      <created>2021-09-01T10:50:42.051979+00:00</created>
+      <published>2021-09-02T10:50:42.051979+00:00</published>
+      <updated>2021-09-03T10:50:42.051979+00:00</updated>
+      <credits>
+        <organizations>
+          <organization>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </organization>
+        </organizations>
+        <individuals>
+          <individual>
+            <name>A N Other</name>
+            <email>someone@somewhere.tld</email>
+            <phone>+44 (0)1234 567890</phone>
+          </individual>
+        </individuals>
+      </credits>
+      <tools>
+        <tool>
+          <vendor>CycloneDX</vendor>
+          <name>cyclonedx-python-lib</name>
+        </tool>
+      </tools>
+      <analysis>
+        <state>exploitable</state>
+        <justification>requires_environment</justification>
+        <responses>
+          <response>can_not_fix</response>
+        </responses>
+        <detail>Some extra detail</detail>
+      </analysis>
+      <affects>
+        <target>
+          <ref>pkg:pypi/setuptools@50.3.2?extension=tar.gz</ref>
+          <versions>
+            <version>
+              <range>49.0.0 - 54.0.0</range>
+              <status>affected</status>
+            </version>
+          </versions>
+        </target>
+      </affects>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+    </vulnerability>
+  </vulnerabilities>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_toml_1-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_component_toml_1-1.0.xml.bin
new file mode 100644
index 000000000..7355c2cac
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.0.xml.bin
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_component_toml_1-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_component_toml_1-1.1.xml.bin
new file mode 100644
index 000000000..7f5932c19
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.1.xml.bin
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_toml_1.json b/tests/_data/snapshots/get_bom_with_component_toml_1-1.2.json.bin
similarity index 80%
rename from tests/_data/own/json/1.2/bom_toml_1.json
rename to tests/_data/snapshots/get_bom_with_component_toml_1-1.2.json.bin
index 4180b39b0..8e170b991 100644
--- a/tests/_data/own/json/1.2/bom_toml_1.json
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.2.json.bin
@@ -1,44 +1,44 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:6f266d1c-760f-4552-ae3b-41a9b74232fa",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "hashes": [
         {
           "alg": "SHA-256",
           "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
         }
       ],
+      "name": "toml",
       "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution"
-        }
-      ]
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_toml_1-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_component_toml_1-1.2.xml.bin
new file mode 100644
index 000000000..ef97c383d
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.2.xml.bin
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_toml_1.json b/tests/_data/snapshots/get_bom_with_component_toml_1-1.3.json.bin
similarity index 85%
rename from tests/_data/own/json/1.3/bom_toml_1.json
rename to tests/_data/snapshots/get_bom_with_component_toml_1-1.3.json.bin
index 2ec922747..aefb94a14 100644
--- a/tests/_data/own/json/1.3/bom_toml_1.json
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.3.json.bin
@@ -1,50 +1,50 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:6f266d1c-760f-4552-ae3b-41a9b74232fa",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      ]
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_toml_1-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_component_toml_1-1.3.xml.bin
new file mode 100644
index 000000000..a9417823f
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.3.xml.bin
@@ -0,0 +1,35 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_toml_1.json b/tests/_data/snapshots/get_bom_with_component_toml_1-1.4.json.bin
similarity index 72%
rename from tests/_data/own/json/1.4/bom_toml_1.json
rename to tests/_data/snapshots/get_bom_with_component_toml_1-1.4.json.bin
index 80fe0ae3f..1b8835591 100644
--- a/tests/_data/own/json/1.4/bom_toml_1.json
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.4.json.bin
@@ -1,84 +1,84 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:6f266d1c-760f-4552-ae3b-41a9b74232fa",
-  "version": 1,
+  "components": [
+    {
+      "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
     ]
   },
-  "components": [
-    {
-      "type": "library",
-      "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
-        }
-      ]
-    }
-  ],
-  "dependencies": [
-    {
-      "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_component_toml_1-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_component_toml_1-1.4.xml.bin
new file mode 100644
index 000000000..a17f8a46a
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_component_toml_1-1.4.xml.bin
@@ -0,0 +1,61 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.0.xml.bin
new file mode 100644
index 000000000..d0259a8af
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.0.xml.bin
@@ -0,0 +1,20 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="23">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+    <component type="library">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.1.xml.bin
new file mode 100644
index 000000000..ef886b52b
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.1.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="23">
+  <components>
+    <component type="library" bom-ref="setuptools">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="toml">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.json.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.json.bin
new file mode 100644
index 000000000..c63b1b817
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.json.bin
@@ -0,0 +1,72 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "setuptools",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    },
+    {
+      "bom-ref": "toml",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "root-component"
+    },
+    {
+      "dependsOn": [
+        "toml"
+      ],
+      "ref": "setuptools"
+    },
+    {
+      "ref": "toml"
+    }
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "root-component",
+      "name": "rootComponent",
+      "type": "application",
+      "version": ""
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 23,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.xml.bin
new file mode 100644
index 000000000..3d1ac1fb5
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.2.xml.bin
@@ -0,0 +1,49 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="23">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="root-component">
+      <name>rootComponent</name>
+      <version/>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="setuptools">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="toml">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="root-component"/>
+    <dependency ref="setuptools">
+      <dependency ref="toml"/>
+    </dependency>
+    <dependency ref="toml"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_with_dependencies_hanging.json b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.json.bin
similarity index 75%
rename from tests/_data/own/json/1.4/bom_with_dependencies_hanging.json
rename to tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.json.bin
index 92cf9405d..5ccacbb31 100644
--- a/tests/_data/own/json/1.4/bom_with_dependencies_hanging.json
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.json.bin
@@ -1,17 +1,4 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:12345678-395b-41f5-a30f-1234567890ab",
-  "version": 23,
-  "metadata": {
-    "component": {
-      "bom-ref": "root-component",
-      "name": "rootComponent",
-      "type": "application"
-    },
-    "timestamp": "2023-06-01T03:03:07+00:00"
-  },
   "components": [
     {
       "author": "Test Author",
@@ -58,13 +45,34 @@
       "ref": "root-component"
     },
     {
-      "ref": "setuptools",
       "dependsOn": [
         "toml"
-      ]
+      ],
+      "ref": "setuptools"
     },
     {
       "ref": "toml"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "root-component",
+      "name": "rootComponent",
+      "type": "application",
+      "version": ""
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 23,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.xml.bin
new file mode 100644
index 000000000..656e37d0e
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.3.xml.bin
@@ -0,0 +1,52 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="23">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="root-component">
+      <name>rootComponent</name>
+      <version/>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="setuptools">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="toml">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="root-component"/>
+    <dependency ref="setuptools">
+      <dependency ref="toml"/>
+    </dependency>
+    <dependency ref="toml"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.json.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.json.bin
new file mode 100644
index 000000000..abe58bd49
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.json.bin
@@ -0,0 +1,111 @@
+{
+  "components": [
+    {
+      "author": "Test Author",
+      "bom-ref": "setuptools",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    },
+    {
+      "bom-ref": "toml",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
+    }
+  ],
+  "dependencies": [
+    {
+      "ref": "root-component"
+    },
+    {
+      "dependsOn": [
+        "toml"
+      ],
+      "ref": "setuptools"
+    },
+    {
+      "ref": "toml"
+    }
+  ],
+  "metadata": {
+    "component": {
+      "bom-ref": "root-component",
+      "name": "rootComponent",
+      "type": "application"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 23,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.xml.bin
new file mode 100644
index 000000000..5bea1c052
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_hanging-1.4.xml.bin
@@ -0,0 +1,77 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="23">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="application" bom-ref="root-component">
+      <name>rootComponent</name>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="setuptools">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="toml">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="root-component"/>
+    <dependency ref="setuptools">
+      <dependency ref="toml"/>
+    </dependency>
+    <dependency ref="toml"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_valid-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.0.xml.bin
new file mode 100644
index 000000000..9d0e55d48
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.0.xml.bin
@@ -0,0 +1,20 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+    <component type="library">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_valid-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.1.xml.bin
new file mode 100644
index 000000000..2f6897772
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.1.xml.bin
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_dependencies.json b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.json.bin
similarity index 73%
rename from tests/_data/own/json/1.2/bom_dependencies.json
rename to tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.json.bin
index 8f54fe4a1..a9874292d 100644
--- a/tests/_data/own/json/1.2/bom_dependencies.json
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.json.bin
@@ -1,63 +1,63 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:6dc366e9-89eb-48cc-9ae8-49a810ce3dcb",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.575599+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     },
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "hashes": [
         {
           "alg": "SHA-256",
           "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
         }
       ],
+      "name": "toml",
       "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution"
-        }
-      ]
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.xml.bin
new file mode 100644
index 000000000..4fd57d868
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.2.xml.bin
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_dependencies.json b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.json.bin
similarity index 77%
rename from tests/_data/own/json/1.3/bom_dependencies.json
rename to tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.json.bin
index afd36d07f..a44b69b8c 100644
--- a/tests/_data/own/json/1.3/bom_dependencies.json
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.json.bin
@@ -1,69 +1,69 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d2ef50e0-27c7-4776-9e6f-9bbb3614d6de",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.875727+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     },
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      ]
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.xml.bin
new file mode 100644
index 000000000..6a5779c80
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.3.xml.bin
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_dependencies.json b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.json.bin
similarity index 71%
rename from tests/_data/own/json/1.4/bom_dependencies.json
rename to tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.json.bin
index 02c349606..19e76581e 100644
--- a/tests/_data/own/json/1.4/bom_dependencies.json
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.json.bin
@@ -1,103 +1,103 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ]
-  },
   "components": [
     {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "licenses": [
         {
           "expression": "MIT License"
         }
       ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
     },
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      ]
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.xml.bin
new file mode 100644
index 000000000..64970d15b
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_dependencies_valid-1.4.xml.bin
@@ -0,0 +1,73 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_external_references-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_external_references-1.0.xml.bin
new file mode 100644
index 000000000..acb066124
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.0.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_external_references-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_external_references-1.1.xml.bin
new file mode 100644
index 000000000..0a260e819
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.1.xml.bin
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components/>
+  <externalReferences>
+    <reference type="distribution">
+      <url>https://cyclonedx.org</url>
+      <comment>No comment</comment>
+    </reference>
+    <reference type="website">
+      <url>https://cyclonedx.org</url>
+    </reference>
+  </externalReferences>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_external_references.json b/tests/_data/snapshots/get_bom_with_external_references-1.2.json.bin
similarity index 64%
rename from tests/_data/own/json/1.2/bom_external_references.json
rename to tests/_data/snapshots/get_bom_with_external_references-1.2.json.bin
index fb370e06e..0808ac139 100644
--- a/tests/_data/own/json/1.2/bom_external_references.json
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.2.json.bin
@@ -1,28 +1,28 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
+  "externalReferences": [
+    {
+      "comment": "No comment",
+      "type": "distribution",
+      "url": "https://cyclonedx.org"
+    },
+    {
+      "type": "website",
+      "url": "https://cyclonedx.org"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
     ]
   },
-  "externalReferences": [
-    {
-      "url": "https://cyclonedx.org",
-      "comment": "No comment",
-      "type": "distribution"
-    },
-    {
-      "url": "https://cyclonedx.org",
-      "type": "website"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_external_references-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_external_references-1.2.xml.bin
new file mode 100644
index 000000000..052f94d0b
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.2.xml.bin
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <externalReferences>
+    <reference type="distribution">
+      <url>https://cyclonedx.org</url>
+      <comment>No comment</comment>
+    </reference>
+    <reference type="website">
+      <url>https://cyclonedx.org</url>
+    </reference>
+  </externalReferences>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_external_references.json b/tests/_data/snapshots/get_bom_with_external_references-1.3.json.bin
similarity index 74%
rename from tests/_data/own/json/1.3/bom_external_references.json
rename to tests/_data/snapshots/get_bom_with_external_references-1.3.json.bin
index a4d4d9fde..4f4556622 100644
--- a/tests/_data/own/json/1.3/bom_external_references.json
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.3.json.bin
@@ -1,34 +1,34 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:44:32.312678+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ]
-  },
   "externalReferences": [
     {
-      "url": "https://cyclonedx.org",
       "comment": "No comment",
-      "type": "distribution",
       "hashes": [
         {
           "alg": "SHA-256",
           "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
         }
-      ]
+      ],
+      "type": "distribution",
+      "url": "https://cyclonedx.org"
     },
     {
-      "url": "https://cyclonedx.org",
-      "type": "website"
+      "type": "website",
+      "url": "https://cyclonedx.org"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_external_references-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_external_references-1.3.xml.bin
new file mode 100644
index 000000000..b82483a08
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.3.xml.bin
@@ -0,0 +1,25 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+  </metadata>
+  <externalReferences>
+    <reference type="distribution">
+      <url>https://cyclonedx.org</url>
+      <comment>No comment</comment>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+    </reference>
+    <reference type="website">
+      <url>https://cyclonedx.org</url>
+    </reference>
+  </externalReferences>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_external_references.json b/tests/_data/snapshots/get_bom_with_external_references-1.4.json.bin
similarity index 65%
rename from tests/_data/own/json/1.4/bom_external_references.json
rename to tests/_data/snapshots/get_bom_with_external_references-1.4.json.bin
index 2f961c7b4..6608b6373 100644
--- a/tests/_data/own/json/1.4/bom_external_references.json
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.4.json.bin
@@ -1,68 +1,68 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
-  "version": 1,
+  "externalReferences": [
+    {
+      "comment": "No comment",
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "type": "distribution",
+      "url": "https://cyclonedx.org"
+    },
+    {
+      "type": "website",
+      "url": "https://cyclonedx.org"
+    }
+  ],
   "metadata": {
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
     ]
   },
-  "externalReferences": [
-    {
-      "url": "https://cyclonedx.org",
-      "comment": "No comment",
-      "type": "distribution",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ]
-    },
-    {
-      "url": "https://cyclonedx.org",
-      "type": "website"
-    }
-  ]
-}
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_external_references-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_external_references-1.4.xml.bin
new file mode 100644
index 000000000..877f4c951
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_external_references-1.4.xml.bin
@@ -0,0 +1,51 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+  </metadata>
+  <externalReferences>
+    <reference type="distribution">
+      <url>https://cyclonedx.org</url>
+      <comment>No comment</comment>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+    </reference>
+    <reference type="website">
+      <url>https://cyclonedx.org</url>
+    </reference>
+  </externalReferences>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.0.xml.bin
new file mode 100644
index 000000000..7355c2cac
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.0.xml.bin
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components>
+    <component type="library">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <modified>false</modified>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.1.xml.bin
new file mode 100644
index 000000000..7f5932c19
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.1.xml.bin
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_dependencies_component.json b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.json.bin
similarity index 72%
rename from tests/_data/own/json/1.2/bom_dependencies_component.json
rename to tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.json.bin
index dd6b880ee..522592fa2 100644
--- a/tests/_data/own/json/1.2/bom_dependencies_component.json
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.json.bin
@@ -1,63 +1,63 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:fae7d0a5-648d-4058-be92-774ed4f974eb",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.597300+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
       "hashes": [
         {
           "alg": "SHA-256",
           "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
         }
       ],
+      "name": "toml",
       "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "externalReferences": [
-        {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution"
-        }
-      ]
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.xml.bin
new file mode 100644
index 000000000..0370a0e36
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.2.xml.bin
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_dependencies_component.json b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.json.bin
similarity index 76%
rename from tests/_data/own/json/1.3/bom_dependencies_component.json
rename to tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.json.bin
index 1820acbd6..2aae8fac7 100644
--- a/tests/_data/own/json/1.3/bom_dependencies_component.json
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.json.bin
@@ -1,69 +1,69 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:f1ab7398-e797-4ac1-8fdd-f2901bd5059d",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:57.901622+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING"
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      ]
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.xml.bin
new file mode 100644
index 000000000..1b6501308
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.3.xml.bin
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_dependencies_component.json b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.json.bin
similarity index 69%
rename from tests/_data/own/json/1.4/bom_dependencies_component.json
rename to tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.json.bin
index df8cc3b77..531d42fcf 100644
--- a/tests/_data/own/json/1.4/bom_dependencies_component.json
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.json.bin
@@ -1,103 +1,103 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:890c2dff-1e2c-4133-a0b1-ee23d93737af",
-  "version": 1,
-  "metadata": {
-    "timestamp": "2023-01-07T13:45:58.782058+00:00",
-    "tools": [
-      {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
-        "externalReferences": [
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
-          },
-          {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
-          },
-          {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
-          },
-          {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
-          },
-          {
-            "url": "https://cyclonedx.org",
-            "type": "website"
-          }
-        ]
-      }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
-      "author": "Test Author",
-      "name": "setuptools",
-      "version": "50.3.2",
-      "licenses": [
-        {
-          "expression": "MIT License"
-        }
-      ],
-      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
-    }
-  },
   "components": [
     {
-      "type": "library",
       "bom-ref": "pkg:pypi/toml@0.10.2?extension=tar.gz",
-      "name": "toml",
-      "version": "0.10.2",
-      "hashes": [
-        {
-          "alg": "SHA-256",
-          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-        }
-      ],
-      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
-      ]
+      ],
+      "hashes": [
+        {
+          "alg": "SHA-256",
+          "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+        }
+      ],
+      "name": "toml",
+      "purl": "pkg:pypi/toml@0.10.2?extension=tar.gz",
+      "type": "library",
+      "version": "0.10.2"
     }
   ],
   "dependencies": [
     {
-      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
       "dependsOn": [
         "pkg:pypi/toml@0.10.2?extension=tar.gz"
-      ]
+      ],
+      "ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz"
     },
     {
       "ref": "pkg:pypi/toml@0.10.2?extension=tar.gz"
     }
-  ]
-}
+  ],
+  "metadata": {
+    "component": {
+      "author": "Test Author",
+      "bom-ref": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "licenses": [
+        {
+          "expression": "MIT License"
+        }
+      ],
+      "name": "setuptools",
+      "purl": "pkg:pypi/setuptools@50.3.2?extension=tar.gz",
+      "type": "library",
+      "version": "50.3.2"
+    },
+    "timestamp": "2023-01-07T13:44:32.312678+00:00",
+    "tools": [
+      {
+        "externalReferences": [
+          {
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
+          },
+          {
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
+          },
+          {
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
+          },
+          {
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
+          },
+          {
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
+          },
+          {
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
+          },
+          {
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
+          },
+          {
+            "type": "website",
+            "url": "https://cyclonedx.org"
+          }
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
+      }
+    ]
+  },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.xml.bin
new file mode 100644
index 000000000..1464249f6
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_metadata_component_and_dependencies-1.4.xml.bin
@@ -0,0 +1,73 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <author>Test Author</author>
+      <name>setuptools</name>
+      <version>50.3.2</version>
+      <licenses>
+        <expression>MIT License</expression>
+      </licenses>
+      <purl>pkg:pypi/setuptools@50.3.2?extension=tar.gz</purl>
+    </component>
+  </metadata>
+  <components>
+    <component type="library" bom-ref="pkg:pypi/toml@0.10.2?extension=tar.gz">
+      <name>toml</name>
+      <version>0.10.2</version>
+      <hashes>
+        <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+      </hashes>
+      <purl>pkg:pypi/toml@0.10.2?extension=tar.gz</purl>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+    </component>
+  </components>
+  <dependencies>
+    <dependency ref="pkg:pypi/setuptools@50.3.2?extension=tar.gz">
+      <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+    </dependency>
+    <dependency ref="pkg:pypi/toml@0.10.2?extension=tar.gz"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_nested_services-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_nested_services-1.0.xml.bin
new file mode 100644
index 000000000..acb066124
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.0.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_nested_services-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_nested_services-1.1.xml.bin
new file mode 100644
index 000000000..55ef5cda2
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.1.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_services_nested.json b/tests/_data/snapshots/get_bom_with_nested_services-1.2.json.bin
similarity index 88%
rename from tests/_data/own/json/1.2/bom_services_nested.json
rename to tests/_data/snapshots/get_bom_with_nested_services-1.2.json.bin
index f927f9d7a..ae3197b79 100644
--- a/tests/_data/own/json/1.2/bom_services_nested.json
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.2.json.bin
@@ -1,9 +1,18 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
     "component": {
-      "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
+      "bom-ref": "my-specific-bom-ref-for-cpl",
       "name": "cyclonedx-python-lib",
       "type": "library",
       "version": "1.0.0"
@@ -17,7 +26,7 @@
       }
     ]
   },
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
       "authenticated": false,
@@ -49,14 +58,14 @@
       "name": "my-first-service",
       "provider": {
         "contact": [
-          {
-            "email": "paul.horton@owasp.org",
-            "name": "Paul Horton"
-          },
           {
             "email": "someone@somewhere.tld",
             "name": "A N Other",
             "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
         ],
         "name": "CycloneDX",
@@ -65,10 +74,6 @@
         ]
       },
       "services": [
-        {
-          "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-          "name": "first-nested-service"
-        },
         {
           "authenticated": true,
           "bom-ref": "my-specific-bom-ref-for-second-nested-service",
@@ -76,14 +81,14 @@
           "name": "second-nested-service",
           "provider": {
             "contact": [
-              {
-                "email": "paul.horton@owasp.org",
-                "name": "Paul Horton"
-              },
               {
                 "email": "someone@somewhere.tld",
                 "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
+              },
+              {
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
             ],
             "name": "CycloneDX",
@@ -93,29 +98,33 @@
           },
           "version": "3.2.1",
           "x-trust-boundary": false
+        },
+        {
+          "bom-ref": "my-specific-bom-ref-for-first-nested-service",
+          "name": "first-nested-service"
         }
       ],
       "version": "1.2.3",
       "x-trust-boundary": true
     },
     {
-      "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service",
       "services": [
         {
-          "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+          "bom-ref": "00000000-0000-4000-8000-000000000003",
           "group": "what-group",
           "name": "yet-another-nested-service",
           "provider": {
             "contact": [
-              {
-                "email": "paul.horton@owasp.org",
-                "name": "Paul Horton"
-              },
               {
                 "email": "someone@somewhere.tld",
                 "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
+              },
+              {
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
             ],
             "name": "CycloneDX",
@@ -132,17 +141,8 @@
       ]
     }
   ],
-  "specVersion": "1.2",
   "version": 1,
-  "dependencies": [
-    {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
-    },
-    {
-      "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-    },
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    }
-  ]
-}
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_nested_services-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_nested_services-1.2.xml.bin
new file mode 100644
index 000000000..e01e6b3ed
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.2.xml.bin
@@ -0,0 +1,112 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+      <services>
+        <service bom-ref="my-specific-bom-ref-for-second-nested-service">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>no-group</group>
+          <name>second-nested-service</name>
+          <version>3.2.1</version>
+          <authenticated>true</authenticated>
+          <x-trust-boundary>false</x-trust-boundary>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-first-nested-service">
+          <name>first-nested-service</name>
+        </service>
+      </services>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+      <services>
+        <service bom-ref="00000000-0000-4000-8000-000000000003">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>what-group</group>
+          <name>yet-another-nested-service</name>
+          <version>6.5.4</version>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-another-nested-service">
+          <name>another-nested-service</name>
+        </service>
+      </services>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_services_nested.json b/tests/_data/snapshots/get_bom_with_nested_services-1.3.json.bin
similarity index 79%
rename from tests/_data/own/json/1.3/bom_services_nested.json
rename to tests/_data/snapshots/get_bom_with_nested_services-1.3.json.bin
index 82e9e1870..9ab746dbf 100644
--- a/tests/_data/own/json/1.3/bom_services_nested.json
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.3.json.bin
@@ -1,146 +1,153 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
+      "authenticated": false,
       "bom-ref": "my-specific-bom-ref-for-my-first-service",
-      "provider": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          },
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          }
-        ]
-      },
-      "group": "a-group",
-      "name": "my-first-service",
-      "version": "1.2.3",
+      "data": [
+        {
+          "classification": "public",
+          "flow": "outbound"
+        }
+      ],
       "description": "Description goes here",
       "endpoints": [
         "/api/thing/1",
         "/api/thing/2"
       ],
-      "authenticated": false,
-      "x-trust-boundary": true,
-      "data": [
+      "externalReferences": [
         {
-          "flow": "outbound",
-          "classification": "public"
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
       ],
+      "group": "a-group",
       "licenses": [
         {
           "expression": "Commercial"
         }
       ],
-      "externalReferences": [
+      "name": "my-first-service",
+      "properties": [
         {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
+          "name": "key1",
+          "value": "val1"
+        },
+        {
+          "name": "key2",
+          "value": "val2"
         }
       ],
+      "provider": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
+      },
       "services": [
         {
+          "authenticated": true,
           "bom-ref": "my-specific-bom-ref-for-second-nested-service",
+          "group": "no-group",
+          "name": "second-nested-service",
           "provider": {
-            "name": "CycloneDX",
-            "url": [
-              "https://cyclonedx.org"
-            ],
             "contact": [
               {
-                "name": "A N Other",
                 "email": "someone@somewhere.tld",
+                "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
               },
               {
-                "name": "Paul Horton",
-                "email": "paul.horton@owasp.org"
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
+            ],
+            "name": "CycloneDX",
+            "url": [
+              "https://cyclonedx.org"
             ]
           },
-          "group": "no-group",
-          "name": "second-nested-service",
           "version": "3.2.1",
-          "authenticated": true,
           "x-trust-boundary": false
         },
         {
-          "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+          "bom-ref": "my-specific-bom-ref-for-first-nested-service",
           "name": "first-nested-service"
         }
       ],
-      "properties": [
-        {
-          "name": "key1",
-          "value": "val1"
-        },
-        {
-          "name": "key2",
-          "value": "val2"
-        }
-      ]
+      "version": "1.2.3",
+      "x-trust-boundary": true
     },
     {
-      "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service",
       "services": [
         {
-          "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+          "bom-ref": "00000000-0000-4000-8000-000000000002",
+          "group": "what-group",
+          "name": "yet-another-nested-service",
           "provider": {
-            "name": "CycloneDX",
-            "url": [
-              "https://cyclonedx.org"
-            ],
             "contact": [
               {
-                "name": "A N Other",
                 "email": "someone@somewhere.tld",
+                "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
               },
               {
-                "name": "Paul Horton",
-                "email": "paul.horton@owasp.org"
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
+            ],
+            "name": "CycloneDX",
+            "url": [
+              "https://cyclonedx.org"
             ]
           },
-          "group": "what-group",
-          "name": "yet-another-nested-service",
           "version": "6.5.4"
         },
         {
@@ -150,15 +157,8 @@
       ]
     }
   ],
-  "dependencies": [
-    {
-      "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-    },
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    },
-    {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_nested_services-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_nested_services-1.3.xml.bin
new file mode 100644
index 000000000..00c1fd2b9
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.3.xml.bin
@@ -0,0 +1,119 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <services>
+        <service bom-ref="my-specific-bom-ref-for-second-nested-service">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>no-group</group>
+          <name>second-nested-service</name>
+          <version>3.2.1</version>
+          <authenticated>true</authenticated>
+          <x-trust-boundary>false</x-trust-boundary>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-first-nested-service">
+          <name>first-nested-service</name>
+        </service>
+      </services>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+      <services>
+        <service bom-ref="00000000-0000-4000-8000-000000000002">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>what-group</group>
+          <name>yet-another-nested-service</name>
+          <version>6.5.4</version>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-another-nested-service">
+          <name>another-nested-service</name>
+        </service>
+      </services>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_services_nested.json b/tests/_data/snapshots/get_bom_with_nested_services-1.4.json.bin
similarity index 78%
rename from tests/_data/own/json/1.4/bom_services_nested.json
rename to tests/_data/snapshots/get_bom_with_nested_services-1.4.json.bin
index 3c6746827..be23872da 100644
--- a/tests/_data/own/json/1.4/bom_services_nested.json
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.4.json.bin
@@ -1,190 +1,150 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
-      "bom-ref": "my-specific-bom-ref-for-my-first-service",
-      "provider": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          },
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          }
-        ]
-      },
-      "group": "a-group",
-      "name": "my-first-service",
-      "version": "1.2.3",
-      "description": "Description goes here",
-      "endpoints": [
-        "/api/thing/1",
-        "/api/thing/2"
-      ],
       "authenticated": false,
-      "x-trust-boundary": true,
+      "bom-ref": "my-specific-bom-ref-for-my-first-service",
       "data": [
         {
-          "flow": "outbound",
-          "classification": "public"
+          "classification": "public",
+          "flow": "outbound"
         }
       ],
-      "licenses": [
-        {
-          "expression": "Commercial"
-        }
+      "description": "Description goes here",
+      "endpoints": [
+        "/api/thing/1",
+        "/api/thing/2"
       ],
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
       ],
-      "services": [
+      "group": "a-group",
+      "licenses": [
         {
-          "bom-ref": "my-specific-bom-ref-for-second-nested-service",
-          "provider": {
-            "name": "CycloneDX",
-            "url": [
-              "https://cyclonedx.org"
-            ],
-            "contact": [
-              {
-                "name": "A N Other",
-                "email": "someone@somewhere.tld",
-                "phone": "+44 (0)1234 567890"
-              },
-              {
-                "name": "Paul Horton",
-                "email": "paul.horton@owasp.org"
-              }
-            ]
-          },
-          "group": "no-group",
-          "name": "second-nested-service",
-          "version": "3.2.1",
-          "authenticated": true,
-          "x-trust-boundary": false
+          "expression": "Commercial"
+        }
+      ],
+      "name": "my-first-service",
+      "properties": [
+        {
+          "name": "key1",
+          "value": "val1"
         },
         {
-          "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
-          "name": "first-nested-service"
+          "name": "key2",
+          "value": "val2"
         }
       ],
+      "provider": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
+      },
       "releaseNotes": {
-        "type": "major",
-        "title": "Release Notes Title",
-        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
-        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
-        "description": "This release is a test release",
-        "timestamp": "2021-12-31T10:00:00+00:00",
         "aliases": [
           "First Test Release"
         ],
-        "tags": [
-          "alpha",
-          "test"
-        ],
-        "resolves": [
-          {
-            "type": "security",
-            "id": "CVE-2021-44228",
-            "name": "Apache Log3Shell",
-            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
-            "source": {
-              "name": "NVD",
-              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
-            },
-            "references": [
-              "https://central.sonatype.org/news/20211213_log4shell_help",
-              "https://logging.apache.org/log4j/2.x/security.html"
-            ]
-          }
-        ],
+        "description": "This release is a test release",
+        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
         "notes": [
           {
+            "locale": "en-GB",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-GB"
+            }
           },
           {
+            "locale": "en-US",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-US"
+            }
           }
         ],
         "properties": [
@@ -196,44 +156,91 @@
             "name": "key2",
             "value": "val2"
           }
-        ]
+        ],
+        "resolves": [
+          {
+            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
+            "id": "CVE-2021-44228",
+            "name": "Apache Log3Shell",
+            "references": [
+              "https://central.sonatype.org/news/20211213_log4shell_help",
+              "https://logging.apache.org/log4j/2.x/security.html"
+            ],
+            "source": {
+              "name": "NVD",
+              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
+            },
+            "type": "security"
+          }
+        ],
+        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
+        "tags": [
+          "alpha",
+          "test"
+        ],
+        "timestamp": "2023-08-15T01:23:45.678900+00:00",
+        "title": "Release Notes Title",
+        "type": "major"
       },
-      "properties": [
+      "services": [
         {
-          "name": "key1",
-          "value": "val1"
+          "authenticated": true,
+          "bom-ref": "my-specific-bom-ref-for-second-nested-service",
+          "group": "no-group",
+          "name": "second-nested-service",
+          "provider": {
+            "contact": [
+              {
+                "email": "someone@somewhere.tld",
+                "name": "A N Other",
+                "phone": "+44 (0)1234 567890"
+              },
+              {
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
+              }
+            ],
+            "name": "CycloneDX",
+            "url": [
+              "https://cyclonedx.org"
+            ]
+          },
+          "version": "3.2.1",
+          "x-trust-boundary": false
         },
         {
-          "name": "key2",
-          "value": "val2"
+          "bom-ref": "my-specific-bom-ref-for-first-nested-service",
+          "name": "first-nested-service"
         }
-      ]
+      ],
+      "version": "1.2.3",
+      "x-trust-boundary": true
     },
     {
-      "bom-ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service",
       "services": [
         {
-          "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+          "bom-ref": "00000000-0000-4000-8000-000000000001",
+          "group": "what-group",
+          "name": "yet-another-nested-service",
           "provider": {
-            "name": "CycloneDX",
-            "url": [
-              "https://cyclonedx.org"
-            ],
             "contact": [
               {
-                "name": "A N Other",
                 "email": "someone@somewhere.tld",
+                "name": "A N Other",
                 "phone": "+44 (0)1234 567890"
               },
               {
-                "name": "Paul Horton",
-                "email": "paul.horton@owasp.org"
+                "email": "paul.horton@owasp.org",
+                "name": "Paul Horton"
               }
+            ],
+            "name": "CycloneDX",
+            "url": [
+              "https://cyclonedx.org"
             ]
           },
-          "group": "what-group",
-          "name": "yet-another-nested-service",
           "version": "6.5.4"
         },
         {
@@ -243,15 +250,8 @@
       ]
     }
   ],
-  "dependencies": [
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    },
-    {
-      "ref": "0b049d09-64c0-4490-a0f5-c84d9aacf857"
-    },
-    {
-      "ref": "cd3e9c95-9d41-49e7-9924-8cf0465ae789"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_nested_services-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_nested_services-1.4.xml.bin
new file mode 100644
index 000000000..986ed1589
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_nested_services-1.4.xml.bin
@@ -0,0 +1,189 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <services>
+        <service bom-ref="my-specific-bom-ref-for-second-nested-service">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>no-group</group>
+          <name>second-nested-service</name>
+          <version>3.2.1</version>
+          <authenticated>true</authenticated>
+          <x-trust-boundary>false</x-trust-boundary>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-first-nested-service">
+          <name>first-nested-service</name>
+        </service>
+      </services>
+      <releaseNotes>
+        <type>major</type>
+        <title>Release Notes Title</title>
+        <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
+        <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
+        <description>This release is a test release</description>
+        <timestamp>2023-08-15T01:23:45.678900+00:00</timestamp>
+        <aliases>
+          <alias>First Test Release</alias>
+        </aliases>
+        <tags>
+          <tag>alpha</tag>
+          <tag>test</tag>
+        </tags>
+        <resolves>
+          <issue type="security">
+            <id>CVE-2021-44228</id>
+            <name>Apache Log3Shell</name>
+            <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
+            <source>
+              <name>NVD</name>
+              <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
+            </source>
+            <references>
+              <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
+              <url>https://logging.apache.org/log4j/2.x/security.html</url>
+            </references>
+          </issue>
+        </resolves>
+        <notes>
+          <note>
+            <locale>en-GB</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+          <note>
+            <locale>en-US</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+        </notes>
+        <properties>
+          <property name="key1">val1</property>
+          <property name="key2">val2</property>
+        </properties>
+      </releaseNotes>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+      <services>
+        <service bom-ref="00000000-0000-4000-8000-000000000001">
+          <provider>
+            <name>CycloneDX</name>
+            <url>https://cyclonedx.org</url>
+            <contact>
+              <name>A N Other</name>
+              <email>someone@somewhere.tld</email>
+              <phone>+44 (0)1234 567890</phone>
+            </contact>
+            <contact>
+              <name>Paul Horton</name>
+              <email>paul.horton@owasp.org</email>
+            </contact>
+          </provider>
+          <group>what-group</group>
+          <name>yet-another-nested-service</name>
+          <version>6.5.4</version>
+        </service>
+        <service bom-ref="my-specific-bom-ref-for-another-nested-service">
+          <name>another-nested-service</name>
+        </service>
+      </services>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_services_complex-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_services_complex-1.0.xml.bin
new file mode 100644
index 000000000..acb066124
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.0.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_services_complex-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_services_complex-1.1.xml.bin
new file mode 100644
index 000000000..55ef5cda2
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.1.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_services_complex.json b/tests/_data/snapshots/get_bom_with_services_complex-1.2.json.bin
similarity index 82%
rename from tests/_data/own/json/1.2/bom_services_complex.json
rename to tests/_data/snapshots/get_bom_with_services_complex-1.2.json.bin
index 2caa98766..549dc40fc 100644
--- a/tests/_data/own/json/1.2/bom_services_complex.json
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.2.json.bin
@@ -1,38 +1,71 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
+      "authenticated": false,
       "bom-ref": "my-specific-bom-ref-for-my-first-service",
+      "data": [
+        {
+          "classification": "public",
+          "flow": "outbound"
+        }
+      ],
+      "description": "Description goes here",
+      "endpoints": [
+        "/api/thing/1",
+        "/api/thing/2"
+      ],
+      "externalReferences": [
+        {
+          "comment": "No comment",
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
+        }
+      ],
+      "group": "a-group",
+      "licenses": [
+        {
+          "expression": "Commercial"
+        }
+      ],
+      "name": "my-first-service",
       "provider": {
         "contact": [
-          {
-            "email": "paul.horton@owasp.org",
-            "name": "Paul Horton"
-          },
           {
             "email": "someone@somewhere.tld",
             "name": "A N Other",
             "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
           }
         ],
         "name": "CycloneDX",
@@ -40,49 +73,16 @@
           "https://cyclonedx.org"
         ]
       },
-      "group": "a-group",
-      "name": "my-first-service",
       "version": "1.2.3",
-      "description": "Description goes here",
-      "endpoints": [
-        "/api/thing/1",
-        "/api/thing/2"
-      ],
-      "authenticated": false,
-      "x-trust-boundary": true,
-      "data": [
-        {
-          "classification": "public",
-          "flow": "outbound"
-        }
-      ],
-      "licenses": [
-        {
-          "expression": "Commercial"
-        }
-      ],
-      "externalReferences": [
-        {
-          "comment": "No comment",
-          "type": "distribution",
-          "url": "https://cyclonedx.org"
-        }
-      ]
+      "x-trust-boundary": true
     },
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655"
-    },
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_complex-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_services_complex-1.2.xml.bin
new file mode 100644
index 000000000..7e6b4b9f0
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.2.xml.bin
@@ -0,0 +1,64 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+        </reference>
+      </externalReferences>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_services_complex.json b/tests/_data/snapshots/get_bom_with_services_complex-1.3.json.bin
similarity index 76%
rename from tests/_data/own/json/1.3/bom_services_complex.json
rename to tests/_data/snapshots/get_bom_with_services_complex-1.3.json.bin
index f222cd505..38ea8bb3f 100644
--- a/tests/_data/own/json/1.3/bom_services_complex.json
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.3.json.bin
@@ -1,79 +1,67 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
-      "bom-ref": "my-specific-bom-ref-for-my-first-service",
-      "provider": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          },
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          }
-        ]
-      },
-      "group": "a-group",
-      "name": "my-first-service",
-      "version": "1.2.3",
-      "description": "Description goes here",
-      "endpoints": [
-        "/api/thing/1",
-        "/api/thing/2"
-      ],
       "authenticated": false,
-      "x-trust-boundary": true,
+      "bom-ref": "my-specific-bom-ref-for-my-first-service",
       "data": [
         {
-          "flow": "outbound",
-          "classification": "public"
+          "classification": "public",
+          "flow": "outbound"
         }
       ],
-      "licenses": [
-        {
-          "expression": "Commercial"
-        }
+      "description": "Description goes here",
+      "endpoints": [
+        "/api/thing/1",
+        "/api/thing/2"
       ],
       "externalReferences": [
         {
-          "url": "https://cyclonedx.org",
           "comment": "No comment",
-          "type": "distribution",
           "hashes": [
             {
               "alg": "SHA-256",
               "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
             }
-          ]
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
       ],
+      "group": "a-group",
+      "licenses": [
+        {
+          "expression": "Commercial"
+        }
+      ],
+      "name": "my-first-service",
       "properties": [
         {
           "name": "key1",
@@ -83,22 +71,34 @@
           "name": "key2",
           "value": "val2"
         }
-      ]
+      ],
+      "provider": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
+      },
+      "version": "1.2.3",
+      "x-trust-boundary": true
     },
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    },
-    {
-      "ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_complex-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_services_complex-1.3.xml.bin
new file mode 100644
index 000000000..3725a7257
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.3.xml.bin
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_services_complex.json b/tests/_data/snapshots/get_bom_with_services_complex-1.4.json.bin
similarity index 76%
rename from tests/_data/own/json/1.4/bom_services_complex.json
rename to tests/_data/snapshots/get_bom_with_services_complex-1.4.json.bin
index d4d80b06d..b4d58520e 100644
--- a/tests/_data/own/json/1.4/bom_services_complex.json
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.4.json.bin
@@ -1,159 +1,150 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
+      "authenticated": false,
       "bom-ref": "my-specific-bom-ref-for-my-first-service",
-      "provider": {
-        "name": "CycloneDX",
-        "url": [
-          "https://cyclonedx.org"
-        ],
-        "contact": [
-          {
-            "name": "A N Other",
-            "email": "someone@somewhere.tld",
-            "phone": "+44 (0)1234 567890"
-          },
-          {
-            "name": "Paul Horton",
-            "email": "paul.horton@owasp.org"
-          }
-        ]
-      },
-      "group": "a-group",
-      "name": "my-first-service",
-      "version": "1.2.3",
+      "data": [
+        {
+          "classification": "public",
+          "flow": "outbound"
+        }
+      ],
       "description": "Description goes here",
       "endpoints": [
         "/api/thing/1",
         "/api/thing/2"
       ],
-      "authenticated": false,
-      "x-trust-boundary": true,
-      "data": [
+      "externalReferences": [
         {
-          "flow": "outbound",
-          "classification": "public"
+          "comment": "No comment",
+          "hashes": [
+            {
+              "alg": "SHA-256",
+              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
+            }
+          ],
+          "type": "distribution",
+          "url": "https://cyclonedx.org"
         }
       ],
+      "group": "a-group",
       "licenses": [
         {
           "expression": "Commercial"
         }
       ],
-      "externalReferences": [
+      "name": "my-first-service",
+      "properties": [
         {
-          "url": "https://cyclonedx.org",
-          "comment": "No comment",
-          "type": "distribution",
-          "hashes": [
-            {
-              "alg": "SHA-256",
-              "content": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"
-            }
-          ]
+          "name": "key1",
+          "value": "val1"
+        },
+        {
+          "name": "key2",
+          "value": "val2"
         }
       ],
+      "provider": {
+        "contact": [
+          {
+            "email": "someone@somewhere.tld",
+            "name": "A N Other",
+            "phone": "+44 (0)1234 567890"
+          },
+          {
+            "email": "paul.horton@owasp.org",
+            "name": "Paul Horton"
+          }
+        ],
+        "name": "CycloneDX",
+        "url": [
+          "https://cyclonedx.org"
+        ]
+      },
       "releaseNotes": {
-        "type": "major",
-        "title": "Release Notes Title",
-        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
-        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
-        "description": "This release is a test release",
-        "timestamp": "2021-12-31T10:00:00+00:00",
         "aliases": [
           "First Test Release"
         ],
-        "tags": [
-          "alpha",
-          "test"
-        ],
-        "resolves": [
-          {
-            "type": "security",
-            "id": "CVE-2021-44228",
-            "name": "Apache Log3Shell",
-            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
-            "source": {
-              "name": "NVD",
-              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
-            },
-            "references": [
-              "https://central.sonatype.org/news/20211213_log4shell_help",
-              "https://logging.apache.org/log4j/2.x/security.html"
-            ]
-          }
-        ],
+        "description": "This release is a test release",
+        "featuredImage": "https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png",
         "notes": [
           {
+            "locale": "en-GB",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-GB"
+            }
           },
           {
+            "locale": "en-US",
             "text": {
               "content": "U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==",
               "contentType": "text/plain; charset=UTF-8",
               "encoding": "base64"
-            },
-            "locale": "en-US"
+            }
           }
         ],
         "properties": [
@@ -165,33 +156,42 @@
             "name": "key2",
             "value": "val2"
           }
-        ]
+        ],
+        "resolves": [
+          {
+            "description": "Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...",
+            "id": "CVE-2021-44228",
+            "name": "Apache Log3Shell",
+            "references": [
+              "https://central.sonatype.org/news/20211213_log4shell_help",
+              "https://logging.apache.org/log4j/2.x/security.html"
+            ],
+            "source": {
+              "name": "NVD",
+              "url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
+            },
+            "type": "security"
+          }
+        ],
+        "socialImage": "https://cyclonedx.org/cyclonedx-icon.png",
+        "tags": [
+          "alpha",
+          "test"
+        ],
+        "timestamp": "2023-08-15T01:23:45.678900+00:00",
+        "title": "Release Notes Title",
+        "type": "major"
       },
-      "properties": [
-        {
-          "name": "key1",
-          "value": "val1"
-        },
-        {
-          "name": "key2",
-          "value": "val2"
-        }
-      ]
+      "version": "1.2.3",
+      "x-trust-boundary": true
     },
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "bb5911d6-1a1d-41c9-b6e0-46e848d16655"
-    },
-    {
-      "ref": "my-specific-bom-ref-for-my-first-service"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_complex-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_services_complex-1.4.xml.bin
new file mode 100644
index 000000000..bb4f4a0ff
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_complex-1.4.xml.bin
@@ -0,0 +1,141 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <provider>
+        <name>CycloneDX</name>
+        <url>https://cyclonedx.org</url>
+        <contact>
+          <name>A N Other</name>
+          <email>someone@somewhere.tld</email>
+          <phone>+44 (0)1234 567890</phone>
+        </contact>
+        <contact>
+          <name>Paul Horton</name>
+          <email>paul.horton@owasp.org</email>
+        </contact>
+      </provider>
+      <group>a-group</group>
+      <name>my-first-service</name>
+      <version>1.2.3</version>
+      <description>Description goes here</description>
+      <endpoints>
+        <endpoint>/api/thing/1</endpoint>
+        <endpoint>/api/thing/2</endpoint>
+      </endpoints>
+      <authenticated>false</authenticated>
+      <x-trust-boundary>true</x-trust-boundary>
+      <data>
+        <classification flow="outbound">public</classification>
+      </data>
+      <licenses>
+        <expression>Commercial</expression>
+      </licenses>
+      <externalReferences>
+        <reference type="distribution">
+          <url>https://cyclonedx.org</url>
+          <comment>No comment</comment>
+          <hashes>
+            <hash alg="SHA-256">806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b</hash>
+          </hashes>
+        </reference>
+      </externalReferences>
+      <properties>
+        <property name="key1">val1</property>
+        <property name="key2">val2</property>
+      </properties>
+      <releaseNotes>
+        <type>major</type>
+        <title>Release Notes Title</title>
+        <featuredImage>https://cyclonedx.org/theme/assets/images/CycloneDX-Twitter-Card.png</featuredImage>
+        <socialImage>https://cyclonedx.org/cyclonedx-icon.png</socialImage>
+        <description>This release is a test release</description>
+        <timestamp>2023-08-15T01:23:45.678900+00:00</timestamp>
+        <aliases>
+          <alias>First Test Release</alias>
+        </aliases>
+        <tags>
+          <tag>alpha</tag>
+          <tag>test</tag>
+        </tags>
+        <resolves>
+          <issue type="security">
+            <id>CVE-2021-44228</id>
+            <name>Apache Log3Shell</name>
+            <description>Apache Log4j2 2.0-beta9 through 2.12.1 and 2.13.0 through 2.15.0 JNDI features...</description>
+            <source>
+              <name>NVD</name>
+              <url>https://nvd.nist.gov/vuln/detail/CVE-2021-44228</url>
+            </source>
+            <references>
+              <url>https://central.sonatype.org/news/20211213_log4shell_help</url>
+              <url>https://logging.apache.org/log4j/2.x/security.html</url>
+            </references>
+          </issue>
+        </resolves>
+        <notes>
+          <note>
+            <locale>en-GB</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+          <note>
+            <locale>en-US</locale>
+            <text content-type="text/plain; charset=UTF-8" encoding="base64">U29tZSBzaW1wbGUgcGxhaW4gdGV4dA==</text>
+          </note>
+        </notes>
+        <properties>
+          <property name="key1">val1</property>
+          <property name="key2">val2</property>
+        </properties>
+      </releaseNotes>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_services_simple-1.0.xml.bin b/tests/_data/snapshots/get_bom_with_services_simple-1.0.xml.bin
new file mode 100644
index 000000000..acb066124
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.0.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.0" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/snapshots/get_bom_with_services_simple-1.1.xml.bin b/tests/_data/snapshots/get_bom_with_services_simple-1.1.xml.bin
new file mode 100644
index 000000000..55ef5cda2
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.1.xml.bin
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.1" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <components/>
+</bom>
diff --git a/tests/_data/own/json/1.2/bom_services_simple.json b/tests/_data/snapshots/get_bom_with_services_simple-1.2.json.bin
similarity index 57%
rename from tests/_data/own/json/1.2/bom_services_simple.json
rename to tests/_data/snapshots/get_bom_with_services_simple-1.2.json.bin
index 198bfadd0..e7562cebe 100644
--- a/tests/_data/own/json/1.2/bom_services_simple.json
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.2.json.bin
@@ -1,44 +1,44 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.2",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-first-service",
       "name": "my-first-service"
     },
     {
-      "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    },
-    {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.2"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_simple-1.2.xml.bin b/tests/_data/snapshots/get_bom_with_services_simple-1.2.xml.bin
new file mode 100644
index 000000000..60db211e8
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.2.xml.bin
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <name>my-first-service</name>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.3/bom_services_simple.json b/tests/_data/snapshots/get_bom_with_services_simple-1.3.json.bin
similarity index 57%
rename from tests/_data/own/json/1.3/bom_services_simple.json
rename to tests/_data/snapshots/get_bom_with_services_simple-1.3.json.bin
index a18e31cbe..4c2ea8b21 100644
--- a/tests/_data/own/json/1.3/bom_services_simple.json
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.3.json.bin
@@ -1,44 +1,44 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.3",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
         "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
         "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-first-service",
       "name": "my-first-service"
     },
     {
-      "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    },
-    {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.3"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_simple-1.3.xml.bin b/tests/_data/snapshots/get_bom_with_services_simple-1.3.xml.bin
new file mode 100644
index 000000000..08fcc576b
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.3.xml.bin
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.3" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <name>my-first-service</name>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/_data/own/json/1.4/bom_services_simple.json b/tests/_data/snapshots/get_bom_with_services_simple-1.4.json.bin
similarity index 58%
rename from tests/_data/own/json/1.4/bom_services_simple.json
rename to tests/_data/snapshots/get_bom_with_services_simple-1.4.json.bin
index 38c714228..78ab58482 100644
--- a/tests/_data/own/json/1.4/bom_services_simple.json
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.4.json.bin
@@ -1,78 +1,78 @@
 {
-  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
-  "bomFormat": "CycloneDX",
-  "specVersion": "1.4",
-  "serialNumber": "urn:uuid:d0b24ba4-102b-497e-b31f-4fdc3f0a3005",
-  "version": 1,
+  "dependencies": [
+    {
+      "ref": "my-specific-bom-ref-for-cpl"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-first-service"
+    },
+    {
+      "ref": "my-specific-bom-ref-for-my-second-service"
+    }
+  ],
   "metadata": {
+    "component": {
+      "bom-ref": "my-specific-bom-ref-for-cpl",
+      "name": "cyclonedx-python-lib",
+      "type": "library",
+      "version": "1.0.0"
+    },
     "timestamp": "2023-01-07T13:44:32.312678+00:00",
     "tools": [
       {
-        "vendor": "CycloneDX",
-        "name": "cyclonedx-python-lib",
-        "version": "TESTING",
         "externalReferences": [
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions",
-            "type": "build-system"
+            "type": "build-system",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/actions"
           },
           {
-            "url": "https://pypi.org/project/cyclonedx-python-lib/",
-            "type": "distribution"
+            "type": "distribution",
+            "url": "https://pypi.org/project/cyclonedx-python-lib/"
           },
           {
-            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/",
-            "type": "documentation"
+            "type": "documentation",
+            "url": "https://cyclonedx.github.io/cyclonedx-python-lib/"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues",
-            "type": "issue-tracker"
+            "type": "issue-tracker",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/issues"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE",
-            "type": "license"
+            "type": "license",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md",
-            "type": "release-notes"
+            "type": "release-notes",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md"
           },
           {
-            "url": "https://github.com/CycloneDX/cyclonedx-python-lib",
-            "type": "vcs"
+            "type": "vcs",
+            "url": "https://github.com/CycloneDX/cyclonedx-python-lib"
           },
           {
-            "url": "https://cyclonedx.org",
-            "type": "website"
+            "type": "website",
+            "url": "https://cyclonedx.org"
           }
-        ]
+        ],
+        "name": "cyclonedx-python-lib",
+        "vendor": "CycloneDX",
+        "version": "TESTING"
       }
-    ],
-    "component": {
-      "type": "library",
-      "bom-ref": "df70b5f1-8f53-47a4-be48-669ae78795e6",
-      "name": "cyclonedx-python-lib",
-      "version": "1.0.0"
-    }
+    ]
   },
+  "serialNumber": "urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac",
   "services": [
     {
-      "bom-ref": "be2c6502-7e9a-47db-9a66-e34f729810a3",
+      "bom-ref": "my-specific-bom-ref-for-my-first-service",
       "name": "my-first-service"
     },
     {
-      "bom-ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda",
+      "bom-ref": "my-specific-bom-ref-for-my-second-service",
       "name": "my-second-service"
     }
   ],
-  "dependencies": [
-    {
-      "ref": "df70b5f1-8f53-47a4-be48-669ae78795e6"
-    },
-    {
-      "ref": "be2c6502-7e9a-47db-9a66-e34f729810a3"
-    },
-    {
-      "ref": "17e3b199-dc0b-42ef-bfdd-1fa81a1e3eda"
-    }
-  ]
-}
+  "version": 1,
+  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
+  "bomFormat": "CycloneDX",
+  "specVersion": "1.4"
+}
\ No newline at end of file
diff --git a/tests/_data/snapshots/get_bom_with_services_simple-1.4.xml.bin b/tests/_data/snapshots/get_bom_with_services_simple-1.4.xml.bin
new file mode 100644
index 000000000..ed0a032df
--- /dev/null
+++ b/tests/_data/snapshots/get_bom_with_services_simple-1.4.xml.bin
@@ -0,0 +1,56 @@
+<?xml version="1.0" ?>
+<bom xmlns="http://cyclonedx.org/schema/bom/1.4" serialNumber="urn:uuid:1441d33a-e0fc-45b5-af3b-61ee52a88bac" version="1">
+  <metadata>
+    <timestamp>2023-01-07T13:44:32.312678+00:00</timestamp>
+    <tools>
+      <tool>
+        <vendor>CycloneDX</vendor>
+        <name>cyclonedx-python-lib</name>
+        <version>TESTING</version>
+        <externalReferences>
+          <reference type="build-system">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/actions</url>
+          </reference>
+          <reference type="distribution">
+            <url>https://pypi.org/project/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="documentation">
+            <url>https://cyclonedx.github.io/cyclonedx-python-lib/</url>
+          </reference>
+          <reference type="issue-tracker">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/issues</url>
+          </reference>
+          <reference type="license">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/LICENSE</url>
+          </reference>
+          <reference type="release-notes">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md</url>
+          </reference>
+          <reference type="vcs">
+            <url>https://github.com/CycloneDX/cyclonedx-python-lib</url>
+          </reference>
+          <reference type="website">
+            <url>https://cyclonedx.org</url>
+          </reference>
+        </externalReferences>
+      </tool>
+    </tools>
+    <component type="library" bom-ref="my-specific-bom-ref-for-cpl">
+      <name>cyclonedx-python-lib</name>
+      <version>1.0.0</version>
+    </component>
+  </metadata>
+  <services>
+    <service bom-ref="my-specific-bom-ref-for-my-first-service">
+      <name>my-first-service</name>
+    </service>
+    <service bom-ref="my-specific-bom-ref-for-my-second-service">
+      <name>my-second-service</name>
+    </service>
+  </services>
+  <dependencies>
+    <dependency ref="my-specific-bom-ref-for-cpl"/>
+    <dependency ref="my-specific-bom-ref-for-my-first-service"/>
+    <dependency ref="my-specific-bom-ref-for-my-second-service"/>
+  </dependencies>
+</bom>
diff --git a/tests/base.py b/tests/base.py
deleted file mode 100644
index 371b53c63..000000000
--- a/tests/base.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# This file is part of CycloneDX Python Lib
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# 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.
-#
-# SPDX-License-Identifier: Apache-2.0
-# Copyright (c) OWASP Foundation. All Rights Reserved.
-
-import json
-import xml.etree.ElementTree
-from datetime import datetime, timezone
-from typing import Any
-from unittest import TestCase
-from uuid import uuid4
-
-from lxml import etree
-from xmldiff import main
-from xmldiff.actions import MoveNode
-
-from cyclonedx.exception import MissingOptionalDependencyException
-from cyclonedx.output import SchemaVersion
-from cyclonedx.validation.json import JsonStrictValidator
-from cyclonedx.validation.xml import XmlValidator
-
-single_uuid: str = 'urn:uuid:{}'.format(uuid4())
-
-
-class BaseJsonTestCase(TestCase):
-
-    def assertValidAgainstSchema(self, bom_json: str, schema_version: SchemaVersion) -> None:
-        try:
-            validation_error = JsonStrictValidator(schema_version).validate_str(bom_json)
-        except MissingOptionalDependencyException:
-            return  # some deps are missing - skip the validation
-        self.assertIsNone(validation_error,
-                          f'Failed to validate SBOM against JSON schema: {str(validation_error)}')
-
-    @staticmethod
-    def _sort_json_dict(item: object) -> Any:
-        if isinstance(item, dict):
-            return sorted((key, BaseJsonTestCase._sort_json_dict(values)) for key, values in item.items())
-        if isinstance(item, list):
-            return sorted(BaseJsonTestCase._sort_json_dict(x) for x in item)
-        else:
-            return item
-
-    def assertEqualJson(self, a: str, b: str) -> None:
-        self.assertEqual(
-            BaseJsonTestCase._sort_json_dict(json.loads(a)),
-            BaseJsonTestCase._sort_json_dict(json.loads(b))
-        )
-
-    def assertEqualJsonBom(self, a: str, b: str) -> None:
-        """
-        Remove UUID before comparison as this will be unique to each generation
-        """
-        ab = json.loads(a)
-        bb = json.loads(b)
-
-        # Null serialNumbers
-        ab['serialNumber'] = single_uuid
-        bb['serialNumber'] = single_uuid
-
-        # Unify timestamps to ensure they will compare
-        now = datetime.now(tz=timezone.utc)
-        if 'metadata' in ab.keys():
-            ab['metadata']['timestamp'] = now.isoformat()
-        if 'metadata' in bb.keys():
-            bb['metadata']['timestamp'] = now.isoformat()
-
-        self.assertEqualJson(json.dumps(ab), json.dumps(bb))
-
-
-class BaseXmlTestCase(TestCase):
-
-    def assertValidAgainstSchema(self, bom_xml: str, schema_version: SchemaVersion) -> None:
-        try:
-            validation_error = XmlValidator(schema_version).validate_str(bom_xml)
-        except MissingOptionalDependencyException:
-            return  # some deps are missing - skip the validation
-        self.assertIsNone(validation_error,
-                          f'Failed to validate Generated SBOM against XSD Schema: {str(validation_error)}')
-
-    def assertEqualXml(self, a: str, b: str) -> None:
-        diff_results = main.diff_texts(a, b, diff_options={'F': 0.5})
-        diff_results = list(filter(lambda o: not isinstance(o, MoveNode), diff_results))
-        self.assertEqual(len(diff_results), 0, f'There are XML differences: {diff_results}\n- {a}\n+ {b}')
-
-    def assertEqualXmlBom(self, a: str, b: str, namespace: str) -> None:
-        """
-        Sanitise some fields such as timestamps which cannot have their values directly compared for equality.
-        """
-        ba = xml.etree.ElementTree.fromstring(a, etree.XMLParser(remove_blank_text=True, remove_comments=True))
-        bb = xml.etree.ElementTree.fromstring(b, etree.XMLParser(remove_blank_text=True, remove_comments=True))
-
-        # Align serialNumbers
-        ba.set('serialNumber', single_uuid)
-        bb.set('serialNumber', single_uuid)
-
-        # Align timestamps in metadata
-        now = datetime.now(tz=timezone.utc)
-        metadata_ts_a = ba.find('./{{{}}}metadata/{{{}}}timestamp'.format(namespace, namespace))
-        if metadata_ts_a is not None:
-            metadata_ts_a.text = now.isoformat()
-        metadata_ts_b = bb.find('./{{{}}}metadata/{{{}}}timestamp'.format(namespace, namespace))
-        if metadata_ts_b is not None:
-            metadata_ts_b.text = now.isoformat()
-
-        self.assertEqualXml(
-            xml.etree.ElementTree.tostring(ba, 'unicode'),
-            xml.etree.ElementTree.tostring(bb, 'unicode')
-        )
diff --git a/tests/test_component.py b/tests/test_component.py
index a344d880c..92c54c8c7 100644
--- a/tests/test_component.py
+++ b/tests/test_component.py
@@ -23,10 +23,8 @@
 
 from cyclonedx.model import sha1sum
 from cyclonedx.model.component import Component
-from tests import TESTDATA_DIRECTORY
-from tests.data import get_component_setuptools_simple
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'xml', '1.4')
+from tests import OWN_DATA_DIRECTORY
+from tests._data.models import get_component_setuptools_simple
 
 
 class TestComponent(TestCase):
@@ -64,8 +62,8 @@ def test_purl_incorrect_name(self) -> None:
         self.assertEqual(purl.version, '50.3.2')
         self.assertEqual(purl.qualifiers, {'extension': 'tar.gz'})
 
-    def test_from_file_with_path_for_bom(self) -> None:
-        test_file = join(RELEVANT_TESTDATA_DIRECTORY, 'bom_setuptools.xml')
+    def test_from_xml_file_with_path_for_bom(self) -> None:
+        test_file = join(OWN_DATA_DIRECTORY, 'xml', '1.4', 'bom_setuptools.xml')
         c = Component.for_file(absolute_file_path=test_file, path_for_bom='fixtures/bom_setuptools.xml')
         sha1_hash: str = sha1sum(filename=test_file)
         expected_version = '0.0.0-{}'.format(sha1_hash[0:12])
diff --git a/tests/test_deserialize_json.py b/tests/test_deserialize_json.py
index 1f07252fb..fe9ff1776 100644
--- a/tests/test_deserialize_json.py
+++ b/tests/test_deserialize_json.py
@@ -15,418 +15,31 @@
 # SPDX-License-Identifier: Apache-2.0
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
-import json
-from datetime import datetime
-from os.path import join
-from typing import cast
-from unittest.mock import Mock, patch
-from uuid import UUID
 
-from cyclonedx.model.bom import Bom
-from cyclonedx.output import LATEST_SUPPORTED_SCHEMA_VERSION, OutputFormat, SchemaVersion, get_instance
-from tests import TESTDATA_DIRECTORY
-from tests.base import BaseJsonTestCase
-from tests.data import (
-    MOCK_BOM_UUID_1,
-    MOCK_BOM_UUID_2,
-    MOCK_UUID_1,
-    MOCK_UUID_2,
-    MOCK_UUID_3,
-    MOCK_UUID_4,
-    MOCK_UUID_5,
-    MOCK_UUID_6,
-    MOCK_UUID_7,
-    MOCK_UUID_8,
-    TEST_UUIDS,
-    get_bom_just_complete_metadata,
-    get_bom_with_component_setuptools_basic,
-    get_bom_with_component_setuptools_complete,
-    get_bom_with_component_setuptools_no_component_version,
-    get_bom_with_component_setuptools_with_cpe,
-    get_bom_with_component_setuptools_with_release_notes,
-    get_bom_with_component_setuptools_with_vulnerability,
-    get_bom_with_component_toml_1,
-    get_bom_with_dependencies_valid,
-    get_bom_with_external_references,
-    get_bom_with_nested_services,
-    get_bom_with_services_complex,
-    get_bom_with_services_simple,
-)
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'json')
-
-
-def fixed_date_time() -> datetime:
-    return datetime.fromisoformat('2023-01-07 13:44:32.312678+00:00')
-
-
-@patch('cyclonedx.model.ThisTool._version', 'TESTING')
-@patch('cyclonedx.model.bom.get_now_utc', fixed_date_time)
-class TestOutputJson(BaseJsonTestCase):
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_4(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_external_references.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_3(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_external_references.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_2(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_external_references.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_4(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_3(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_2(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_4_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_3_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_2_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_4_full_component(self, mock1: Mock, mock2: Mock) -> None:
-        self.maxDiff = None
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock1.assert_called()
-        mock2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_3_full_component(self, mock1: Mock, mock2: Mock) -> None:
-        self.maxDiff = None
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock1.assert_called()
-        mock2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_2_full_component(self, mock1: Mock, mock2: Mock) -> None:
-        self.maxDiff = None
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock1.assert_called()
-        mock2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_7)
-    def test_bom_v1_4_component_hashes_external_references(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_toml_1.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_7)
-    def test_bom_v1_3_component_hashes_external_references(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_toml_1.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_7)
-    def test_bom_v1_2_component_hashes_external_references(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_toml_1.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_8)
-    def test_bom_v1_4_no_component_version(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_no_version.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_8)
-    def test_bom_v1_3_no_component_version(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_no_version.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_UUID_8)
-    def test_bom_v1_2_no_component_version(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_no_version.json'
-        )
-        mock_1.assert_called()
+from json import loads as json_loads
+from typing import Any, Callable
+from unittest import TestCase
+from unittest.mock import patch
 
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_component_with_release_notes(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_release_notes.json'
-        )
-        mock_1.assert_called()
+from ddt import ddt, named_data
 
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_component_with_release_notes(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_component_with_vulnerability(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_vulnerabilities.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_component_with_vulnerability(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-        mock_1.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_1))
-    def test_bom_v1_4_with_metadata_component(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_2))
-    def test_bom_v1_3_with_metadata_component(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    def test_bom_v1_2_with_metadata_component(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_2)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_dependencies(self, mock_1: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies.json'
-        )
-        mock_1.assert_called()
-    # --
-
-    # Helper methods
-    def _validate_json_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
-        bom.metadata.timestamp = fixed_date_time()
-        bom.validate()
-
-        if schema_version != LATEST_SUPPORTED_SCHEMA_VERSION:
-            # Rewind the BOM to only have data supported by the SchemaVersion in question
-            outputter = get_instance(bom=bom, output_format=OutputFormat.JSON, schema_version=schema_version)
-            bom = cast(Bom, Bom.from_json(data=json.loads(outputter.output_as_string())))
-
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), fixture)) as input_json:
-            deserialized_bom = cast(Bom, Bom.from_json(data=json.loads(input_json.read())))
-
-            self.assertEqual(bom.metadata, deserialized_bom.metadata)
-
-            # This comparison fails for Dependencies despite the SortedSet's being identical
-            # self.assertEqual(bom.dependencies, deserialized_bom.dependencies)
-            self.assertSetEqual(set(bom.dependencies), set(deserialized_bom.dependencies))
-
-            self.assertEqual(bom.vulnerabilities, deserialized_bom.vulnerabilities)
-
-            self.assertEqual(bom, deserialized_bom)
+from cyclonedx.model.bom import Bom
+from cyclonedx.schema import OutputFormat, SchemaVersion
+from tests import DeepCompareMixin, SnapshotMixin, mksname, uuid_generator
+from tests._data.models import all_get_bom_funct_valid, all_get_bom_funct_with_incomplete_deps
+
+
+@ddt
+class TestDeserializeJson(TestCase, SnapshotMixin, DeepCompareMixin):
+
+    @named_data(*all_get_bom_funct_valid)
+    @patch('cyclonedx.model.ThisTool._version', 'TESTING')
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(0, version=4))
+    def test(self, get_bom: Callable[[], Bom], *_: Any, **__: Any) -> None:
+        # only latest schema will have all data populated in serialized form
+        snapshot_name = mksname(get_bom, SchemaVersion.V1_4, OutputFormat.JSON)
+        expected = get_bom()
+        json = json_loads(self.readSnapshot(snapshot_name))
+        bom = Bom.from_json(json)
+        self.assertBomDeepEqual(expected, bom,
+                                fuzzy_deps=get_bom in all_get_bom_funct_with_incomplete_deps)
diff --git a/tests/test_deserialize_xml.py b/tests/test_deserialize_xml.py
index 2b32ed95b..3b2652d81 100644
--- a/tests/test_deserialize_xml.py
+++ b/tests/test_deserialize_xml.py
@@ -15,688 +15,30 @@
 # SPDX-License-Identifier: Apache-2.0
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
-from datetime import datetime
-from io import StringIO
-from os.path import join
-from typing import cast
-from unittest.mock import Mock, patch
-from uuid import UUID
 
-from cyclonedx.model.bom import Bom
-from cyclonedx.output import LATEST_SUPPORTED_SCHEMA_VERSION, SchemaVersion, get_instance
-from cyclonedx.schema import OutputFormat
-from tests import TESTDATA_DIRECTORY
-from tests.base import BaseXmlTestCase
-from tests.data import (
-    MOCK_BOM_UUID_1,
-    MOCK_UUID_2,
-    MOCK_UUID_3,
-    MOCK_UUID_4,
-    MOCK_UUID_5,
-    MOCK_UUID_6,
-    TEST_UUIDS,
-    get_bom_for_issue_275_components,
-    get_bom_just_complete_metadata,
-    get_bom_with_component_setuptools_basic,
-    get_bom_with_component_setuptools_complete,
-    get_bom_with_component_setuptools_no_component_version,
-    get_bom_with_component_setuptools_with_cpe,
-    get_bom_with_component_setuptools_with_release_notes,
-    get_bom_with_component_setuptools_with_vulnerability,
-    get_bom_with_component_toml_1,
-    get_bom_with_dependencies_valid,
-    get_bom_with_external_references,
-    get_bom_with_metadata_component_and_dependencies,
-    get_bom_with_nested_services,
-    get_bom_with_services_complex,
-    get_bom_with_services_simple,
-)
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'xml')
-
-
-def fixed_date_time() -> datetime:
-    return datetime.fromisoformat('2023-01-07 13:44:32.312678+00:00')
-
-
-@patch('cyclonedx.model.ThisTool._version', 'TESTING')
-@patch('cyclonedx.model.bom.get_now_utc', fixed_date_time)
-class TestDeserializeXml(BaseXmlTestCase):
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_4(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_external_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_3(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_external_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_2(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_external_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_1(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_external_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_external_references_v1_0(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_empty.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_4(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_3(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_2(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_1(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_0(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_4_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_3_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_2_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_1_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_simple_bom_v1_0_with_cpe(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_4_full_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_bom_uuid.assert_called()
-        mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    def test_bom_v1_3_full_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_bom_uuid.assert_called()
-        mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_2))
-    def test_bom_v1_2_full_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_bom_uuid.assert_called()
-        mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_1_full_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_bom_uuid.assert_called()
-        mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_0_full_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_bom_uuid.assert_called()
-        mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_component_hashes_external_references(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_component_hashes_external_references(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_component_hashes_external_references(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_1_component_hashes_external_references(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_0_component_hashes_external_references(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_no_component_version(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_no_version.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_no_component_version(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_no_version.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_no_component_version(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_no_version.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_1_no_component_version(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_no_version.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_0_no_component_version(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_no_version.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_component_with_release_notes(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_release_notes.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_component_with_release_notes(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_component_with_vulnerability(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_vulnerabilities.xml'
-        )
-        mock_uuid.assert_called()
+from typing import Any, Callable
+from unittest import TestCase
+from unittest.mock import patch
 
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_component_with_vulnerability(self, mock_uuid: Mock) -> None:
-        with self.assertRaises(ValueError):
-            self._validate_xml_bom(
-                bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_setuptools_with_vulnerabilities.xml'
-            )
-            mock_uuid.assert_called()
+from ddt import ddt, named_data
 
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_component_with_vulnerability(self, mock_uuid: Mock) -> None:
-        with self.assertRaises(ValueError):
-            self._validate_xml_bom(
-                bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_setuptools_with_vulnerabilities.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_1_component_with_vulnerability(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_0_component_with_vulnerability(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_4_with_metadata_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_bom_uuid.assert_called()
-            mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    def test_bom_v1_3_with_metadata_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_bom_uuid.assert_called()
-            mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_2_with_metadata_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_bom_uuid.assert_called()
-            mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_1_with_metadata_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_bom_uuid.assert_called()
-            mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_0_with_metadata_component(self, mock_bom_uuid: Mock, mock_bom_ref_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_0,
-                fixture='bom_empty.xml'
-            )
-            mock_bom_uuid.assert_called()
-            mock_bom_ref_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_1_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_0_services_simple(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_0,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_1_services_complex(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_nested(self, mock_1: Mock, mock_2: Mock, mock_3: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-            mock_3.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_dependencies(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_dependencies(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_dependencies(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_1_dependencies(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_dependencies.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_dependencies_for_bom_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies_component.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_dependencies_for_bom_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies_component.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_dependencies_for_bom_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies_component.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_4_issue_275_components(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_issue_275_components.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_3_issue_275_components(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_issue_275_components.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_2_issue_275_components(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_issue_275_components.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_1_issue_275_components(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_issue_275_components.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=MOCK_BOM_UUID_1)
-    def test_bom_v1_0_issue_275_components(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_issue_275_components.xml'
-        )
-        mock_uuid.assert_called()
-
-    # Helper methods
-    def _validate_xml_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
-        bom.metadata.timestamp = fixed_date_time()
-        bom.validate()
-
-        if schema_version != LATEST_SUPPORTED_SCHEMA_VERSION:
-            # Rewind the BOM to only have data supported by the SchemaVersion in question
-            outputter = get_instance(bom=bom, output_format=OutputFormat.XML, schema_version=schema_version)
-            bom = cast(Bom, Bom.from_xml(StringIO(outputter.output_as_string())))
-
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), fixture)) as input_xml:
-            deserialized_bom = cast(Bom, Bom.from_xml(input_xml))
-
-            self.assertEqual(bom.metadata, deserialized_bom.metadata)
-
-            # This comparison fails for Dependencies despite the SortedSet's being identical
-            # print(bom.dependencies.difference(deserialized_bom.dependencies))
-            # self.assertEqual(bom.dependencies, deserialized_bom.dependencies)
-            # self.assertSetEqual(set(bom.dependencies), set(deserialized_bom.dependencies))
-
-            self.assertEqual(bom.vulnerabilities, deserialized_bom.vulnerabilities)
-            self.assertEqual(bom, deserialized_bom)
+from cyclonedx.model.bom import Bom
+from cyclonedx.schema import OutputFormat, SchemaVersion
+from tests import DeepCompareMixin, SnapshotMixin, mksname, uuid_generator
+from tests._data.models import all_get_bom_funct_valid, all_get_bom_funct_with_incomplete_deps
+
+
+@ddt
+class TestDeserializeXml(TestCase, SnapshotMixin, DeepCompareMixin):
+
+    @named_data(*all_get_bom_funct_valid)
+    @patch('cyclonedx.model.ThisTool._version', 'TESTING')
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(0, version=4))
+    def test(self, get_bom: Callable[[], Bom], *_: Any, **__: Any) -> None:
+        # only latest schema will have all data populated in serialized form
+        snapshot_name = mksname(get_bom, SchemaVersion.V1_4, OutputFormat.XML)
+        expected = get_bom()
+        with open(self.getSnapshotFile(snapshot_name), 'r') as s:
+            bom = Bom.from_xml(s)
+        self.assertBomDeepEqual(expected, bom,
+                                fuzzy_deps=get_bom in all_get_bom_funct_with_incomplete_deps)
diff --git a/tests/test_e2e_environment.py b/tests/test_e2e_environment.py
index 3a7460ea2..78b918075 100644
--- a/tests/test_e2e_environment.py
+++ b/tests/test_e2e_environment.py
@@ -18,10 +18,10 @@
 import json
 from unittest import TestCase
 
-import pkg_resources
 from lxml import etree
 from packageurl import PackageURL
 
+from cyclonedx import __version__ as OUR_PACKAGE_VERSION
 from cyclonedx.model.bom import Bom
 from cyclonedx.model.component import Component
 from cyclonedx.output import OutputFormat, get_instance
@@ -29,7 +29,6 @@
 from cyclonedx.output.xml import Xml
 
 OUR_PACKAGE_NAME: str = 'cyclonedx-python-lib'
-OUR_PACKAGE_VERSION: str = pkg_resources.get_distribution(OUR_PACKAGE_NAME).version
 OUR_PACKAGE_AUTHOR: str = 'Paul Horton'
 
 
diff --git a/tests/test_model.py b/tests/test_model.py
index 8459af3bd..af4e8ae81 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -45,7 +45,7 @@
     XsUri,
 )
 from cyclonedx.model.issue import IssueClassification, IssueType, IssueTypeSource
-from tests.data import reorder
+from tests import reorder
 
 
 class DummyStringEnum(str, Enum):
diff --git a/tests/test_model_bom.py b/tests/test_model_bom.py
index 50897ef42..0eb62d6c5 100644
--- a/tests/test_model_bom.py
+++ b/tests/test_model_bom.py
@@ -35,7 +35,7 @@
 from cyclonedx.model.bom import Bom, BomMetaData
 from cyclonedx.model.bom_ref import BomRef
 from cyclonedx.model.component import Component, ComponentType
-from tests.data import (
+from tests._data.models import (
     get_bom_component_licenses_invalid,
     get_bom_component_nested_licenses_invalid,
     get_bom_for_issue_275_components,
diff --git a/tests/test_model_bom_ref.py b/tests/test_model_bom_ref.py
index 955469bc3..40c7cef18 100644
--- a/tests/test_model_bom_ref.py
+++ b/tests/test_model_bom_ref.py
@@ -18,7 +18,7 @@
 from unittest import TestCase
 
 from cyclonedx.model.bom_ref import BomRef
-from tests.data import reorder
+from tests import reorder
 
 
 class TestBomRef(TestCase):
diff --git a/tests/test_model_component.py b/tests/test_model_component.py
index c48bb630c..ccee271e0 100644
--- a/tests/test_model_component.py
+++ b/tests/test_model_component.py
@@ -16,9 +16,9 @@
 # Copyright (c) OWASP Foundation. All Rights Reserved.
 
 import datetime
-from typing import List
+from typing import Any, List
 from unittest import TestCase
-from unittest.mock import Mock, patch
+from unittest.mock import patch
 
 from cyclonedx.exception.model import NoPropertiesProvidedException
 from cyclonedx.model import (
@@ -42,8 +42,8 @@
     Pedigree,
 )
 from cyclonedx.model.issue import IssueClassification, IssueType
-from tests.data import (
-    MOCK_UUID_7,
+from tests import reorder, uuid_generator
+from tests._data.models import (
     get_component_setuptools_simple,
     get_component_setuptools_simple_no_version,
     get_component_toml_with_hashes_with_references,
@@ -52,7 +52,6 @@
     get_pedigree_1,
     get_swid_1,
     get_swid_2,
-    reorder,
 )
 
 
@@ -105,14 +104,13 @@ def test_sort(self) -> None:
 
 class TestModelComponent(TestCase):
 
-    @patch('cyclonedx.model.component.uuid4', return_value=MOCK_UUID_7)
-    def test_empty_basic_component(self, mock_uuid: Mock) -> None:
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(version=4))
+    def test_empty_basic_component(self, *_: Any, **__: Any) -> None:
         c = Component(name='test-component')
-        mock_uuid.assert_called()
         self.assertEqual(c.name, 'test-component')
         self.assertEqual(c.type, ComponentType.LIBRARY)
         self.assertIsNone(c.mime_type)
-        self.assertEqual(str(c.bom_ref), '6f266d1c-760f-4552-ae3b-41a9b74232fa')
+        self.assertEqual(str(c.bom_ref), '00000000-0000-4000-8000-000000000001')
         self.assertIsNone(c.supplier)
         self.assertIsNone(c.author)
         self.assertIsNone(c.publisher)
@@ -130,8 +128,7 @@ def test_empty_basic_component(self, mock_uuid: Mock) -> None:
         self.assertEqual(len(c.components), 0)
         self.assertEqual(len(c.get_all_nested_components(include_self=True)), 1)
 
-    @patch('cyclonedx.model.component.uuid4', return_value=MOCK_UUID_7)
-    def test_multiple_basic_components(self, mock_uuid: Mock) -> None:
+    def test_multiple_basic_components(self) -> None:
         c1 = Component(name='test-component')
         self.assertEqual(c1.name, 'test-component')
         self.assertIsNone(c1.version)
@@ -148,8 +145,6 @@ def test_multiple_basic_components(self, mock_uuid: Mock) -> None:
 
         self.assertNotEqual(c1, c2)
 
-        mock_uuid.assert_called()
-
     def test_external_references(self) -> None:
         c = Component(name='test-component')
         c.external_references.add(ExternalReference(
diff --git a/tests/test_model_dependency.py b/tests/test_model_dependency.py
index 165bcfca8..4439d6aa0 100644
--- a/tests/test_model_dependency.py
+++ b/tests/test_model_dependency.py
@@ -19,7 +19,7 @@
 
 from cyclonedx.model.bom_ref import BomRef
 from cyclonedx.model.dependency import Dependency
-from tests.data import reorder
+from tests import reorder
 
 
 class TestDependency(TestCase):
diff --git a/tests/test_model_issue.py b/tests/test_model_issue.py
index bc156169d..b7a127ae6 100644
--- a/tests/test_model_issue.py
+++ b/tests/test_model_issue.py
@@ -20,7 +20,8 @@
 from cyclonedx.exception.model import NoPropertiesProvidedException
 from cyclonedx.model import XsUri
 from cyclonedx.model.issue import IssueClassification, IssueType, IssueTypeSource
-from tests.data import get_issue_1, get_issue_2, reorder
+from tests import reorder
+from tests._data.models import get_issue_1, get_issue_2
 
 
 class TestModelIssueType(TestCase):
diff --git a/tests/test_model_service.py b/tests/test_model_service.py
index 588cf2d53..3b677961f 100644
--- a/tests/test_model_service.py
+++ b/tests/test_model_service.py
@@ -14,22 +14,22 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 # Copyright (c) OWASP Foundation. All Rights Reserved.
-
+from typing import Any
 from unittest import TestCase
 from unittest.mock import Mock, patch
 
 from cyclonedx.model.service import Service
-from tests.data import MOCK_UUID_8, MOCK_UUID_9, reorder
+from tests import reorder, uuid_generator
 
 
 class TestModelService(TestCase):
 
-    @patch('cyclonedx.model.service.uuid4', return_value=MOCK_UUID_8)
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(version=4))
     def test_minimal_service(self, mock_uuid: Mock) -> None:
         s = Service(name='my-test-service')
         mock_uuid.assert_called()
         self.assertEqual(s.name, 'my-test-service')
-        self.assertEqual(str(s.bom_ref), str(MOCK_UUID_8))
+        self.assertEqual(str(s.bom_ref), '00000000-0000-4000-8000-000000000001')
         self.assertIsNone(s.provider)
         self.assertIsNone(s.group)
         self.assertIsNone(s.version)
@@ -44,16 +44,15 @@ def test_minimal_service(self, mock_uuid: Mock) -> None:
         self.assertFalse(s.release_notes)
         self.assertFalse(s.properties)
 
-    @patch('cyclonedx.model.service.uuid4', return_value=MOCK_UUID_9)
-    def test_service_with_services(self, mock_uuid: Mock) -> None:
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(version=4))
+    def test_service_with_services(self, *_: Any, **__: Any) -> None:
         parent_service = Service(name='parent-service')
         parent_service.services = [
             Service(name='child-service-1'),
-            Service(name='child-service-2')
+            Service(name='child-service-2'),
         ]
-        mock_uuid.assert_called()
         self.assertEqual(parent_service.name, 'parent-service')
-        self.assertEqual(str(parent_service.bom_ref), str(MOCK_UUID_9))
+        self.assertEqual(str(parent_service.bom_ref), '00000000-0000-4000-8000-000000000001')
         self.assertIsNone(parent_service.provider)
         self.assertIsNone(parent_service.group)
         self.assertIsNone(parent_service.version)
diff --git a/tests/test_model_vulnerability.py b/tests/test_model_vulnerability.py
index 257b82a8b..50a6c03f5 100644
--- a/tests/test_model_vulnerability.py
+++ b/tests/test_model_vulnerability.py
@@ -17,8 +17,9 @@
 
 from datetime import datetime, timedelta
 from decimal import Decimal
+from typing import Any
 from unittest import TestCase
-from unittest.mock import Mock, patch
+from unittest.mock import patch
 
 from cyclonedx.model import XsUri
 from cyclonedx.model.impact_analysis import ImpactAnalysisAffectedStatus
@@ -33,7 +34,7 @@
     VulnerabilitySeverity,
     VulnerabilitySource,
 )
-from tests.data import MOCK_UUID_10, reorder
+from tests import reorder, uuid_generator
 
 
 class TestModelVulnerability(TestCase):
@@ -167,11 +168,10 @@ def test_v_source_get_localised_vector_other_2(self) -> None:
             'SOMETHING_OR_OTHER'
         )
 
-    @patch('cyclonedx.model.vulnerability.uuid4', return_value=MOCK_UUID_10)
-    def test_empty_vulnerability(self, mock_uuid: Mock) -> None:
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(version=4))
+    def test_empty_vulnerability(self, *_: Any, **__: Any) -> None:
         v = Vulnerability()
-        mock_uuid.assert_called()
-        self.assertEqual(str(v.bom_ref), str(MOCK_UUID_10))
+        self.assertEqual(str(v.bom_ref), '00000000-0000-4000-8000-000000000001')
         self.assertIsNone(v.id)
         self.assertIsNone(v.source)
         self.assertFalse(v.references)
diff --git a/tests/test_output_json.py b/tests/test_output_json.py
index f40802625..0a291fa27 100644
--- a/tests/test_output_json.py
+++ b/tests/test_output_json.py
@@ -14,428 +14,71 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 # Copyright (c) OWASP Foundation. All Rights Reserved.
-from os.path import join
-from typing import Optional, Union
+
+from typing import Any, Callable
 from unittest import TestCase
 from unittest.mock import Mock, patch
-from uuid import UUID
 
-from ddt import ddt, idata, named_data
+from ddt import data, ddt, idata, named_data, unpack
 
+from cyclonedx.exception import CycloneDxException, MissingOptionalDependencyException
+from cyclonedx.exception.model import LicenseExpressionAlongWithOthersException, UnknownComponentDependencyException
 from cyclonedx.exception.output import FormatNotSupportedException
 from cyclonedx.model.bom import Bom
-from cyclonedx.output import get_instance as get_outputter
 from cyclonedx.output.json import BY_SCHEMA_VERSION, Json
 from cyclonedx.schema import OutputFormat, SchemaVersion
-from tests import TESTDATA_DIRECTORY
-from tests.base import BaseJsonTestCase
-from tests.data import (
-    MOCK_BOM_UUID_1,
-    MOCK_TIMESTAMP,
-    MOCK_UUID_1,
-    MOCK_UUID_2,
-    MOCK_UUID_3,
-    MOCK_UUID_4,
-    MOCK_UUID_5,
-    MOCK_UUID_6,
-    TEST_UUIDS,
-    get_bom_for_issue_275_components,
-    get_bom_just_complete_metadata,
-    get_bom_with_component_setuptools_basic,
-    get_bom_with_component_setuptools_complete,
-    get_bom_with_component_setuptools_no_component_version,
-    get_bom_with_component_setuptools_with_cpe,
-    get_bom_with_component_setuptools_with_release_notes,
-    get_bom_with_component_setuptools_with_vulnerability,
-    get_bom_with_component_toml_1,
-    get_bom_with_dependencies_hanging,
-    get_bom_with_dependencies_valid,
-    get_bom_with_external_references,
-    get_bom_with_metadata_component_and_dependencies,
-    get_bom_with_nested_services,
-    get_bom_with_services_complex,
-    get_bom_with_services_simple,
-)
+from cyclonedx.validation.json import JsonStrictValidator
+from tests import SnapshotMixin, mksname, uuid_generator
+from tests._data.models import all_get_bom_funct_invalid, all_get_bom_funct_valid
 
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'json')
+UNSUPPORTED_SV = frozenset((SchemaVersion.V1_1, SchemaVersion.V1_0,))
 
 
 @ddt
-@patch('cyclonedx.model.ThisTool._version', 'TESTING')
-class TestOutputJson(BaseJsonTestCase):
-
-    def test_bom_external_references_v1_4(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_external_references.json'
-        )
-
-    def test_bom_external_references_v1_3(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_external_references.json'
-        )
-
-    def test_bom_external_references_v1_2(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_external_references.json'
-        )
-
-    def test_simple_bom_v1_4(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools.json'
-        )
-
-    def test_simple_bom_v1_3(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-
-    def test_simple_bom_v1_2(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools.json'
-        )
-
-    def test_simple_bom_v1_1(self) -> None:
-        self._validate_json_bom_not_supported(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_1
-        )
-
-    def test_simple_bom_v1_0(self) -> None:
-        self._validate_json_bom_not_supported(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_0
-        )
-
-    def test_simple_bom_v1_4_with_cpe(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-
-    def test_simple_bom_v1_3_with_cpe(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-
-    def test_simple_bom_v1_2_with_cpe(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_with_cpe.json'
-        )
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_4_full_component(self, mock: Mock) -> None:
-        self.maxDiff = None
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_3_full_component(self, mock: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_2_full_component(self, mock: Mock) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_complete.json'
-        )
-        mock.assert_called()
-
-    def test_bom_v1_4_component_hashes_external_references(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_toml_1.json'
-        )
-
-    def test_bom_v1_3_component_hashes_external_references(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_toml_1.json'
-        )
-
-    def test_bom_v1_2_component_hashes_external_references(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_toml_1.json'
-        )
-
-    def test_bom_v1_1_component_hashes_external_references(self) -> None:
-        self._validate_json_bom_not_supported(bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_1)
-
-    def test_bom_v1_0_component_hashes_external_references(self) -> None:
-        self._validate_json_bom_not_supported(bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_0)
-
-    def test_bom_v1_4_no_component_version(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_no_version.json'
-        )
-
-    def test_bom_v1_3_no_component_version(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_no_version.json'
-        )
-
-    def test_bom_v1_4_component_with_release_notes(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_release_notes.json'
-        )
-
-    def test_bom_v1_3_component_with_release_notes(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-
-    def test_bom_v1_4_component_with_vulnerability(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_vulnerabilities.json'
-        )
-
-    def test_bom_v1_3_component_with_vulnerability(self) -> None:
-        # Vulnerabilities not support in JSON < 1.4
-        self._validate_json_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.json'
-        )
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_1))
-    def test_bom_v1_4_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_2))
-    def test_bom_v1_3_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_uuid.assert_called()
+class TestOutputJson(TestCase, SnapshotMixin):
 
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    def test_bom_v1_2_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_with_full_metadata.json'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_simple.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_complex.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_json_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_nested.json'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    def test_bom_v1_4_dependencies(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies.json'
-        )
-
-    def test_bom_v1_3_dependencies(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies.json'
-        )
-
-    def test_bom_v1_2_dependencies(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies.json'
-        )
-
-    def test_bom_v1_4_dependencies_for_bom_component(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies_component.json'
-        )
-
-    def test_bom_v1_3_dependencies_for_bom_component(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies_component.json'
-        )
-
-    def test_bom_v1_2_dependencies_for_bom_component(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies_component.json'
-        )
-
-    def test_bom_v1_4_issue_275_components(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_issue_275_components.json'
-        )
-
-    def test_bom_v1_3_issue_275_components(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_issue_275_components.json'
-        )
-
-    def test_bom_v1_2_issue_275_components(self) -> None:
-        self._validate_json_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_issue_275_components.json'
-        )
-
-    def test_bom_v1_4_warn_dependencies(self) -> None:
-        with self.assertWarns(UserWarning):
-            # this data set is expected to throw this UserWarning.
-            # that is the while point of this test!
-            self._validate_json_bom(
-                bom=get_bom_with_dependencies_hanging(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_dependencies_hanging.json'
-            )
-
-    @named_data(
-        ('None', 'None', None),
-        ('two', 'two', 2),
-        ('4spaces', '4spaces', '    '),
-        ('tab', 'tab', '\t')
-    )
-    def test_indent(self, name: str, indent: Optional[Union[str, int]]) -> None:
-        bom = get_bom_with_component_setuptools_basic()
-        bom.serial_number = MOCK_BOM_UUID_1
-        bom.metadata.timestamp = MOCK_TIMESTAMP
-        schema_version = SchemaVersion.V1_4
-        outputter = get_outputter(bom=bom, schema_version=schema_version, output_format=OutputFormat.JSON)
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), f'indented_{name}.json')
-                  ) as expected_xml:
-            bom_json = outputter.output_as_string(indent=indent)
-            self.assertEqual(expected_xml.read(), bom_json)
-            self.assertValidAgainstSchema(bom_json=bom_json, schema_version=schema_version)
-
-    # region Helper methods
-
-    def _validate_json_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
-        outputter = get_outputter(bom=bom, output_format=OutputFormat.JSON, schema_version=schema_version)
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), fixture)) as expected_json:
-            output_as_string = outputter.output_as_string()
-            self.assertValidAgainstSchema(bom_json=output_as_string, schema_version=schema_version)
-            self.assertEqualJsonBom(expected_json.read(), output_as_string)
-
-    def _validate_json_bom_not_supported(self, bom: Bom, schema_version: SchemaVersion) -> None:
+    @data(*UNSUPPORTED_SV)
+    def test_unsupported_schema_raises(self, sv: SchemaVersion) -> None:
+        outputterClass = BY_SCHEMA_VERSION[sv]
+        self.assertTrue(issubclass(outputterClass, Json))
+        outputter = outputterClass(Mock(spec=Bom))
         with self.assertRaises(FormatNotSupportedException):
-            outputter = get_outputter(bom=bom, output_format=OutputFormat.JSON, schema_version=schema_version)
             outputter.output_as_string()
 
-    # endregion Helper methods
+    @named_data(*((f'{n}-{sv.to_version()}', gb, sv)
+                  for n, gb in all_get_bom_funct_valid
+                  for sv in SchemaVersion
+                  if sv not in UNSUPPORTED_SV))
+    @unpack
+    @patch('cyclonedx.model.ThisTool._version', 'TESTING')
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(0, version=4))
+    def test_valid(self, get_bom: Callable[[], Bom], sv: SchemaVersion, *_: Any, **__: Any) -> None:
+        snapshot_name = mksname(get_bom, sv, OutputFormat.JSON)
+        bom = get_bom()
+        json = BY_SCHEMA_VERSION[sv](bom).output_as_string(indent=2)
+        try:
+            errors = JsonStrictValidator(sv).validate_str(json)
+        except MissingOptionalDependencyException:
+            errors = None  # skipped validation
+        self.assertIsNone(errors)
+        self.assertEqualSnapshot(json, snapshot_name)
+
+    @named_data(*((f'{n}-{sv.to_version()}', gb, sv)
+                  for n, gb in all_get_bom_funct_invalid
+                  for sv in SchemaVersion
+                  if sv not in UNSUPPORTED_SV))
+    @unpack
+    def test_invalid(self, get_bom: Callable[[], Bom], sv: SchemaVersion) -> None:
+        bom = get_bom()
+        outputter = BY_SCHEMA_VERSION[sv](bom)
+        with self.assertRaises(CycloneDxException) as error:
+            outputter.output_as_string()
+        if isinstance(error.exception, (
+            LicenseExpressionAlongWithOthersException,
+            UnknownComponentDependencyException,
+        )):
+            return None  # expected
+        raise error.exception
 
 
 @ddt
diff --git a/tests/test_output_xml.py b/tests/test_output_xml.py
index 5303cb9f0..c78a87551 100644
--- a/tests/test_output_xml.py
+++ b/tests/test_output_xml.py
@@ -14,555 +14,59 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 # Copyright (c) OWASP Foundation. All Rights Reserved.
-from os.path import join
-from typing import Optional, Union
+
+
+from typing import Any, Callable
 from unittest import TestCase
 from unittest.mock import Mock, patch
-from uuid import UUID
 
-from ddt import ddt, idata, named_data
+from ddt import ddt, idata, named_data, unpack
 
+from cyclonedx.exception import CycloneDxException, MissingOptionalDependencyException
+from cyclonedx.exception.model import LicenseExpressionAlongWithOthersException, UnknownComponentDependencyException
 from cyclonedx.model.bom import Bom
-from cyclonedx.output import get_instance as get_outputter
 from cyclonedx.output.xml import BY_SCHEMA_VERSION, Xml
 from cyclonedx.schema import OutputFormat, SchemaVersion
-from tests import TESTDATA_DIRECTORY
-from tests.base import BaseXmlTestCase
-from tests.data import (
-    MOCK_BOM_UUID_1,
-    MOCK_TIMESTAMP,
-    MOCK_UUID_1,
-    MOCK_UUID_2,
-    MOCK_UUID_3,
-    MOCK_UUID_4,
-    MOCK_UUID_5,
-    MOCK_UUID_6,
-    TEST_UUIDS,
-    get_bom_for_issue_275_components,
-    get_bom_just_complete_metadata,
-    get_bom_with_component_setuptools_basic,
-    get_bom_with_component_setuptools_complete,
-    get_bom_with_component_setuptools_no_component_version,
-    get_bom_with_component_setuptools_with_cpe,
-    get_bom_with_component_setuptools_with_release_notes,
-    get_bom_with_component_setuptools_with_vulnerability,
-    get_bom_with_component_toml_1,
-    get_bom_with_dependencies_hanging,
-    get_bom_with_dependencies_valid,
-    get_bom_with_external_references,
-    get_bom_with_metadata_component_and_dependencies,
-    get_bom_with_nested_services,
-    get_bom_with_services_complex,
-    get_bom_with_services_simple,
-)
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'xml')
+from cyclonedx.validation.xml import XmlValidator
+from tests import SnapshotMixin, mksname, uuid_generator
+from tests._data.models import all_get_bom_funct_invalid, all_get_bom_funct_valid
 
 
 @ddt
-@patch('cyclonedx.model.ThisTool._version', 'TESTING')
-class TestOutputXml(BaseXmlTestCase):
-
-    def test_bom_external_references_v1_4(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_external_references.xml'
-        )
-
-    def test_bom_external_references_v1_3(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_external_references.xml'
-        )
-
-    def test_bom_external_references_v1_2(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_external_references.xml'
-        )
-
-    def test_bom_external_references_v1_1(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_external_references.xml'
-        )
-
-    def test_bom_external_references_v1_0(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_external_references(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_empty.xml'
-        )
-
-    def test_simple_bom_v1_4(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_simple_bom_v1_3(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_simple_bom_v1_2(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_simple_bom_v1_1(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_simple_bom_v1_0(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_basic(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_simple_bom_v1_4_with_cpe(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-
-    def test_simple_bom_v1_3_with_cpe(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-
-    def test_simple_bom_v1_2_with_cpe(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-
-    def test_simple_bom_v1_1_with_cpe(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-
-    def test_simple_bom_v1_0_with_cpe(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_cpe(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_with_cpe.xml'
-        )
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_4_full_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    def test_bom_v1_3_full_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_2))
-    def test_bom_v1_2_full_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_1))
-    def test_bom_v1_1_full_component(self, mock_uuid: Mock) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_complete.xml'
-        )
-        mock_uuid.assert_called()
-
-    def test_bom_v1_0_full_component(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_complete(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_complete.xml'
-        )
-
-    def test_bom_v1_4_component_hashes_external_references(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-
-    def test_bom_v1_3_component_hashes_external_references(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-
-    def test_bom_v1_2_component_hashes_external_references(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-
-    def test_bom_v1_1_component_hashes_external_references(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-
-    def test_bom_v1_0_component_hashes_external_references(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_toml_1(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_toml_hashes_and_references.xml'
-        )
-
-    def test_bom_v1_4_no_component_version(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_no_version.xml'
-        )
-
-    def test_bom_v1_3_no_component_version(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools_no_version.xml'
-        )
-
-    def test_bom_v1_2_no_component_version(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_setuptools_no_version.xml'
-        )
-
-    def test_bom_v1_1_no_component_version(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_setuptools_no_version.xml'
-        )
-
-    def test_bom_v1_0_no_component_version(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_no_component_version(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools_no_version.xml'
-        )
-
-    def test_bom_v1_4_component_with_release_notes(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_release_notes.xml'
-        )
-
-    def test_bom_v1_3_component_with_release_notes(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_release_notes(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_setuptools.xml'
-        )
-
-    def test_bom_v1_4_component_with_vulnerability(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_setuptools_with_vulnerabilities.xml'
-        )
-
-    def test_bom_v1_0_component_with_vulnerability(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_component_setuptools_with_vulnerability(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_setuptools.xml'
-        )
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    def test_bom_v1_4_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_5))
-    def test_bom_v1_3_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    def test_bom_v1_2_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_with_full_metadata.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=UUID(MOCK_UUID_1))
-    def test_bom_v1_1_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.bom.uuid4', return_value=UUID(MOCK_UUID_1))
-    def test_bom_v1_0_with_metadata_component(self, mock_uuid: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_just_complete_metadata(), schema_version=SchemaVersion.V1_0,
-                fixture='bom_empty.xml'
-            )
-            mock_uuid.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_simple.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_1_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_3))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_0_services_simple(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_simple(), schema_version=SchemaVersion.V1_0,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_4))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_complex.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_2))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_1_services_complex(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_services_complex(), schema_version=SchemaVersion.V1_1,
-                fixture='bom_empty.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_4_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_3_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_3,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    @patch('cyclonedx.model.component.uuid4', return_value=UUID(MOCK_UUID_6))
-    @patch('cyclonedx.model.service.uuid4', side_effect=TEST_UUIDS)
-    def test_bom_v1_2_services_nested(self, mock_1: Mock, mock_2: Mock) -> None:
-        with self.assertWarns(UserWarning):
-            self._validate_xml_bom(
-                bom=get_bom_with_nested_services(), schema_version=SchemaVersion.V1_2,
-                fixture='bom_services_nested.xml'
-            )
-            mock_1.assert_called()
-            mock_2.assert_called()
-
-    def test_bom_v1_4_dependencies(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies.xml'
-        )
-
-    def test_bom_v1_3_dependencies(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies.xml'
-        )
-
-    def test_bom_v1_2_dependencies(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies.xml'
-        )
-
-    def test_bom_v1_1_dependencies(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_dependencies_valid(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_dependencies.xml'
-        )
-
-    def test_bom_v1_4_dependencies_for_bom_component(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_dependencies_component.xml'
-        )
-
-    def test_bom_v1_3_dependencies_for_bom_component(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_dependencies_component.xml'
-        )
-
-    def test_bom_v1_2_dependencies_for_bom_component(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_with_metadata_component_and_dependencies(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_dependencies_component.xml'
-        )
-
-    def test_bom_v1_4_issue_275_components(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_4,
-            fixture='bom_issue_275_components.xml'
-        )
-
-    def test_bom_v1_3_issue_275_components(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_3,
-            fixture='bom_issue_275_components.xml'
-        )
-
-    def test_bom_v1_2_issue_275_components(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_2,
-            fixture='bom_issue_275_components.xml'
-        )
-
-    def test_bom_v1_1_issue_275_components(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_1,
-            fixture='bom_issue_275_components.xml'
-        )
-
-    def test_bom_v1_0_issue_275_components(self) -> None:
-        self._validate_xml_bom(
-            bom=get_bom_for_issue_275_components(), schema_version=SchemaVersion.V1_0,
-            fixture='bom_issue_275_components.xml'
-        )
-
-    def test_bom_v1_4_warn_dependencies(self) -> None:
-        with self.assertWarns(UserWarning):
-            # this data set is expected to throw this UserWarning.
-            # that is the while point of this test!
-            self._validate_xml_bom(
-                bom=get_bom_with_dependencies_hanging(), schema_version=SchemaVersion.V1_4,
-                fixture='bom_with_dependencies_hanging.xml'
-            )
-
-    @named_data(
-        ('None', 'None', None),
-        ('two', 'two', 2),
-        ('4spaces', '4spaces', '    '),
-        ('tab', 'tab', '\t')
-    )
-    def test_indent(self, name: str, indent: Optional[Union[str, int]]) -> None:
-        bom = get_bom_with_component_setuptools_basic()
-        bom.serial_number = MOCK_BOM_UUID_1
-        bom.metadata.timestamp = MOCK_TIMESTAMP
-        schema_version = SchemaVersion.V1_4
-        outputter = get_outputter(bom=bom, schema_version=schema_version, output_format=OutputFormat.XML)
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), f'indented_{name}.xml')
-                  ) as expected_xml:
-            bom_xml = outputter.output_as_string(indent=indent)
-            self.assertEqual(expected_xml.read(), bom_xml)
-            self.assertValidAgainstSchema(bom_xml=bom_xml, schema_version=schema_version)
-
-    # region Helper methods
-
-    def _validate_xml_bom(self, bom: Bom, schema_version: SchemaVersion, fixture: str) -> None:
-        outputter = get_outputter(bom=bom, schema_version=schema_version)
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), fixture)) as expected_xml:
-            output_as_string = outputter.output_as_string()
-            self.assertValidAgainstSchema(bom_xml=output_as_string, schema_version=schema_version)
-            self.assertEqualXmlBom(
-                expected_xml.read(), output_as_string, namespace=outputter.get_target_namespace()
-            )
-
-    # endregion Helper methods
+class TestOutputXml(TestCase, SnapshotMixin):
+
+    @named_data(*(
+        (f'{n}-{sv.to_version()}', gb, sv) for n, gb in all_get_bom_funct_valid for sv in SchemaVersion
+    ))
+    @unpack
+    @patch('cyclonedx.model.ThisTool._version', 'TESTING')
+    @patch('cyclonedx.model.bom_ref.uuid4', side_effect=uuid_generator(0, version=4))
+    def test_valid(self, get_bom: Callable[[], Bom], sv: SchemaVersion, *_: Any, **__: Any) -> None:
+        snapshot_name = mksname(get_bom, sv, OutputFormat.XML)
+        bom = get_bom()
+        xml = BY_SCHEMA_VERSION[sv](bom).output_as_string(indent=2)
+        try:
+            errors = XmlValidator(sv).validate_str(xml)
+        except MissingOptionalDependencyException:
+            errors = None  # skipped validation
+        self.assertIsNone(errors)
+        self.assertEqualSnapshot(xml, snapshot_name)
+
+    @named_data(*(
+        (f'{n}-{sv.to_version()}', gb, sv) for n, gb in all_get_bom_funct_invalid for sv in SchemaVersion
+    ))
+    @unpack
+    def test_invalid(self, get_bom: Callable[[], Bom], sv: SchemaVersion) -> None:
+        bom = get_bom()
+        outputter = BY_SCHEMA_VERSION[sv](bom)
+        with self.assertRaises(CycloneDxException) as error:
+            outputter.output_as_string()
+        if isinstance(error.exception, (
+            LicenseExpressionAlongWithOthersException,
+            UnknownComponentDependencyException,
+        )):
+            return None  # expected
+        raise error.exception
 
 
 @ddt
diff --git a/tests/test_real_world_examples.py b/tests/test_real_world_examples.py
index 795e38f4c..c3351909f 100644
--- a/tests/test_real_world_examples.py
+++ b/tests/test_real_world_examples.py
@@ -18,29 +18,17 @@
 import unittest
 from datetime import datetime
 from os.path import join
-from typing import cast
+from typing import Any
 from unittest.mock import patch
 
 from cyclonedx.model.bom import Bom
-from cyclonedx.schema import SchemaVersion
-from tests import TESTDATA_DIRECTORY
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'own', 'xml')
-
-
-def fixed_date_time() -> datetime:
-    return datetime.fromisoformat('2023-01-07 13:44:32.312678+00:00')
+from tests import OWN_DATA_DIRECTORY
 
 
 @patch('cyclonedx.model.ThisTool._version', 'TESTING')
-@patch('cyclonedx.model.bom.get_now_utc', fixed_date_time)
+@patch('cyclonedx.model.bom.get_now_utc', return_value=datetime.fromisoformat('2023-01-07 13:44:32.312678+00:00'))
 class TestDeserializeeRealWorldExamples(unittest.TestCase):
 
-    def test_webgoat_6_1(self) -> None:
-        self._attempt_load_example(
-            schema_version=SchemaVersion.V1_4, fixture='webgoat-6.1.xml'
-        )
-
-    def _attempt_load_example(self, schema_version: SchemaVersion, fixture: str) -> None:
-        with open(join(RELEVANT_TESTDATA_DIRECTORY, schema_version.to_version(), fixture)) as input_xml:
-            cast(Bom, Bom.from_xml(input_xml))
+    def test_webgoat_6_1(self, *_: Any, **__: Any) -> None:
+        with open(join(OWN_DATA_DIRECTORY, 'xml', '1.4', 'webgoat-6.1.xml')) as input_xml:
+            Bom.from_xml(input_xml)
diff --git a/tests/test_validation_json.py b/tests/test_validation_json.py
index 45f06179e..db639a1f3 100644
--- a/tests/test_validation_json.py
+++ b/tests/test_validation_json.py
@@ -25,17 +25,15 @@
 from cyclonedx.exception import MissingOptionalDependencyException
 from cyclonedx.schema import OutputFormat, SchemaVersion
 from cyclonedx.validation.json import JsonStrictValidator, JsonValidator
-from tests import TESTDATA_DIRECTORY
+from tests import SCHEMA_TESTDATA_DIRECTORY
 
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'schemaTestData')
-
-UNSUPPORTED_SCHEMA_VERSIONS = (SchemaVersion.V1_0, SchemaVersion.V1_1,)
+UNSUPPORTED_SCHEMA_VERSIONS = {SchemaVersion.V1_0, SchemaVersion.V1_1, }
 
 
 def _dp(prefix: str) -> Generator:
     return (
         (sv, tf) for sv in SchemaVersion if sv not in UNSUPPORTED_SCHEMA_VERSIONS
-        for tf in iglob(join(RELEVANT_TESTDATA_DIRECTORY, sv.to_version(), f'{prefix}-*.json'))
+        for tf in iglob(join(SCHEMA_TESTDATA_DIRECTORY, sv.to_version(), f'{prefix}-*.json'))
     )
 
 
diff --git a/tests/test_validation_xml.py b/tests/test_validation_xml.py
index a08c932d7..c97ee6f7e 100644
--- a/tests/test_validation_xml.py
+++ b/tests/test_validation_xml.py
@@ -25,9 +25,7 @@
 from cyclonedx.exception import MissingOptionalDependencyException
 from cyclonedx.schema import OutputFormat, SchemaVersion
 from cyclonedx.validation.xml import XmlValidator
-from tests import TESTDATA_DIRECTORY
-
-RELEVANT_TESTDATA_DIRECTORY = join(TESTDATA_DIRECTORY, 'schemaTestData')
+from tests import SCHEMA_TESTDATA_DIRECTORY
 
 UNSUPPORTED_SCHEMA_VERSIONS = set()
 
@@ -35,7 +33,7 @@
 def _dp(prefix: str) -> Generator:
     return (
         (sv, tf) for sv in SchemaVersion if sv not in UNSUPPORTED_SCHEMA_VERSIONS
-        for tf in iglob(join(RELEVANT_TESTDATA_DIRECTORY, sv.to_version(), f'{prefix}-*.xml'))
+        for tf in iglob(join(SCHEMA_TESTDATA_DIRECTORY, sv.to_version(), f'{prefix}-*.xml'))
     )
 
 
