|
1 | 1 | # Eclipse BaSyx Python SDK |
2 | 2 |
|
3 | | -The Eclipse BaSyx Python project focuses on providing a Python implementation of the Asset Administration Shell (AAS) |
4 | | -for Industry 4.0 Systems. |
| 3 | +[](https://github.com/eclipse-basyx/basyx-python-sdk/actions/workflows/ci.yml) |
| 4 | +[](https://pypi.org/project/basyx-python-sdk/) |
| 5 | +[](https://anaconda.org/conda-forge/basyx-python-sdk) |
| 6 | +[](https://pypi.org/project/basyx-python-sdk/) |
| 7 | +[](https://pypi.org/project/basyx-python-sdk/) |
| 8 | +[](LICENSE) |
| 9 | + |
| 10 | +The Eclipse BaSyx Python SDK is a Python implementation of the |
| 11 | +[Asset Administration Shell (AAS)](https://industrialdigitaltwin.org/en/content-hub/aasspecifications) |
| 12 | +for Industry 4.0 systems. It lets you model, serialize, validate, store, and serve AAS data |
| 13 | +entirely in Python. |
| 14 | + |
| 15 | +The project is part of the [Eclipse BaSyx](https://www.eclipse.org/basyx/) middleware |
| 16 | +framework, developed under the umbrella of the Eclipse Foundation. |
| 17 | + |
| 18 | +## Specification Compliance |
| 19 | + |
| 20 | +> [!NOTE] |
| 21 | +> The SDK version number is independent of the supported AAS specification versions. |
| 22 | +
|
| 23 | +These are the AAS specifications implemented by the |
| 24 | +[current release](https://github.com/eclipse-basyx/basyx-python-sdk/releases/latest), |
| 25 | +which can also be found on [PyPI](https://pypi.org/project/basyx-python-sdk/) and |
| 26 | +[conda-forge](https://anaconda.org/conda-forge/basyx-python-sdk): |
| 27 | + |
| 28 | +| Specification | Version | |
| 29 | +|---|---| |
| 30 | +| Part 1: Metamodel | [v3.0.1 (01001-3-0-1)](https://industrialdigitaltwin.org/wp-content/uploads/2024/06/IDTA-01001-3-0-1_SpecificationAssetAdministrationShell_Part1_Metamodel.pdf) | |
| 31 | +| Schemata (JSONSchema, XSD) | [v3.0.8 (IDTA-01001-3-0-1_schemasV3.0.8)](https://github.com/admin-shell-io/aas-specs/releases/tag/IDTA-01001-3-0-1_schemasV3.0.8) | |
| 32 | +| Part 2: API | [v3.0 (01002-3-0)](https://industrialdigitaltwin.org/en/wp-content/uploads/sites/2/2023/06/IDTA-01002-3-0_SpecificationAssetAdministrationShell_Part2_API_.pdf) | |
| 33 | +| Part 3a: Data Specification IEC 61360 | [v3.0 (01003-a-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01003-a-3-0_SpecificationAssetAdministrationShell_Part3a_DataSpecification_IEC61360.pdf) | |
| 34 | +| Part 5: Package File Format (AASX) | [v3.0 (01005-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01005-3-0_SpecificationAssetAdministrationShell_Part5_AASXPackageFileFormat.pdf) | |
| 35 | + |
| 36 | +For older specification support, consult the [prior releases](https://github.com/eclipse-basyx/basyx-python-sdk/releases) — |
| 37 | +each release has a similar table in its notes. |
| 38 | + |
| 39 | +--- |
5 | 40 |
|
6 | | -**Please note that the SDK version number is independent of the supported AAS versions!** |
| 41 | +## Table of Contents |
7 | 42 |
|
8 | | -These are the implemented AAS specifications of the [current SDK release](https://github.com/eclipse-basyx/basyx-python-sdk/releases/latest), which can be also found on [PyPI](https://pypi.org/project/basyx-python-sdk/): |
| 43 | +- [Project Overview](#project-overview) |
| 44 | +- [Repository Structure](#repository-structure) |
| 45 | +- [Tutorials](#tutorials) |
| 46 | +- [Documentation](#documentation) |
| 47 | +- [FAQ](#faq) |
| 48 | +- [Release Schedule](#release-schedule) |
| 49 | +- [Contributing](#contributing) |
| 50 | +- [License](#license) |
9 | 51 |
|
10 | | -| Specification | Version | |
11 | | -|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
12 | | -| Part 1: Metamodel | [v3.0.1 (01001-3-0-1)](https://industrialdigitaltwin.org/wp-content/uploads/2024/06/IDTA-01001-3-0-1_SpecificationAssetAdministrationShell_Part1_Metamodel.pdf) | |
13 | | -| Schemata (JSONSchema, XSD) | [v3.0.8 (IDTA-01001-3-0-1_schemasV3.0.8)](https://github.com/admin-shell-io/aas-specs/releases/tag/IDTA-01001-3-0-1_schemasV3.0.8) | |
14 | | -| Part 2: API | [v3.0 (01002-3-0)](https://industrialdigitaltwin.org/en/wp-content/uploads/sites/2/2023/06/IDTA-01002-3-0_SpecificationAssetAdministrationShell_Part2_API_.pdf) | |
15 | | -| Part 3a: Data Specification IEC 61360 | [v3.0 (01003-a-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01003-a-3-0_SpecificationAssetAdministrationShell_Part3a_DataSpecification_IEC61360.pdf) | |
16 | | -| Part 5: Package File Format (AASX) | [v3.0 (01005-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01005-3-0_SpecificationAssetAdministrationShell_Part5_AASXPackageFileFormat.pdf) | |
17 | | - |
18 | | -If you need support to an older version of the specifications, please refer to our [prior releases](https://github.com/eclipse-basyx/basyx-python-sdk/releases). |
19 | | -Each of them has a similar table at the top of the release notes. |
20 | | - |
21 | | -## Features |
22 | | -This repository is structured into separate packages. |
23 | | -The `sdk` directory provides the AAS metamodel as Python objects and fundamental functionalities to handle AAS. |
24 | | -The `server` implements a specification-compliant Docker HTTP server for AASs. |
25 | | -The `compliance_tool` is to be determined. |
26 | | - |
27 | | -* [SDK](./sdk/README.md): |
28 | | - * Modelling of AASs as Python objects |
29 | | - * Reading and writing of AASX package files |
30 | | - * (De-)serialization of AAS objects into/from JSON and XML |
31 | | - * Experimental serialization to RDF (see branch [Experimental/Adapter/RDF](https://github.com/eclipse-basyx/basyx-python-sdk/tree/Experimental/Adapter/RDF/basyx/aas/adapter/rdf)). |
32 | | - Please refer to discussion of PR [#308](https://github.com/eclipse-basyx/basyx-python-sdk/pull/308) for the reasoning behind keeping this feature experimental. |
33 | | - * Storing of AAS objects in CouchDB, Backend infrastructure for easy expansion |
34 | | - * Compliance checking of AAS XML and JSON files |
35 | | -* [Server](./server/README.md): Docker Image of a specification compliant HTTP Server implementing the interfaces: |
36 | | - * Asset Administration Shell Repository |
37 | | - * Submodel Repository |
38 | | -* [Compliance Tool](./compliance_tool/README.md): A command-line tool for checking compliance of JSON and XML files |
39 | | - to the specification of the AAS |
| 52 | +--- |
40 | 53 |
|
41 | | -## License |
| 54 | +## Project Overview |
42 | 55 |
|
43 | | -The BaSyx Python SDK project is licensed under the terms of the MIT License. |
| 56 | +This mono-repository contains three self-contained Python packages that cover different |
| 57 | +aspects of working with Asset Administration Shells: |
44 | 58 |
|
45 | | -SPDX-License-Identifier: MIT |
| 59 | +| Package | Purpose | |
| 60 | +|---------|---------| |
| 61 | +| **[SDK](./sdk)** | Core library — AAS metamodel, serialization, storage | |
| 62 | +| **[Server](./server)** | Spec-compliant AAS HTTP/REST server (Docker) | |
| 63 | +| **[Compliance Tool](./compliance_tool)** | CLI checker for AAS file compliance | |
| 64 | + |
| 65 | +### SDK |
| 66 | + |
| 67 | +The SDK (`basyx-python-sdk` on PyPI / conda-forge) is the core of this project. It provides: |
| 68 | + |
| 69 | +- **AAS Metamodel** — full Python object model of the AAS metamodel (Part 1) |
| 70 | +- **Serialization** — read and write AAS data as JSON, XML, or AASX package files |
| 71 | +- **Backend Storage** — persist AAS objects in CouchDB or as local JSON files, with an |
| 72 | + extensible backend interface |
| 73 | +- **Experimental RDF Support** — serialization to RDF is available on the |
| 74 | + [Experimental/Adapter/RDF](https://github.com/eclipse-basyx/basyx-python-sdk/tree/Experimental/Adapter/RDF/basyx/aas/adapter/rdf) |
| 75 | + branch (see [#308](https://github.com/eclipse-basyx/basyx-python-sdk/pull/308) for context) |
| 76 | + |
| 77 | +### Server |
| 78 | + |
| 79 | +A Docker image that exposes a specification-compliant HTTP/REST API (AAS Part 2), currently |
| 80 | +implementing the following service interfaces: |
| 81 | + |
| 82 | +- Asset Administration Shell Repository |
| 83 | +- Submodel Repository |
| 84 | +- AAS Registry |
| 85 | +- AAS Discovery |
| 86 | + |
| 87 | +It can serve AAS data from AASX, JSON, or XML files, optionally with persistent |
| 88 | +storage via the Local-File Backend. |
| 89 | + |
| 90 | +### Compliance Tool |
| 91 | + |
| 92 | +A command-line utility for checking whether AAS JSON, XML, or AASX files conform to the |
| 93 | +official schema. Useful for CI pipelines, data validation, and interoperability testing. |
| 94 | + |
| 95 | +--- |
| 96 | + |
| 97 | +## Repository Structure |
| 98 | + |
| 99 | +``` |
| 100 | +basyx-python-sdk/ |
| 101 | +├── sdk/ # Core Python SDK (basyx-python-sdk on PyPI) |
| 102 | +│ ├── basyx/aas/ |
| 103 | +│ │ ├── model/ # AAS metamodel as Python classes |
| 104 | +│ │ ├── adapter/ # JSON, XML, AASX serialization adapters |
| 105 | +│ │ ├── backend/ # CouchDB, local-file storage backends |
| 106 | +│ │ ├── util/ # Utility functions (traversal, identification) |
| 107 | +│ │ └── examples/ # Tutorials and example data |
| 108 | +│ ├── docs/ # Sphinx documentation source |
| 109 | +│ └── pyproject.toml |
| 110 | +├── server/ # AAS HTTP/REST server (Docker) |
| 111 | +│ ├── app/ # Server application code |
| 112 | +│ ├── docker/ # Dockerfiles and entrypoint scripts |
| 113 | +│ ├── example_configurations/ |
| 114 | +│ └── pyproject.toml |
| 115 | +├── compliance_tool/ # CLI compliance checker |
| 116 | +│ ├── aas_compliance_tool/ |
| 117 | +│ └── pyproject.toml |
| 118 | +├── .github/workflows/ # CI/CD pipeline definitions |
| 119 | +├── CONTRIBUTING.md |
| 120 | +├── LICENSE # MIT License |
| 121 | +└── NOTICE |
| 122 | +``` |
| 123 | + |
| 124 | +--- |
| 125 | + |
| 126 | +## Tutorials |
| 127 | + |
| 128 | +The SDK ships with step-by-step tutorials in `sdk/basyx/aas/examples/`: |
46 | 129 |
|
47 | | -For more information, especially considering the licenses of included third-party works, please consult the `NOTICE` |
48 | | -file. |
| 130 | +| Tutorial | What You Will Learn | |
| 131 | +|---|---| |
| 132 | +| [Create a Simple AAS](./sdk/basyx/aas/examples/tutorial_create_simple_aas.py) | Build an Asset Administration Shell with an Asset and a Submodel from scratch | |
| 133 | +| [Navigate Submodels](./sdk/basyx/aas/examples/tutorial_navigate_aas.py) | Traverse AAS Submodels using IdShorts and IdShortPaths | |
| 134 | +| [Object Storage](./sdk/basyx/aas/examples/tutorial_storage.py) | Manage many AAS objects with ObjectStores and resolve references | |
| 135 | +| [Serialization & Deserialization](./sdk/basyx/aas/examples/tutorial_serialization_deserialization.py) | Read and write AAS data as JSON and XML | |
| 136 | +| [AASX Packages](./sdk/basyx/aas/examples/tutorial_aasx.py) | Export AAS shells with related objects and auxiliary files to AASX packages | |
| 137 | +| [CouchDB Backend](./sdk/basyx/aas/examples/tutorial_backend_couchdb.py) | Store and retrieve AAS objects in a CouchDB document database | |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## Documentation |
| 142 | + |
| 143 | +Full API documentation is hosted on Read the Docs: |
| 144 | + |
| 145 | +**[basyx-python-sdk.readthedocs.io](https://basyx-python-sdk.readthedocs.io)** |
| 146 | + |
| 147 | +--- |
| 148 | + |
| 149 | +## FAQ |
| 150 | + |
| 151 | +**I can't read a JSON/XML/AASX file from another tool with this SDK. What should I do?** |
| 152 | + |
| 153 | +The SDK enforces strict compliance with the AAS specification. Files produced by other tools |
| 154 | +may not fully conform. To diagnose the issue: |
| 155 | + |
| 156 | +1. Check that the file targets the same AAS specification version supported by this SDK |
| 157 | + (see the [Specification Compliance](#specification-compliance) table above). |
| 158 | +2. Run the [Compliance Tool](./compliance_tool/README.md) on the file to identify any |
| 159 | + schema violations. |
| 160 | +3. If the file is spec-compliant and the SDK still rejects it, please |
| 161 | + [open an issue](https://github.com/eclipse-basyx/basyx-python-sdk/issues/new) with the |
| 162 | + error message and, if possible, a minimal example file. |
| 163 | + |
| 164 | +**Can I run the server without Docker?** |
| 165 | + |
| 166 | +Yes, for debugging purposes. See the |
| 167 | +[Server README](./server/README.md#running-without-docker-debugging-only) for instructions. |
| 168 | +This mode is not suitable for production. |
| 169 | + |
| 170 | +--- |
49 | 171 |
|
50 | 172 | ## Release Schedule |
51 | 173 |
|
52 | | -The Eclipse BaSyx-Python SDK Team evaluates bi-monthly the newly added commits to the main branch towards the need |
53 | | -of releasing a new version. |
54 | | -If decided the changes warrant a release, it is initiated, using semantic versioning for the new release number. |
55 | | -If the changes do not warrant a release, the decision is postponed to the next meeting. |
| 174 | +The Eclipse BaSyx Python SDK team meets bi-monthly to evaluate whether the changes accumulated |
| 175 | +on the `develop` branch warrant a new release. If so, `develop` is merged into `main` and a |
| 176 | +new version is published to |
| 177 | +[PyPI](https://pypi.org/project/basyx-python-sdk/) and |
| 178 | +[conda-forge](https://anaconda.org/conda-forge/basyx-python-sdk) |
| 179 | +using [semantic versioning](https://semver.org/). If not, the decision is deferred to the |
| 180 | +next meeting. Security fixes may be released at any time. |
56 | 181 |
|
57 | | -Additionally, security fixes may be released at any point. |
| 182 | +--- |
58 | 183 |
|
59 | 184 | ## Contributing |
60 | 185 |
|
61 | | -For contributing with issues and code, please see our [Contribution Guideline](./CONTRIBUTING.md). |
| 186 | +We welcome contributions of all kinds — bug reports, feature requests, documentation |
| 187 | +improvements, and code. Please read our [Contribution Guideline](./CONTRIBUTING.md) before |
| 188 | +getting started. |
62 | 189 |
|
63 | 190 | ### Eclipse Contributor Agreement |
64 | 191 |
|
65 | | -To contribute code to this project you need to sign the [Eclipse Contributor Agreement (ECA)](https://www.eclipse.org/legal/ECA.php). |
66 | | -This is done by creating an Eclipse account for your git e-mail address and then submitting the following form: https://accounts.eclipse.org/user/eca |
| 192 | +To contribute code, you must sign the |
| 193 | +[Eclipse Contributor Agreement (ECA)](https://www.eclipse.org/legal/ECA.php). |
| 194 | +Create an Eclipse account with the same email address you use for Git commits, then submit |
| 195 | +the form at: https://accounts.eclipse.org/user/eca |
| 196 | + |
| 197 | +--- |
| 198 | + |
| 199 | +## License |
| 200 | + |
| 201 | +This project is licensed under the terms of the **MIT License**. |
| 202 | + |
| 203 | +SPDX-License-Identifier: MIT |
| 204 | + |
| 205 | +For details on third-party dependencies and their licenses, see the [NOTICE](./NOTICE) file. |
0 commit comments