BattINFO
Consists of a list of entities representing concepts used in batteries and electrochemistry.
https://github.com/big-map/battinfo
Category: Sustainable Development
Sub Category: Taxonomy and Ontology
Keywords from Contributors
code-generation interoperability semantic-interoperability
Last synced: about 16 hours ago
JSON representation
Repository metadata
A Battery Interface Ontology based on EMMO
- Host: GitHub
- URL: https://github.com/big-map/battinfo
- Owner: BIG-MAP
- License: apache-2.0
- Created: 2020-10-21T06:39:03.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2026-08-10T16:53:23.000Z (4 days ago)
- Last Synced: 2026-08-12T14:26:01.296Z (1 day ago)
- Language: Python
- Homepage: https://big-map.github.io/BattINFO/index.html
- Size: 20.2 MB
- Stars: 57
- Watchers: 5
- Forks: 14
- Open Issues: 21
- Releases: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Citation: CITATION.cff
- Security: SECURITY.md
- Notice: NOTICE
- Agents: AGENTS.md
README.md
The semantic data layer for battery technology
Create, validate, and publish battery metadata as machine-readable Linked Data —
typed against EMMO domain-battery
and resolvable through persistent https://w3id.org/battinfo/ identifiers.
Quickstart ·
Documentation ·
How-to guides ·
Tutorials ·
Contributing ·
Cite
New words? The plain-language glossary decodes
Linked Data, EMMO, IRI, and friends in two sentences each.
BattINFO provides a Python library, a CLI, and a canonical asset suite — JSON
Schemas, ontology mappings, profiles, and examples — that make it straightforward
to describe batteries as valid, machine-readable Linked Data.
Every record published through BattINFO is a valid RDF document, typed against
EMMO domain-battery and resolvable through persistent https://w3id.org/battinfo/
IRIs. The result is battery metadata that is interoperable by construction,
queryable with SPARQL, and Battery Pass-compatible out of the box.
Table of contents
- Why BattINFO
- Installation
- Quickstart
- Tutorials
- What BattINFO does
- Semantic foundation
- Project status
- Repository layout
- Core principles
- Contributing
- Citation
- License
Why BattINFO
Battery data is fragmented across spreadsheets, vendor datasheets, and ad-hoc
JSON. BattINFO turns that into a single, semantically-grounded record model:
- Write plain JSON or Python — get validated, EMMO-aligned JSON-LD.
- Interoperable by construction — records share one ontology, one context, and one identifier scheme.
- Provenance built in — a
CellSpec → Cell → Test → Datasetchain links every measurement back to the cell that produced it. - Standards-ready — Battery Pass-compatible output, pinned per release.
Installation
Requires Python 3.11+.
BattINFO is not on PyPI until the 0.8 release. Until then, install from source
into a virtual environment:
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install "git+https://github.com/BIG-MAP/BattINFO.git"
Optional extras: battinfo[processing] (cycler-file conversion via ws.convert()
- plotting),
battinfo[tabular](CSV/Parquet/XLSX readers),battinfo[publish]
(RO-Crate validation),battinfo[storage](S3),battinfo[docs](Sphinx), and
battinfo[dev](full test/lint/build toolchain). Theprocessingextra also needs
batterydf, which is not yet on PyPI. Until it ships,pip install "battinfo[processing]"
cannot resolve; install the processing dependencies directly instead:
pip install "git+https://github.com/battery-data-alliance/battery-data-format.git" matplotlib plotly
Developing on BattINFO? This repo uses uv:
uv sync --all-extras # creates .venv and installs from uv.lock
Quickstart
from battinfo import CellSpec, publish
result = publish(
CellSpec(
manufacturer="Panasonic",
model="NCR18650B",
format="cylindrical",
chemistry="Li-ion",
nominal_capacity={"value": 3.4, "unit": "Ah"},
),
destination="local",
root=".battinfo/my-library",
)
print(result.canonical_iri)
# https://w3id.org/battinfo/spec/xxxx-xxxx-xxxx-xxxx
That IRI is permanent, but not yet resolvable on the web — opening it in a
browser returns 404 for a record published locally. A local publish mints the
identity; it becomes dereferenceable once you publish the record to the
registry (ws.publish(), see Tutorial 6).
destination="local" writes to a .battinfo/ directory (a dot-directory —
ls -a to see it):
.battinfo/my-library/
├── index.json
└── examples/cell-spec/cell-spec-<id>.json # the canonical record JSON
Or from the command line:
battinfo --help
For interactive, multi-record work — cells, tests, datasets, equipment — the
authoring workspace is the blessed surface:
import battinfo
ws = battinfo.workspace(".")
ws.quickstart() # prints a copy-pasteable end-to-end example
Lab work? Start at the how-to guides — twelve bench
tasks (register materials, build a cell from components, label cells, convert
cycler exports, publish) each mapped to a runnable recipe. The
capability table
shows which surface (workspace, battinfo.api, CLI) authors which record types today.
→ Read the full quickstart and the documentation index.
Tutorials
Six tutorial notebooks in docs/guides/ — one story, from the
record model to a published dataset. Each runs from its own folder and writes
only to a throwaway _scratch/ directory next to it.
| Tutorial | What you'll learn |
|---|---|
| 1 — Concepts | The record model, IRIs, and the semantic layer |
| 2 — Describing a cell | Author and publish a cell spec, with a taste of material-level depth |
| 3 — Linked records | Cells, test specs, tests, and datasets with the workspace |
| 4 — Semantic layer | JSON-LD anatomy, EMMO type stacking, RDF and SPARQL |
| 5 — Cell descriptors | Research-grade composition: materials, BOMs, electrodes, electrolyte |
| 6 — Publish your first dataset | End to end: raw cycler CSV → validated records → DOI + registry |
What BattINFO does
- Validates battery metadata as plain JSON (JSON Schema / Pydantic) and as semantic RDF (JSON-LD + URDNA2015 normalisation).
- Maps JSON inputs into domain-battery-aligned JSON-LD using authoritative curated property and unit mappings.
- Produces Battery Pass-compatible JSON-LD (pinned to v1.2.0).
- Provides profiles, examples, and mapping rules for all common battery record types.
- Supports a reusable cell-spec library, curated once as BattINFO descriptors and published as generated RDF/JSON-LD.
- Publishes dataset metadata with a core
CellSpec → Cell → Test → Datasetprovenance chain.
Semantic foundation
| Layer | What it provides |
|---|---|
battinfo.ttl |
OWL application ontology; imports EMMO domain-battery 0.19.0 and domain-electrochemistry 0.34.0 with pinned versioned IRIs |
assets/mappings/domain-battery/ |
47 curated property→EMMO-IRI mappings and 27 unit→EMMO-IRI mappings; drives JSON→JSON-LD transformation |
assets/schemas/ |
23 JSON Schema (draft 2020-12) files covering cell specs, cell instances, electrodes, electrolytes, separators, tests, datasets, and organisations |
src/battinfo/transform/json_to_jsonld.py |
Deterministic, mapping-table-driven transformation to EMMO-aligned JSON-LD using the canonical domain-battery context |
src/battinfo/validate/ |
Multi-layer validation: JSON Schema, Pydantic, JSON-LD (URDNA2015), semantic rules, referential integrity, publication |
Published records use:
hasProperty→[ClassName, ConventionalProperty]→hasNumericalPart→hasNumericalValue(canonical EMMO quantity pattern)hasMeasurementUnit→ full EMMO or QUDT IRI (never a bare string)@typestacking: a cylindrical LFP cell is simultaneouslyBatteryCell,CylindricalBattery,LithiumIonBattery,LithiumIronPhosphateBattery, andLithiumIonGraphiteBattery
Project status
Beta. 1,175 tests pass across Python 3.11 and 3.12 on Linux
and Windows. Ontology dependency versions are pinned and verified.
Seedocs/scope.mdfor the full capability map.
Supported
- Cell-descriptor validation and mapping, canonical record query/save/publish/index flows, JSON-LD-first publication, and validation policies.
- CLI and Python API covering
cell-spec,cell-instance,test,dataset, andtest-protocolrecords.
Preview (may still change)
- Reusable cell-spec library flows beyond the walkthrough fixtures.
In development (no stability promise)
- Registry sync/query (
battinfo push,battinfo registry). - Large-scale reference validation.
Run the verification gate locally:
.venv\Scripts\python .tools/quality/run_verification.py
Repository layout
| Path | Contents |
|---|---|
battinfo.ttl |
OWL application ontology |
assets/ |
Canonical schemas and mapping assets |
examples/ |
Canonical example records and guide notebooks |
src/battinfo/ |
Python package and CLI |
docs/ |
Adoption and usage documentation |
.tools/ |
Maintainer tooling: build/, datasheets/, library/, quality/, semantic/ |
tests/ |
Regression and contract tests |
Core principles
- Domain-battery is the normative ontology (semantics and terms). BattINFO is non-normative and operational (schemas, mappings, tooling).
- The canonical contract is JSON Schema; Pydantic models are generated for the CLI and Python API.
- JSON-LD-first publication: every record rendered for the resolver or registry is valid RDF aligned to domain-battery.
- Stable, opaque identifiers: all published entities carry a
https://w3id.org/battinfo/{type}/{uid}IRI, governed byIDENTIFIER_POLICY.md. - Battery Pass JSON-LD outputs are supported and pinned per release.
- BattINFO does not host or modify the domain-battery ontology.
Contributing
Contributions are welcome. Please open an issue to discuss substantial changes
before submitting a pull request, and make sure the full quality gate passes:
uv sync --all-extras
uv run ruff check src tests
uv run mypy
uv run pytest -q tests
CI runs the same checks across Python 3.11/3.12 on Linux and Windows via the
CI workflow, alongside
Security (pip-audit + CodeQL) and
Docs builds.
Citation
If you use BattINFO in your research, please cite it. The concept DOI arrives
with the 0.8 release (the first Zenodo-archived release); the badge above will
then resolve to a citable record:
@software{battinfo,
title = {BattINFO: The semantic data layer for battery technology},
author = {Clark, Simon and Friis, Jesper and L{\o}nstad Bleken, Francesca and Flores, Eibar and Stier, Simon and Battaglia, Corsin},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.XXXXXXX},
url = {https://github.com/BIG-MAP/BattINFO}
}
Maintainers: mint a Zenodo concept DOI on the first tagged release and
replacezenodo.XXXXXXX(in the badge and the citation above) with the real
identifier.
License
Distributed under the Apache License 2.0. See LICENSE.
Acknowledgements
Built on the EMMO ontology suite — in particular
domain-battery and
domain-electrochemistry — and aligned with the
Battery Pass data content guidance.
Citation (CITATION.cff)
cff-version: 1.2.0
title: "BattINFO: The semantic data layer for battery science"
message: "If you use this software, please cite it using the metadata from this file."
type: software
authors:
- given-names: "Simon"
family-names: "Clark"
orcid: "https://orcid.org/0000-0002-8758-6109"
- given-names: "Jesper"
family-names: "Friis"
orcid: "https://orcid.org/0000-0002-1560-809X"
- given-names: "Francesca"
family-names: "Lønstad Bleken"
orcid: "https://orcid.org/0000-0001-8869-3718"
- given-names: "Eibar"
family-names: "Flores"
orcid: "https://orcid.org/0000-0003-2954-1233"
- given-names: "Simon"
family-names: "Stier"
orcid: "https://orcid.org/0009-0008-6968-1998"
- given-names: "Corsin"
family-names: "Battaglia"
orcid: "https://orcid.org/0000-0002-5003-1134"
# Wider community contributions are acknowledged in CONTRIBUTORS.md and the
# GitHub contributor graph; per-record contributors are credited via ORCID in
# the published metadata itself.
repository-code: "https://github.com/BIG-MAP/BattINFO"
url: "https://github.com/BIG-MAP/BattINFO"
abstract: >-
BattINFO is the semantic data layer for battery science. It provides a Python
library, CLI, and canonical asset suite (JSON Schemas, ontology mappings, and
examples) for creating, validating, and publishing battery metadata as
machine-readable Linked Data, typed against the EMMO domain-battery ontology
and resolvable through persistent https://w3id.org/battinfo/ identifiers.
keywords:
- batteries
- ontology
- EMMO
- linked data
- JSON-LD
- FAIR data
- Battery Pass
- semantic web
license: Apache-2.0
version: 0.7.0
# date-released: 2026-XX-XX # set on the first tagged release
Owner metadata
- Name: BIG-MAP
- Login: BIG-MAP
- Email:
- Kind: organization
- Description: Battery Interface Genome - Materials Acceleration Platform. Promoting accelerated discovery of novel battery materials.
- Website: https://www.big-map.eu/
- Location: Europe
- Twitter: BIGMAP_EU
- Company:
- Icon url: https://avatars.githubusercontent.com/u/75324577?v=4
- Repositories: 16
- Last ynced at: 2023-03-05T23:35:45.738Z
- Profile URL: https://github.com/BIG-MAP
GitHub Events
Total
- Delete event: 23
- Pull request event: 4
- Fork event: 2
- Issues event: 4
- Watch event: 10
- Issue comment event: 5
- Push event: 65
- Create event: 32
Last Year
- Delete event: 21
- Issues event: 1
- Watch event: 3
- Issue comment event: 1
- Push event: 65
- Create event: 30
Committers metadata
Last synced: 1 day ago
Total Commits: 739
Total Committers: 10
Avg Commits per committer: 73.9
Development Distribution Score (DDS): 0.417
Commits in past year: 289
Committers in past year: 2
Avg Commits per committer in past year: 144.5
Development Distribution Score (DDS) in past year: 0.066
| Name | Commits | |
|---|---|---|
| Simon Clark | s****k@s****o | 431 |
| francescalb | f****n@s****o | 89 |
| Jesper Friis | j****s@s****o | 86 |
| dependabot[bot] | 4****] | 46 |
| Casper Welzel Andersen | c****n@s****o | 41 |
| eibar-flores | 1****s | 28 |
| Xavier Raynaud | x****d@g****m | 7 |
| hendelhendel | s****k@g****m | 6 |
| BattINFO Developers | B****O@b****g | 3 |
| Simon Stier | 7****r | 2 |
Committer domains:
- sintef.no: 4
- big-map.org: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 63
Total pull requests: 297
Average time to close issues: 6 months
Average time to close pull requests: about 1 month
Total issue authors: 17
Total pull request authors: 9
Average comments per issue: 1.02
Average comments per pull request: 0.91
Merged pull request: 183
Bot issues: 1
Bot pull requests: 162
Past year issues: 12
Past year pull requests: 90
Past year average time to close issues: 8 days
Past year average time to close pull requests: 1 day
Past year issue authors: 4
Past year pull request authors: 3
Past year average comments per issue: 0.67
Past year average comments per pull request: 0.87
Past year merged pull request: 80
Past year bot issues: 0
Past year bot pull requests: 28
Top Issue Authors
- CasperWA (17)
- jesper-friis (12)
- jsimonclark (10)
- eibar-flores (6)
- CorsinBattaglia (3)
- francescalb (3)
- helgestein (2)
- deepananbu (1)
- augustjohansson (1)
- ruben-parra (1)
- delahousse (1)
- SabinePaar (1)
- fengel (1)
- johnmugisa (1)
- dependabot[bot] (1)
Top Pull Request Authors
- dependabot[bot] (162)
- jsimonclark (78)
- francescalb (19)
- jesper-friis (17)
- CasperWA (13)
- SimonStier (4)
- eibar-flores (2)
- djui (1)
- hendelhendel (1)
Top Issue Labels
- bug (12)
- enhancement (10)
- documentation (8)
- CI/CD (6)
- question (3)
- invalid (1)
Top Pull Request Labels
- CI/CD (136)
- dependencies (28)
- python:uv (13)
- github_actions (12)
- enhancement (3)
- javascript (3)
- documentation (2)
- bug (1)
Package metadata
- Total packages: 2
- Total downloads: unknown
- Total dependent packages: 0 (may contain duplicates)
- Total dependent repositories: 0 (may contain duplicates)
- Total versions: 4
proxy.golang.org: github.com/BIG-MAP/BattINFO
- Homepage:
- Documentation: https://pkg.go.dev/github.com/BIG-MAP/BattINFO#section-documentation
- Licenses: apache-2.0
- Latest release: v0.6.0 (published almost 3 years ago)
- Last Synced: 2026-08-12T14:21:03.210Z (1 day ago)
- Versions: 2
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.459%
- Average: 5.642%
- Dependent repos count: 5.825%
proxy.golang.org: github.com/big-map/battinfo
- Homepage:
- Documentation: https://pkg.go.dev/github.com/big-map/battinfo#section-documentation
- Licenses: apache-2.0
- Latest release: v0.6.0 (published almost 3 years ago)
- Last Synced: 2026-08-12T14:30:19.559Z (1 day ago)
- Versions: 2
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.459%
- Average: 5.642%
- Dependent repos count: 5.825%
Dependencies
- @types/jsonld ^1.5.15 development
- @types/node 20.14.10 development
- @types/react 18.3.3 development
- @types/react-dom 18.3.0 development
- autoprefixer 10.4.19 development
- postcss 8.5.25 development
- tailwindcss 3.4.6 development
- tsx ^4.23.0 development
- typescript 5.5.3 development
- @vercel/analytics ^1.3.1
- ajv ^8.20.0
- ajv-formats ^3.0.1
- jsonld ^9.0.0
- next ^16.2.11
- react 18.3.1
- react-dom 18.3.1
- actions/checkout v7 composite
- actions/download-artifact v8 composite
- actions/upload-artifact v7 composite
- astral-sh/setup-uv v7 composite
- actions/checkout v7 composite
- astral-sh/setup-uv v7 composite
- github/codeql-action/analyze v4.37.3 composite
- github/codeql-action/init v4.37.3 composite
- actions/checkout v7 composite
- actions/download-artifact v8 composite
- actions/upload-artifact v7 composite
- astral-sh/setup-uv v7 composite
- pypa/gh-action-pypi-publish release/v1 composite
- softprops/action-gh-release v3 composite
- 187 dependencies
- 219 dependencies
- jsonschema >=4.21
- pydantic >=2.7
- pyld >=3.1.0
- rdflib >=7.0
- rich >=13.7
- typer >=0.27.0
- actions/checkout v7 composite
- actions/setup-node v7 composite
- actions/upload-artifact v7 composite
- astral-sh/setup-uv v7 composite
- actions/checkout v7 composite
- actions/setup-python v7 composite
- myst-parser >=3.0
- nbsphinx >=0.9
- pydata-sphinx-theme >=0.20.0
- sphinx >=7.3
- sphinx-design >=0.6
Score: -Infinity