BattINFO#
BattINFO is the semantic data layer for battery technology — a Python library, CLI, and canonical asset suite that validates, maps, and publishes battery metadata as machine-readable Linked Data aligned with the EMMO Battery Domain Ontology.
Here is a minimal example that describes a cell spec in Python and saves it locally. The other two tabs show the flagship cell from battinfo.org, the A123 ANR26650M1-B: its record as stored in examples/cell-spec/A123__ANR26650M1-B.json, and the JSON-LD that battinfo.record_to_jsonld writes for that record.
from battinfo import CellSpec, publish
spec = CellSpec(
manufacturer="A123",
model="ANR26650M1-B",
format="cylindrical",
chemistry="li-ion",
nominal_capacity={"value": 2.5, "unit": "Ah"},
)
# publish() gives this spec its own IRI, minted from its manufacturer,
# model, format, chemistry and size code. The flagship record in the
# next two tabs has more fields and keeps the IRI it was published
# under, so the two IRIs differ.
result = publish(spec, destination="local")
print(result.canonical_iri)
{
"schema_version": "0.2.0",
"cell_spec": {
"id": "https://w3id.org/battinfo/spec/pge5-wer6-2q82-v9k0",
"short_id": "pge5we",
"identifier": "cell-spec:pge5-wer6-2q82-v9k0",
"name": "A123 ANR26650M1-B",
"model": "ANR26650M1-B",
"manufacturer": {
"type": "Organization",
"name": "A123",
"id": "https://w3id.org/battinfo/organization/8z6j-n7vw-e73w-smh7"
},
"brand": {
"type": "Brand",
"name": "A123"
},
"category": "battery cell",
"cell_format": "cylindrical",
"chemistry": "Li-ion",
"positive_electrode_basis": "LFP",
"negative_electrode_basis": "unknown",
"size_code": "R26650",
"year": 2012
},
"properties": {
"nominal_capacity": {
"value": 2.5,
"unit": "Ah",
"raw": {
"text": "Cell Capacity (nominal/minimum) (0.5C Rate) 2.5/2.4 Ah",
"page": 1,
"confidence": 0.8
}
},
"minimum_capacity": {
"value": 2.4,
"unit": "Ah",
"raw": {
"text": "Cell Capacity (nominal/minimum) (0.5C Rate) 2.5/2.4 Ah",
"page": 1,
"confidence": 0.8
}
},
"nominal_voltage": {
"value": 3.3,
"unit": "V",
"raw": {
"text": "Voltage (nominal) 3.3V",
"page": 1,
"confidence": 0.8
}
},
"ac_internal_resistance": {
"value": 6.0,
"unit": "mΩ",
"raw": {
"text": "Internal Impedance (1kHz AC typical) 6mΩ",
"page": 1,
"confidence": 0.8
}
},
"mass": {
"value": 76.0,
"unit": "g",
"raw": {
"text": "Cell Weight 76g",
"page": 1,
"confidence": 0.8
}
},
"diameter": {
"value": 26.0,
"unit": "mm",
"raw": {
"text": "Cell Dimensions 26 x 65 mm",
"page": 1,
"confidence": 0.8
}
},
"height": {
"value": 65.0,
"unit": "mm",
"raw": {
"text": "Cell Dimensions 26 x 65 mm",
"page": 1,
"confidence": 0.8
}
},
"charging_voltage": {
"value": 3.6,
"unit": "V",
"raw": {
"text": "Recommended Standard Charge Method 2.5A to 3.6V CCCV, 60 min",
"page": 1,
"confidence": 0.8
}
},
"nominal_continuous_charging_current": {
"value": 2.5,
"unit": "A",
"raw": {
"text": "Recommended Standard Charge Method 2.5A to 3.6V CCCV, 60 min",
"page": 1,
"confidence": 0.8
}
},
"maximum_continuous_discharging_current": {
"value": 50.0,
"unit": "A",
"raw": {
"text": "Maximum Continuous Discharge 50A",
"page": 1,
"confidence": 0.8
}
},
"maximum_pulse_discharging_current": {
"value": 120.0,
"unit": "A",
"conditions": {
"duration": {
"value": 10,
"unit": "s"
}
},
"raw": {
"text": "Maximum Pulse Discharge (10 seconds) 120A",
"page": 1,
"confidence": 0.8
}
},
"operating_temperature_min": {
"value": -30,
"unit": "°C",
"raw": {
"text": "Operating Temperature -30°C to 55°C",
"page": 1,
"confidence": 0.8
}
},
"operating_temperature_max": {
"value": 55,
"unit": "°C",
"raw": {
"text": "Operating Temperature -30°C to 55°C",
"page": 1,
"confidence": 0.8
}
},
"minimum_storage_temperature": {
"value": -40,
"unit": "°C",
"raw": {
"text": "Storage Temperature -40°C to 60°C",
"page": 1,
"confidence": 0.8
}
},
"maximum_storage_temperature": {
"value": 60,
"unit": "°C",
"raw": {
"text": "Storage Temperature -40°C to 60°C",
"page": 1,
"confidence": 0.8
}
},
"cycle_life": {
"value_text": ">1000",
"unit": "count",
"raw": {
"text": "Cycle Life at 20A Discharge, 100% DOD >1,000 cycles",
"page": 1,
"confidence": 0.7
}
}
},
"notes": [
"Recommended fast charge to 80% SOC: 10 A to 3.6 V CC, 12 min (data sheet). Kept as a note: the data sheet gives no maximum continuous or pulse charging current."
],
"provenance": {
"source_type": "datasheet",
"source_file": "A123__ANR26650M1-B.pdf",
"source_url": null,
"file_hash": "b5069f48e121de3a1308af66215e7a97a1c8c6a87227da089c83e352f1ddf35e",
"retrieved_at": 1769585584
}
}
{
"@context": "https://w3id.org/battinfo/context/records/v1.json",
"@type": [
"BatteryCellSpecification",
"schema:ProductModel",
"schema:CreativeWork"
],
"@id": "https://w3id.org/battinfo/spec/pge5-wer6-2q82-v9k0",
"schema:identifier": "pge5-wer6-2q82-v9k0",
"schema:name": "A123 ANR26650M1-B",
"schema:model": "ANR26650M1-B",
"schema:manufacturer": {
"@id": "https://w3id.org/battinfo/organization/8z6j-n7vw-e73w-smh7",
"@type": "schema:Organization",
"schema:name": "A123"
},
"schema:url": "https://www.battery-genome.org/registry/spec/pge5-wer6-2q82-v9k0",
"isDescriptionFor": {
"@type": [
"BatteryCell",
"CylindricalBattery",
"LithiumIonBattery",
"LithiumIonIronPhosphateBattery"
],
"@id": "https://w3id.org/battinfo/spec/pge5-wer6-2q82-v9k0#described",
"skos:prefLabel": "A123 ANR26650M1-B",
"hasProperty": [
{
"@type": [
"NominalCapacity",
"ConventionalProperty"
],
"skos:prefLabel": "NominalCapacity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 2.5
},
"hasMeasurementUnit": "https://w3id.org/emmo#AmpereHour"
},
{
"@type": [
"MinimumCapacity",
"ConventionalProperty"
],
"skos:prefLabel": "MinimumCapacity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 2.4
},
"hasMeasurementUnit": "https://w3id.org/emmo#AmpereHour"
},
{
"@type": [
"NominalVoltage",
"ConventionalProperty"
],
"skos:prefLabel": "NominalVoltage",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 3.3
},
"hasMeasurementUnit": "https://w3id.org/emmo#Volt"
},
{
"@type": [
"ACInternalResistance",
"ConventionalProperty"
],
"skos:prefLabel": "ACInternalResistance",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 6.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliOhm"
},
{
"@type": [
"Mass",
"ConventionalProperty"
],
"skos:prefLabel": "Mass",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 76.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#Gram"
},
{
"@type": [
"Diameter",
"ConventionalProperty"
],
"skos:prefLabel": "Diameter",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 26.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliMetre"
},
{
"@type": [
"Height",
"ConventionalProperty"
],
"skos:prefLabel": "Height",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 65.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliMetre"
},
{
"@type": [
"ChargingVoltage",
"ConventionalProperty"
],
"skos:prefLabel": "ChargingVoltage",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 3.6
},
"hasMeasurementUnit": "https://w3id.org/emmo#Volt"
},
{
"@type": [
"ChargingCurrent",
"ConventionalProperty"
],
"skos:prefLabel": "ChargingCurrent",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 2.5
},
"hasMeasurementUnit": "https://w3id.org/emmo#Ampere"
},
{
"@type": [
"MaximumContinuousDischargingCurrent",
"ConventionalProperty"
],
"skos:prefLabel": "MaximumContinuousDischargingCurrent",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 50.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#Ampere"
},
{
"@type": [
"MaximumPulseDischargingCurrent",
"ConventionalProperty"
],
"skos:prefLabel": "MaximumPulseDischargingCurrent",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 120.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#Ampere",
"schema:valueReference": {
"@type": "schema:PropertyValue",
"schema:propertyID": "duration",
"schema:value": 10,
"schema:unitText": "s"
}
},
{
"@type": [
"MinimumOperatingTemperature",
"ConventionalProperty"
],
"skos:prefLabel": "MinimumOperatingTemperature",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": -30
},
"hasMeasurementUnit": "https://w3id.org/emmo#DegreeCelsius"
},
{
"@type": [
"MaximumOperatingTemperature",
"ConventionalProperty"
],
"skos:prefLabel": "MaximumOperatingTemperature",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 55
},
"hasMeasurementUnit": "https://w3id.org/emmo#DegreeCelsius"
},
{
"@type": [
"MinimumStorageTemperature",
"ConventionalProperty"
],
"skos:prefLabel": "MinimumStorageTemperature",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": -40
},
"hasMeasurementUnit": "https://w3id.org/emmo#DegreeCelsius"
},
{
"@type": [
"MaximumStorageTemperature",
"ConventionalProperty"
],
"skos:prefLabel": "MaximumStorageTemperature",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 60
},
"hasMeasurementUnit": "https://w3id.org/emmo#DegreeCelsius"
},
{
"@type": [
"CycleLife",
"ConventionalProperty"
],
"skos:prefLabel": "CycleLife",
"hasStringValue": ">1000",
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
],
"hasPositiveElectrode": {
"@type": "LithiumIronPhosphateElectrode"
}
},
"schema:size": "R26650",
"schema:brand": {
"@type": "schema:Brand",
"schema:name": "A123"
},
"schema:category": "battery cell",
"schema:releaseDate": "2012-01-01",
"schema:schemaVersion": "0.2.0",
"schema:weight": {
"@type": "schema:QuantitativeValue",
"schema:value": 76.0,
"schema:unitText": "g"
},
"schema:height": {
"@type": "schema:QuantitativeValue",
"schema:value": 65.0,
"schema:unitText": "mm"
},
"schema:width": {
"@type": "schema:QuantitativeValue",
"schema:value": 26.0,
"schema:unitText": "mm"
},
"schema:depth": {
"@type": "schema:QuantitativeValue",
"schema:value": 26.0,
"schema:unitText": "mm"
},
"dcterms:source": {
"@type": "prov:Entity",
"dcterms:type": "datasheet",
"prov:generatedAtTime": "2026-01-28T07:33:04+00:00"
}
}
Explore the documentation#
The documentation follows the Diátaxis structure: tutorials teach, how-to guides solve one task each, reference states the facts, and concepts explain the design.
Get Started
Install BattINFO and publish your first records in five minutes.
Tutorials
Six notebooks, one story — from the record model to a published, citable dataset.
How-to guides
Task-shaped recipes: bulk ingest, fixing validation errors, resuming submissions, funding tags.
Reference
Python API, CLI commands, schemas, and the validation policy contract.
Concepts
How records read as linked data, the ontology architecture, and how BattINFO is built.
Community
Monthly office hours: slides, notes, and the questions raised on each call.