diff --git a/cyclonedx_py/_internal/__init__.py b/cyclonedx_py/_internal/__init__.py
index 5d231707..c243ee2b 100644
--- a/cyclonedx_py/_internal/__init__.py
+++ b/cyclonedx_py/_internal/__init__.py
@@ -46,9 +46,18 @@ def __call__(self, **kwargs: Any) -> 'Bom':  # pragma: no cover
 
 
 class PropertyName(Enum):
+    # region general
+    # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx.md
+    Reproducible = 'cdx:reproducible'
+    # region general
+
     # region python
-    # TODO: register -- name might not be final, find better one
-    PackageExtra = 'cdx:python:package:extra'
+    # see https://github.com/CycloneDX/cyclonedx-property-taxonomy/blob/main/cdx/python.md
+    PackageExtra = 'cdx:python:package:required-extra'
+    PackageSourceSubdirectory = 'cdx:python:package:source:subdirectory'
+    PackageSourceVcsRequestedRevision = 'cdx:poetry:package:source:vcs:requested_revision'
+    PackageSourceVcsCommitId = 'cdx:poetry:package:source:vcs:commit_id'
+    PackageSourceLocalEditable = 'cdx:python:package:source:local:editable'
     # endregion python
 
     # region poetry
diff --git a/cyclonedx_py/_internal/environment.py b/cyclonedx_py/_internal/environment.py
index 86a7a2c5..9d9c7a82 100644
--- a/cyclonedx_py/_internal/environment.py
+++ b/cyclonedx_py/_internal/environment.py
@@ -47,12 +47,14 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
         p = ArgumentParser(description='Build an SBOM from Python (virtual) environment',
                            **kwargs)
         if os_name == 'nt':
+            # TODO the Windows help-page might need improvement.
             p.epilog = dedent("""\
                Example Usage:
                  • Build an SBOM from current python environment:
                        > %(prog)s
                  • Build an SBOM from a Python (virtual) environment:
                        > %(prog)s "...some\\path\\bin\\python.exe"
+                       > %(prog)s '...some\\path\\.venv\\'
                  • Build an SBOM from specific Python environment:
                        > where.exe python3.9.exe
                        > %(prog)s "%%path to specific python%%"
@@ -61,6 +63,7 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
                        > %(prog)s "%%path to conda python%%"
                  • Build an SBOM from Pipenv environment:
                        > pipenv.exe --py
+                       > pipenv.exe --venv
                        > %(prog)s "%%path to pipenv python%%"
                  • Build an SBOM from Poetry environment:
                        > poetry.exe env info  --executable
@@ -73,17 +76,19 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
                        $ %(prog)s
                  • Build an SBOM from a Python (virtual) environment:
                        $ %(prog)s '...some/path/bin/python'
+                       $ %(prog)s '.../.venv/'
                  • Build an SBOM from specific Python environment:
                        $ %(prog)s "$(which python3.9)"
                  • Build an SBOM from conda Python environment:
                        $ %(prog)s "$(conda run which python)"
                  • Build an SBOM from Pipenv environment:
                        $ %(prog)s "$(pipenv --py)"
+                       $ %(prog)s "$(pipenv --venv)"
                  • Build an SBOM from Poetry environment:
                        $ %(prog)s "$(poetry env info --executable)"
                """)
         p.add_argument('--pyproject',
-                       metavar='pyproject.toml',
+                       metavar='FILE',
                        help="Path to the root component's `pyproject.toml` according to PEP621",
                        dest='pyproject_file',
                        default=None)
