# Responsibilities

- Provide a general purpose Python-implementation of CycloneDX.

- Provide type hints for said implementation, so developers and dev-tools can rely on it.

- Provide data models to work with CycloneDX.

- Provide data model-validators according to CycloneDX Specification.

- Provide JSON- and XML-serializers, that…

    - support all shipped data models.

    - respect any supported CycloneDX Specification and generates valid output accordingly.

    - generate reproducible/deterministic results.

- Provide formal JSON- and XML-validators according to CycloneDX Specification.

- Provide mechanisms for JSON- and XML-deserialization of all shipped data models.

- Pre-populate bom-ref, so linkage is possible. (affects only some data models)

# Capabilities

- Enums and Data models for the following use cases:

    - `Bom and Metadata`

    - `BomRef`

    - `Component, Evidence, Patch, Pedigree, and more`

    - `Organizational Contact and Entity`

    - `Cryptographic properties and more`

    - `Definition and Standard`

    - `Dependency`

    - `Impact and related Analysis`

    - `Issue`

    - `License Named, SPDX, Expression, and more`

    - `Lifecycle`

    - `Release Notes`

    - `Service`

    - `Tool`

    - `Vulnerability and related Analysis`

    - `Attachment Copyright, DataFlow, ExternalReference, Hash, Property, and more`

- Factories for the following use cases:

    - Create data models from any license descriptor string

- Builders for the following use cases:

    - Build a `Component` data model that represents this library

    - Build a `Tool` data model that represents this library

- Implementation of the CycloneDX Specification for the following versions:

    - `1.7`

    - `1.6`

    - `1.5`

    - `1.4`

    - `1.3`

    - `1.2`

    - `1.1`

    - `1.0`

- Serializer that converts `Bom` data models to XML string

- Serializer that converts `Bom` data models to JSON string

- Formal validators for JSON string and XML string. Requires optional dependencies as described in install instructions.

- Shipped data model are serializable to and deserializable from both, JSON and XML.