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

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.

CI
Python
Version
License: Apache 2.0

Contributors
Last commit
Code style: ruff
Typed

Ontology: EMMO domain-battery
Battery Pass

Open in Colab
nbviewer

DOI

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

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 → Dataset chain 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). The processing extra 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 → Dataset provenance 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]hasNumericalParthasNumericalValue (canonical EMMO quantity pattern)
  • hasMeasurementUnit → full EMMO or QUDT IRI (never a bare string)
  • @type stacking: a cylindrical LFP cell is simultaneously BatteryCell, CylindricalBattery, LithiumIonBattery, LithiumIronPhosphateBattery, and LithiumIonGraphiteBattery

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.
See docs/scope.md for 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, and test-protocol records.

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 by IDENTIFIER_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
replace zenodo.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


GitHub Events

Total
Last Year

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 Email 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:


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

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/big-map/battinfo

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

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

web/package.json npm
  • @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
.github/workflows/docs.yml actions
  • actions/checkout v7 composite
  • actions/download-artifact v8 composite
  • actions/upload-artifact v7 composite
  • astral-sh/setup-uv v7 composite
.github/workflows/security.yml actions
  • 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
.github/workflows/release.yml actions
  • 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
web/package-lock.json npm
  • 187 dependencies
uv.lock pypi
  • 219 dependencies
pyproject.toml pypi
  • jsonschema >=4.21
  • pydantic >=2.7
  • pyld >=3.1.0
  • rdflib >=7.0
  • rich >=13.7
  • typer >=0.27.0
.github/workflows/ci.yml actions
  • actions/checkout v7 composite
  • actions/setup-node v7 composite
  • actions/upload-artifact v7 composite
  • astral-sh/setup-uv v7 composite
.github/workflows/install-smoke.yml actions
  • actions/checkout v7 composite
  • actions/setup-python v7 composite
docs/requirements.txt pypi
  • myst-parser >=3.0
  • nbsphinx >=0.9
  • pydata-sphinx-theme >=0.20.0
  • sphinx >=7.3
  • sphinx-design >=0.6

Score: -Infinity