@@ -153,9 +158,11 @@ def __add_components(self, bom: 'Bom', rc: Optional[Tuple['Component', Set[str]]
                          **kwargs: Any) -> None:
         from importlib.metadata import distributions
 
+        from cyclonedx.model import Property
         from cyclonedx.model.component import Component, ComponentType
         from packageurl import PackageURL
 
+        from . import PropertyName
         from .utils.cdx import licenses_fixup
         from .utils.packaging import metadata2extrefs, metadata2licenses
         from .utils.pep610 import PackageSourceArchive, PackageSourceVcs, packagesource2extref, packagesource4dist
@@ -179,10 +186,20 @@ def __add_components(self, bom: 'Bom', rc: Optional[Tuple['Component', Set[str]]
                 # path of dist-package on disc? naaa... a package may have multiple files/folders on disc
             )
             packagesource = packagesource4dist(dist)
-            purl_qs = {}
+            purl_qs = {}  # https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst
+            purl_subpath = None
             if packagesource is not None:
+                if packagesource.subdirectory:
+                    component.properties.add(Property(name=PropertyName.PackageSourceSubdirectory.value,
+                                                      value=packagesource.subdirectory))
+                    purl_subpath = packagesource.subdirectory
                 if isinstance(packagesource, PackageSourceVcs):
                     purl_qs['vcs_url'] = f'{packagesource.vcs}+{packagesource.url}@{packagesource.commit_id}'
+                    component.properties.add(Property(name=PropertyName.PackageSourceVcsCommitId.value,
+                                                      value=packagesource.commit_id))
+                    if packagesource.requested_revision:
+                        component.properties.add(Property(name=PropertyName.PackageSourceVcsRequestedRevision.value,
+                                                          value=packagesource.requested_revision))
                 elif isinstance(packagesource, PackageSourceArchive):
                     if '://files.pythonhosted.org/' not in packagesource.url:
                         # skip PURL bloat, do not add implicit information
@@ -193,7 +210,8 @@ def __add_components(self, bom: 'Bom', rc: Optional[Tuple['Component', Set[str]]
                 del packagesource_extref
             if packagesource is None or not packagesource.url.startswith('file://'):
                 # no purl for locals and unpublished packages
-                component.purl = PackageURL('pypi', name=dist_name, version=dist_version, qualifiers=purl_qs)
+                component.purl = PackageURL('pypi', name=dist_name, version=dist_version,
+                                            qualifiers=purl_qs, subpath=purl_subpath)
             del dist_meta, dist_name, dist_version, packagesource, purl_qs
 
             all_components[component.name.lower()] = (
diff --git a/cyclonedx_py/_internal/pipenv.py b/cyclonedx_py/_internal/pipenv.py
index d9642d12..9f0e7b01 100644
--- a/cyclonedx_py/_internal/pipenv.py
+++ b/cyclonedx_py/_internal/pipenv.py
@@ -72,7 +72,7 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
                        dest='pypi_url',
                        default=getenv('PIPENV_PYPI_MIRROR'))
         p.add_argument('--pyproject',
-                       metavar='pyproject.toml',
+                       metavar='FILE',
                        help="Path to the root component's `pyproject.toml` according to PEP621",
                        dest='pyproject_file',
                        default=None)
diff --git a/cyclonedx_py/_internal/requirements.py b/cyclonedx_py/_internal/requirements.py
index 5d0dcacd..53103791 100644
--- a/cyclonedx_py/_internal/requirements.py
+++ b/cyclonedx_py/_internal/requirements.py
@@ -57,14 +57,14 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
                              • Merge multiple files and build an SBOM from it:
                                    $ cat requirements/*.txt | %(prog)s -
                              • Build an inventory for all installed packages:
-                                   $ python3 -m pip freeze --all | %(prog)s -
+                                   $ python -m pip freeze --all | %(prog)s -
                              • Build an inventory for all installed packages in a conda environment:
-                                   $ conda run python3 -m pip freeze --all | %(prog)s -
-                             • Build an inventory for installed packages in a virtual environment:
-                                   $ .../venv/bin/python3 -m pip freeze --all --local --require-virtualenv | %(prog)s -
+                                   $ conda run python -m pip freeze --all | %(prog)s -
+                             • Build an inventory for installed packages in a Python (virtual) environment:
+                                   $ .../.venv/bin/python -m pip freeze --all --local --require-virtualenv | %(prog)s -
                              • Build an inventory from an unfrozen manifest:
-                                   $ python3 -m pip install -r dependencies.txt &&\\
-                                     python3 -m pip freeze | %(prog)s -
+                                   $ python -m pip install -r dependencies.txt &&\\
+                                     python -m pip freeze | %(prog)s -
                            """),
                            **kwargs)
         # the args shall mimic the ones from Pip
@@ -84,7 +84,7 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser':
                        dest='extra_index_urls',
                        default=[])
         p.add_argument('--pyproject',
-                       metavar='pyproject.toml',
+                       metavar='FILE',
                        help="Path to the root component's `pyproject.toml` according to PEP621",
                        dest='pyproject_file',
                        default=None)
diff --git a/cyclonedx_py/_internal/utils/pep610.py b/cyclonedx_py/_internal/utils/pep610.py
index e01e06b4..2bd1f352 100644
--- a/cyclonedx_py/_internal/utils/pep610.py
+++ b/cyclonedx_py/_internal/utils/pep610.py
@@ -35,56 +35,61 @@
 
 class PackageSource(ABC):
     @abstractmethod
-    def __init__(self, url: str) -> None:
+    def __init__(self, url: str, subdirectory: Optional[str]) -> None:
         self.url = url
+        self.subdirectory = subdirectory
 
 
 class PackageSourceVcs(PackageSource):
     # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#vcs-urls
 
-    def __init__(self, url: str,
+    def __init__(self, url: str, subdirectory: Optional[str],
                  vcs: str, requested_revision: Optional[str], commit_id: str) -> None:
-        super().__init__(url)
+        super().__init__(url, subdirectory)
         self.vcs = vcs
         self.requested_revision = requested_revision
         self.commit_id = commit_id
 
     @classmethod
-    def from_data(cls, url: str, data: Dict[str, Any]) -> 'PackageSourceVcs':
-        return cls(url, data['vcs'], data.get('requested_revision'), data['commit_id'])
+    def from_data(cls, url: str, subdirectory: Optional[str],
+                  info: Dict[str, Any]) -> 'PackageSourceVcs':
+        return cls(url, subdirectory,
+                   info['vcs'], info.get('requested_revision'), info['commit_id'])
 
 
 class PackageSourceArchive(PackageSource):
     # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#archive-urls
 
-    def __init__(self, url: str,
+    def __init__(self, url: str, subdirectory: Optional[str],
                  hashes: Optional[Dict[str, str]]) -> None:
-        super().__init__(url)
+        super().__init__(url, subdirectory)
         self.hashes = hashes or {}
 
     @classmethod
-    def from_data(cls, url: str, data: Dict[str, Any]) -> 'PackageSourceArchive':
-        if 'hashes' in data:
-            hashes = data['hashes']
-        elif 'hash' in data:
-            hash_parts = str(data['hash']).split('=', maxsplit=1)
+    def from_data(cls, url: str, subdirectory: Optional[str],
+                  info: Dict[str, Any]) -> 'PackageSourceArchive':
+        if 'hashes' in info:
+            hashes = info['hashes']
+        elif 'hash' in info:
+            hash_parts = str(info['hash']).split('=', maxsplit=1)
             hashes = {hash_parts[0]: hash_parts[1]}
         else:
             hashes = None
-        return cls(url, hashes)
+        return cls(url, subdirectory, hashes)
 
 
 class PackageSourceLocal(PackageSource):
     # see https://packaging.python.org/en/latest/specifications/direct-url-data-structure/#local-directories
 
-    def __init__(self, url: str,
+    def __init__(self, url: str, subdirectory: Optional[str],
                  editable: bool) -> None:
-        super().__init__(url)
+        super().__init__(url, subdirectory)
         self.editable = editable
 
     @classmethod
-    def from_data(cls, url: str, data: Dict[str, Any]) -> 'PackageSourceLocal':
-        return cls(url, data.get('editable', False))
+    def from_data(cls, url: str, subdirectory: Optional[str],
+                  info: Dict[str, Any]) -> 'PackageSourceLocal':
+        return cls(url, subdirectory, info.get('editable', False))
 
 
 def packagesource4dist(dist: 'Distribution') -> Optional[PackageSource]:
@@ -96,26 +101,28 @@ def packagesource4dist(dist: 'Distribution') -> Optional[PackageSource]:
     except JSONDecodeError:  # pragma: no cover
         return None
     url = data['url']
+    subdirectory = data.get('subdirectory')
     if url == '':
         return None
     if 'vcs_info' in data:
-        return PackageSourceVcs.from_data(url, data['vcs_info'])
+        return PackageSourceVcs.from_data(url, subdirectory, data['vcs_info'])
     if 'archive_info' in data:
-        return PackageSourceArchive.from_data(url, data['archive_info'])
+        return PackageSourceArchive.from_data(url, subdirectory, data['archive_info'])
     if 'dir_info' in data:
-        return PackageSourceLocal.from_data(url, data['dir_info'])
+        return PackageSourceLocal.from_data(url, subdirectory, data['dir_info'])
     return None
 
 
 def packagesource2extref(src: PackageSource) -> Optional['ExternalReference']:
     from cyclonedx.exception.model import InvalidUriException, UnknownHashTypeException
     from cyclonedx.model import ExternalReference, ExternalReferenceType, HashType, XsUri
+    sdir = f' (subdirectory {src.subdirectory!r})' if src.subdirectory else ''
     try:
         if isinstance(src, PackageSourceVcs):
             return ExternalReference(
-                type=ExternalReferenceType.DISTRIBUTION,
+                type=ExternalReferenceType.VCS,
                 url=XsUri(f'{src.url}#{src.commit_id}'),
-                comment=f'PackageSource: VCS {src.vcs!r}')
+                comment=f'PackageSource: VCS {src.vcs!r}{sdir}')
         if isinstance(src, PackageSourceArchive):
             hashes = []
             for hashlib_alg, content in src.hashes.items():
@@ -126,12 +133,12 @@ def packagesource2extref(src: PackageSource) -> Optional['ExternalReference']:
             return ExternalReference(
                 type=ExternalReferenceType.DISTRIBUTION,
                 url=XsUri(src.url), hashes=hashes,
-                comment='PackageSource: Archive')
+                comment=f'PackageSource: Archive{sdir}')
         if isinstance(src, PackageSourceLocal):
             return ExternalReference(
                 type=ExternalReferenceType.DISTRIBUTION,
                 url=XsUri(src.url),
-                comment='PackageSource: Local')
+                comment=f'PackageSource: Local{sdir}')
     except InvalidUriException:
         pass
     return None
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin
index 0aed7947..277af824 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.1.xml.bin
@@ -7,10 +7,6 @@
       <description>Core utilities for Python packages</description>
       <purl>pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176</purl>
       <externalReferences>
-        <reference type="distribution">
-          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
-          <comment>PackageSource: VCS 'git'</comment>
-        </reference>
         <reference type="documentation">
           <url>https://packaging.pypa.io/</url>
           <comment>Project-URL: Documentation</comment>
@@ -19,6 +15,10 @@
           <url>https://github.com/pypa/packaging</url>
           <comment>Project-URL: Source</comment>
         </reference>
+        <reference type="vcs">
+          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
+          <comment>PackageSource: VCS 'git'</comment>
+        </reference>
       </externalReferences>
     </component>
     <component type="library" bom-ref="six==1.16.0">
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin
index 02fd1c28..13fdf9c9 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.2.json.bin
@@ -4,11 +4,6 @@
       "bom-ref": "packaging==23.2",
       "description": "Core utilities for Python packages",
       "externalReferences": [
-        {
-          "comment": "PackageSource: VCS 'git'",
-          "type": "distribution",
-          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
-        },
         {
           "comment": "Project-URL: Documentation",
           "type": "documentation",
@@ -18,6 +13,11 @@
           "comment": "Project-URL: Source",
           "type": "other",
           "url": "https://github.com/pypa/packaging"
+        },
+        {
+          "comment": "PackageSource: VCS 'git'",
+          "type": "vcs",
+          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
         }
       ],
       "name": "packaging",
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin
index 52c79431..07875404 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.2.xml.bin
@@ -26,10 +26,6 @@
       <description>Core utilities for Python packages</description>
       <purl>pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176</purl>
       <externalReferences>
-        <reference type="distribution">
-          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
-          <comment>PackageSource: VCS 'git'</comment>
-        </reference>
         <reference type="documentation">
           <url>https://packaging.pypa.io/</url>
           <comment>Project-URL: Documentation</comment>
@@ -38,6 +34,10 @@
           <url>https://github.com/pypa/packaging</url>
           <comment>Project-URL: Source</comment>
         </reference>
+        <reference type="vcs">
+          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
+          <comment>PackageSource: VCS 'git'</comment>
+        </reference>
       </externalReferences>
     </component>
     <component type="library" bom-ref="six==1.16.0">
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin
index aa6326bd..ab5831e1 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.3.json.bin
@@ -4,11 +4,6 @@
       "bom-ref": "packaging==23.2",
       "description": "Core utilities for Python packages",
       "externalReferences": [
-        {
-          "comment": "PackageSource: VCS 'git'",
-          "type": "distribution",
-          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
-        },
         {
           "comment": "Project-URL: Documentation",
           "type": "documentation",
@@ -18,9 +13,24 @@
           "comment": "Project-URL: Source",
           "type": "other",
           "url": "https://github.com/pypa/packaging"
+        },
+        {
+          "comment": "PackageSource: VCS 'git'",
+          "type": "vcs",
+          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
         }
       ],
       "name": "packaging",
+      "properties": [
+        {
+          "name": "cdx:poetry:package:source:vcs:commit_id",
+          "value": "b3a5d7d68991c040615d5345bb55f61de53ba176"
+        },
+        {
+          "name": "cdx:poetry:package:source:vcs:requested_revision",
+          "value": "23.2"
+        }
+      ],
       "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176",
       "type": "library",
       "version": "23.2"
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin
index 53f1392c..c149459f 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.3.xml.bin
@@ -26,10 +26,6 @@
       <description>Core utilities for Python packages</description>
       <purl>pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176</purl>
       <externalReferences>
-        <reference type="distribution">
-          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
-          <comment>PackageSource: VCS 'git'</comment>
-        </reference>
         <reference type="documentation">
           <url>https://packaging.pypa.io/</url>
           <comment>Project-URL: Documentation</comment>
@@ -38,7 +34,15 @@
           <url>https://github.com/pypa/packaging</url>
           <comment>Project-URL: Source</comment>
         </reference>
+        <reference type="vcs">
+          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
+          <comment>PackageSource: VCS 'git'</comment>
+        </reference>
       </externalReferences>
+      <properties>
+        <property name="cdx:poetry:package:source:vcs:commit_id">b3a5d7d68991c040615d5345bb55f61de53ba176</property>
+        <property name="cdx:poetry:package:source:vcs:requested_revision">23.2</property>
+      </properties>
     </component>
     <component type="library" bom-ref="six==1.16.0">
       <name>six</name>
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin
index 991dfad2..07a7ddf1 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.4.json.bin
@@ -4,11 +4,6 @@
       "bom-ref": "packaging==23.2",
       "description": "Core utilities for Python packages",
       "externalReferences": [
-        {
-          "comment": "PackageSource: VCS 'git'",
-          "type": "distribution",
-          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
-        },
         {
           "comment": "Project-URL: Documentation",
           "type": "documentation",
@@ -18,9 +13,24 @@
           "comment": "Project-URL: Source",
           "type": "other",
           "url": "https://github.com/pypa/packaging"
+        },
+        {
+          "comment": "PackageSource: VCS 'git'",
+          "type": "vcs",
+          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
         }
       ],
       "name": "packaging",
+      "properties": [
+        {
+          "name": "cdx:poetry:package:source:vcs:commit_id",
+          "value": "b3a5d7d68991c040615d5345bb55f61de53ba176"
+        },
+        {
+          "name": "cdx:poetry:package:source:vcs:requested_revision",
+          "value": "23.2"
+        }
+      ],
       "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176",
       "type": "library",
       "version": "23.2"
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin
index a79d3e4f..7c31ca82 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.4.xml.bin
@@ -53,10 +53,6 @@
       <description>Core utilities for Python packages</description>
       <purl>pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176</purl>
       <externalReferences>
-        <reference type="distribution">
-          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
-          <comment>PackageSource: VCS 'git'</comment>
-        </reference>
         <reference type="documentation">
           <url>https://packaging.pypa.io/</url>
           <comment>Project-URL: Documentation</comment>
@@ -65,7 +61,15 @@
           <url>https://github.com/pypa/packaging</url>
           <comment>Project-URL: Source</comment>
         </reference>
+        <reference type="vcs">
+          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
+          <comment>PackageSource: VCS 'git'</comment>
+        </reference>
       </externalReferences>
+      <properties>
+        <property name="cdx:poetry:package:source:vcs:commit_id">b3a5d7d68991c040615d5345bb55f61de53ba176</property>
+        <property name="cdx:poetry:package:source:vcs:requested_revision">23.2</property>
+      </properties>
     </component>
     <component type="library" bom-ref="six==1.16.0">
       <name>six</name>
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin b/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin
index e2d80154..cad40fd3 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.5.json.bin
@@ -4,11 +4,6 @@
       "bom-ref": "packaging==23.2",
       "description": "Core utilities for Python packages",
       "externalReferences": [
-        {
-          "comment": "PackageSource: VCS 'git'",
-          "type": "distribution",
-          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
-        },
         {
           "comment": "Project-URL: Documentation",
           "type": "documentation",
@@ -18,9 +13,24 @@
           "comment": "Project-URL: Source",
           "type": "other",
           "url": "https://github.com/pypa/packaging"
+        },
+        {
+          "comment": "PackageSource: VCS 'git'",
+          "type": "vcs",
+          "url": "https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176"
         }
       ],
       "name": "packaging",
+      "properties": [
+        {
+          "name": "cdx:poetry:package:source:vcs:commit_id",
+          "value": "b3a5d7d68991c040615d5345bb55f61de53ba176"
+        },
+        {
+          "name": "cdx:poetry:package:source:vcs:requested_revision",
+          "value": "23.2"
+        }
+      ],
       "purl": "pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176",
       "type": "library",
       "version": "23.2"
diff --git a/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin b/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin
index 907d163c..0c6a9a75 100644
--- a/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin
+++ b/tests/_data/snapshots/environment/venv_with-urls_1.5.xml.bin
@@ -53,10 +53,6 @@
       <description>Core utilities for Python packages</description>
       <purl>pkg:pypi/packaging@23.2?vcs_url=git%2Bhttps://github.com/pypa/packaging.git%40b3a5d7d68991c040615d5345bb55f61de53ba176</purl>
       <externalReferences>
-        <reference type="distribution">
-          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
-          <comment>PackageSource: VCS 'git'</comment>
-        </reference>
         <reference type="documentation">
           <url>https://packaging.pypa.io/</url>
           <comment>Project-URL: Documentation</comment>
@@ -65,7 +61,15 @@
           <url>https://github.com/pypa/packaging</url>
           <comment>Project-URL: Source</comment>
         </reference>
+        <reference type="vcs">
+          <url>https://github.com/pypa/packaging.git#b3a5d7d68991c040615d5345bb55f61de53ba176</url>
+          <comment>PackageSource: VCS 'git'</comment>
+        </reference>
       </externalReferences>
+      <properties>
+        <property name="cdx:poetry:package:source:vcs:commit_id">b3a5d7d68991c040615d5345bb55f61de53ba176</property>
+        <property name="cdx:poetry:package:source:vcs:requested_revision">23.2</property>
+      </properties>
     </component>
     <component type="library" bom-ref="six==1.16.0">
       <name>six</name>
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin
index 9a7e72ad..44836581 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.3.json.bin
@@ -116,11 +116,11 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -304,7 +304,7 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin
index 8fb1e950..855f28f9 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.3.xml.bin
@@ -90,8 +90,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml==0.7.1">
@@ -200,7 +200,7 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications==2023.11.2">
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin
index d32b1710..02f063e8 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.4.json.bin
@@ -116,11 +116,11 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -304,7 +304,7 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin
index 5265faed..eab607ee 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.4.xml.bin
@@ -117,8 +117,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml==0.7.1">
@@ -227,7 +227,7 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications==2023.11.2">
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin
index 1587783b..0333f94b 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.5.json.bin
@@ -116,11 +116,11 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -304,7 +304,7 @@
           "value": "default"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
diff --git a/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin b/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin
index adc09229..3dc514a0 100644
--- a/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin
+++ b/tests/_data/snapshots/pipenv/file_with-extras_1.5.xml.bin
@@ -117,8 +117,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml==0.7.1">
@@ -227,7 +227,7 @@
       </externalReferences>
       <properties>
         <property name="cdx:pipenv:category">default</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications==2023.11.2">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin
index e269048f..39abe83d 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.json.bin
@@ -25,11 +25,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -163,7 +163,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin
index 8e679260..d4c956c8 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.3.xml.bin
@@ -19,7 +19,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -42,8 +42,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin
index 22c3c25e..7c4943dd 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.json.bin
@@ -25,11 +25,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -163,7 +163,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin
index b3d04699..c9333332 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.4.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -69,8 +69,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin
index 7cd27829..3e44318f 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.json.bin
@@ -25,11 +25,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -163,7 +163,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin
index 33f4b7fc..12e32276 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock10_1.5.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -69,8 +69,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin
index cb0319a0..c37f9529 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.json.bin
@@ -103,11 +103,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -336,7 +336,7 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -2110,7 +2110,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin
index 9821652c..5ade7e85 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.3.xml.bin
@@ -19,7 +19,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -94,8 +94,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -246,7 +246,7 @@
       <purl>pkg:pypi/jsonschema@4.19.2</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin
index ac64968a..886f0baf 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.json.bin
@@ -103,11 +103,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -336,7 +336,7 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -2110,7 +2110,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin
index a3ab677b..a09b90b7 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.4.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -121,8 +121,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -273,7 +273,7 @@
       <purl>pkg:pypi/jsonschema@4.19.2</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin
index 09f7d397..cbdaaac4 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.json.bin
@@ -103,11 +103,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -336,7 +336,7 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -2110,7 +2110,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin
index 625389e2..85dbdc63 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock11_1.5.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -121,8 +121,8 @@
       <purl>pkg:pypi/cyclonedx-python-lib@5.1.1</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -273,7 +273,7 @@
       <purl>pkg:pypi/jsonschema@4.19.2</purl>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin
index 0fe2d5c0..37170e79 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.json.bin
@@ -133,11 +133,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -374,7 +374,7 @@
       "name": "jsonschema",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -3156,7 +3156,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin
index 407e093e..dbf7f1ef 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.3.xml.bin
@@ -19,7 +19,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -117,8 +117,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -282,7 +282,7 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin
index c709f4a1..7f8decc1 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.json.bin
@@ -133,11 +133,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -374,7 +374,7 @@
       "name": "jsonschema",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -3156,7 +3156,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin
index 36fdc525..4d94f970 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.4.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -144,8 +144,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -309,7 +309,7 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin
index 925a1403..152269f5 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.json.bin
@@ -133,11 +133,11 @@
           "value": "main"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
@@ -374,7 +374,7 @@
       "name": "jsonschema",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "format"
         }
       ],
@@ -3156,7 +3156,7 @@
       "name": "with-extras",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "my-extra"
         }
       ],
diff --git a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin
index 72ac9bf1..75f5407b 100644
--- a/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin
+++ b/tests/_data/snapshots/poetry/some-extras_lock20_1.5.xml.bin
@@ -46,7 +46,7 @@
       <version>0.1.0</version>
       <description>depenndencies with extras</description>
       <properties>
-        <property name="cdx:python:package:extra">my-extra</property>
+        <property name="cdx:python:package:required-extra">my-extra</property>
       </properties>
     </component>
   </metadata>
@@ -144,8 +144,8 @@
       </externalReferences>
       <properties>
         <property name="cdx:poetry:group">main</property>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
     <component type="library" bom-ref="defusedxml@0.7.1">
@@ -309,7 +309,7 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">format</property>
+        <property name="cdx:python:package:required-extra">format</property>
       </properties>
     </component>
     <component type="library" bom-ref="jsonschema-specifications@2023.7.1">
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin
index 753cbf69..f2be6263 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin
index b89cd677..187ad4bb 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin
@@ -35,8 +35,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin
index 05c5b4c5..8e4a57d8 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin
index b38778b9..59846d93 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin
@@ -62,8 +62,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin
index 4402bc17..27aac3e8 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin
index eb258efb..196acabc 100644
--- a/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin
+++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin
@@ -62,8 +62,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin
index b142eb75..3a10febe 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.3.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin
index e18f53f1..accd61eb 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.3.xml.bin
@@ -27,8 +27,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin
index 7114ebcd..5c282291 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.4.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin
index d547e445..b7d9f55c 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.4.xml.bin
@@ -54,8 +54,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin
index c8359c9f..30a51bb8 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.5.json.bin
@@ -13,11 +13,11 @@
       "name": "cyclonedx-python-lib",
       "properties": [
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "json-validation"
         },
         {
-          "name": "cdx:python:package:extra",
+          "name": "cdx:python:package:required-extra",
           "value": "xml-validation"
         }
       ],
diff --git a/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin b/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin
index acde8a62..f049804c 100644
--- a/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin
+++ b/tests/_data/snapshots/requirements/stream_with-extras_1.5.xml.bin
@@ -54,8 +54,8 @@
         </reference>
       </externalReferences>
       <properties>
-        <property name="cdx:python:package:extra">json-validation</property>
-        <property name="cdx:python:package:extra">xml-validation</property>
+        <property name="cdx:python:package:required-extra">json-validation</property>
+        <property name="cdx:python:package:required-extra">xml-validation</property>
       </properties>
     </component>
   </components>
