Electrodes#
How to describe an electrode: the design as an electrode spec (composition, route, design values), a physical coated disc or batch as an electrode instance.
kindnames the active material, from the same curated vocabulary as powders; a non-active kind warns but saves.The spec is the coated design (composition, route, design values); the electrode instance is a physical disc or batch.
active_material_spec_idcites the powder product, so a design never points at a bare vocabulary key.polarityis authored or absent; half and three-electrode cells name electrodes by role instead (see half cells).
Define one#
An electrode spec (the design)#
from battinfo.api import create_electrode_spec
record = create_electrode_spec(
uid="kxwy-5f5f-f682-hhch",
name="NMC811 cathode design A",
active_material_kind="nmc811", # from the curated material-kind vocabulary
active_material_spec_id="https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
composition={"active": 0.96, # weight fractions -> coating.component
"binder": {"name": "PVDF", "fraction": 0.02},
"conductive_additive": {"name": "Carbon black", "fraction": 0.02}},
coating={"double_sided": False}, # coated on one side (a lab half-cell disc)
source_type="lab",
)
{
"schema_version": "0.2.0",
"electrode_spec": {
"id": "https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch",
"short_id": "kxwy5f",
"name": "NMC811 cathode design A",
"active_material_kind": "nmc811",
"active_material_spec_id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
"coating": {
"component": {
"active_material": [
{
"name": "NMC811 (LiNi0.8Mn0.1Co0.1O2)",
"property": {
"mass_fraction": {
"value": 0.96,
"unit": "1"
}
},
"material_spec_id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5"
}
],
"binder": [
{
"name": "PVDF",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "Carbon black",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
]
},
"double_sided": false
}
},
"provenance": {
"source_type": "lab",
"retrieved_at": 1750000000,
"battinfo_version": "0.7.0"
}
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": [
"Description",
"schema:ProductModel",
"schema:CreativeWork"
],
"isDescriptionFor": {
"@type": "LithiumNickelManganeseCobaltOxideElectrode",
"hasCoating": {
"@type": "ElectrodeCoating",
"hasActiveMaterial": {
"@type": "ActiveMaterial",
"schema:name": "NMC811 (LiNi0.8Mn0.1Co0.1O2)",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.96
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasBinder": {
"@type": [
"PolyvinylideneFluoride",
"Binder"
],
"schema:name": "PVDF",
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasConductiveAdditive": {
"@type": [
"CarbonBlack",
"ConductiveAdditive"
],
"schema:name": "Carbon black",
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"schema:additionalProperty": {
"@type": "schema:PropertyValue",
"schema:name": "double_sided",
"schema:value": false
}
},
"hasActiveMaterial": {
"@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5#described",
"@type": "ActiveMaterial"
},
"skos:prefLabel": "NMC811 cathode design A",
"@id": "https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch#described"
},
"@id": "https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch",
"schema:name": "NMC811 cathode design A"
}
What to notice:
active_material_spec_idcites the powder, so no design points at a bare vocabulary key.
An electrode (the disc in one cell)#
from battinfo.api import create_electrode
record = create_electrode(
uid="3w87-0ddf-ryjg-evxe",
name="Cathode disc 07, cell LAB-2026-0001",
spec_id="https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch",
# Genealogy: the coated strip this disc was punched from is itself an
# electrode record; siblings cut from it share the same parent.
parent_id="https://w3id.org/battinfo/electrode/9m2k-4tqv-7xw3-1nfh",
piece_id="disc-07",
source_type="lab",
)
{
"schema_version": "0.2.0",
"electrode": {
"id": "https://w3id.org/battinfo/electrode/3w87-0ddf-ryjg-evxe",
"electrode_spec_id": "https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch",
"short_id": "3w870d",
"name": "Cathode disc 07, cell LAB-2026-0001",
"parent_id": "https://w3id.org/battinfo/electrode/7d9k-2m4p-8t3x-6nq5",
"piece_id": "disc-07"
},
"provenance": {
"source_type": "lab",
"retrieved_at": 1750000000,
"battinfo_version": "0.7.0"
}
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": "Electrode",
"@id": "https://w3id.org/battinfo/electrode/3w87-0ddf-ryjg-evxe",
"schema:name": "Cathode disc 07, cell LAB-2026-0001",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/kxwy-5f5f-f682-hhch"
},
"prov:wasDerivedFrom": {
"@id": "https://w3id.org/battinfo/electrode/7d9k-2m4p-8t3x-6nq5"
},
"schema:identifier": {
"@type": "schema:PropertyValue",
"schema:name": "piece_id",
"schema:value": "disc-07"
}
}
What to notice:
electrode_spec_idcarries the design; a cell instance points at this disc throughworking_electrode_id.
Common examples#
A selection of real, validated records from the packaged examples corpus — each one click away, included from its single source under examples/. The full, living library is the registry: browse it there.
NMC811 cathode (electrode-spec)
The record ships in the installed wheel — load it as a starting point:
import json
from importlib import resources
record = json.loads(
resources.files("battinfo")
.joinpath("data/examples/electrode-spec/qfjh-7xyr-ga1k-tjez.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrode_spec": {
"id": "https://w3id.org/battinfo/spec/qfjh-7xyr-ga1k-tjez",
"short_id": "qfjh7x",
"name": "NMC811 cathode",
"active_material_kind": "nmc811",
"active_material_spec_id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm",
"coating": {
"component": {
"active_material": [
{
"name": "NMC811",
"material_spec_id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm",
"property": {
"mass_fraction": {
"value": 0.96,
"unit": "1"
}
}
}
],
"binder": [
{
"name": "PVDF",
"material_spec_id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "Carbon black",
"material_spec_id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
]
},
"property": {
"loading": {
"value": 21,
"unit": "mg/cm2"
},
"thickness": {
"value": 64,
"unit": "um"
}
}
},
"current_collector": {
"name": "Aluminium foil",
"property": {
"thickness": {
"value": 15,
"unit": "um"
}
}
},
"polarity": "positive",
"manufacturer": {
"type": "Organization",
"name": "Canrud",
"id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781742522
},
"notes": [
"NMC811 cathode (96/2/2 NMC811/PVDF/carbon black on Al foil). Discovery-Benchmark NMC811-Graphite cells."
]
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": [
"Description",
"schema:ProductModel",
"schema:CreativeWork"
],
"isDescriptionFor": {
"@type": [
"LithiumNickelManganeseCobaltOxideElectrode",
"PositiveElectrode"
],
"hasCoating": {
"@type": "ElectrodeCoating",
"hasActiveMaterial": {
"@type": [
"LithiumNickelManganeseCobaltOxide811",
"ActiveMaterial"
],
"schema:name": "NMC811",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.96
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasBinder": {
"@type": [
"PolyvinylideneFluoride",
"Binder"
],
"schema:name": "PVDF",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasConductiveAdditive": {
"@type": [
"CarbonBlack",
"ConductiveAdditive"
],
"schema:name": "Carbon black",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasProperty": [
{
"@type": [
"ActiveMassLoading",
"ConventionalProperty"
],
"skos:prefLabel": "ActiveMassLoading",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 21
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliGramPerSquareCentiMetre"
},
{
"@type": [
"CalenderedCoatingThickness",
"ConventionalProperty"
],
"skos:prefLabel": "CalenderedCoatingThickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 64
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
]
},
"hasCurrentCollector": {
"@type": [
"CurrentCollector",
"Aluminium",
"Foil"
],
"schema:name": "Aluminium foil",
"hasProperty": {
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 15
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
},
"hasActiveMaterial": {
"@id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm#described",
"@type": "ActiveMaterial"
},
"skos:prefLabel": "NMC811 cathode",
"@id": "https://w3id.org/battinfo/spec/qfjh-7xyr-ga1k-tjez#described"
},
"@id": "https://w3id.org/battinfo/spec/qfjh-7xyr-ga1k-tjez",
"schema:name": "NMC811 cathode",
"schema:comment": "NMC811 cathode (96/2/2 NMC811/PVDF/carbon black on Al foil). Discovery-Benchmark NMC811-Graphite cells."
}
Graphite anode (electrode-spec)
The record ships in the installed wheel — load it as a starting point:
import json
from importlib import resources
record = json.loads(
resources.files("battinfo")
.joinpath("data/examples/electrode-spec/d7qr-n581-74c3-7g7r.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrode_spec": {
"id": "https://w3id.org/battinfo/spec/d7qr-n581-74c3-7g7r",
"short_id": "d7qrn5",
"name": "Graphite anode",
"active_material_kind": "graphite",
"active_material_spec_id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc",
"coating": {
"component": {
"active_material": [
{
"name": "Graphite",
"material_spec_id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc",
"property": {
"mass_fraction": {
"value": 0.95,
"unit": "1"
}
}
}
],
"binder": [
{
"name": "CMC/SBR",
"property": {
"mass_fraction": {
"value": 0.04,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "Carbon black",
"material_spec_id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
"property": {
"mass_fraction": {
"value": 0.01,
"unit": "1"
}
}
}
]
},
"property": {
"loading": {
"value": 11.5,
"unit": "mg/cm2"
},
"thickness": {
"value": 72,
"unit": "um"
}
}
},
"current_collector": {
"name": "Copper foil",
"property": {
"thickness": {
"value": 10,
"unit": "um"
}
}
},
"polarity": "negative",
"manufacturer": {
"type": "Organization",
"name": "Canrud",
"id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781742522
},
"notes": [
"Graphite anode (95/4/1 graphite/CMC-SBR/carbon black on Cu foil). Discovery-Benchmark cells."
]
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": [
"Description",
"schema:ProductModel",
"schema:CreativeWork"
],
"isDescriptionFor": {
"@type": [
"GraphiteElectrode",
"NegativeElectrode"
],
"hasCoating": {
"@type": "ElectrodeCoating",
"hasActiveMaterial": {
"@type": [
"Graphite",
"ActiveMaterial"
],
"schema:name": "Graphite",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.95
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasBinder": {
"@type": "Binder",
"schema:name": "CMC/SBR",
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.04
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasConductiveAdditive": {
"@type": [
"CarbonBlack",
"ConductiveAdditive"
],
"schema:name": "Carbon black",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.01
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasProperty": [
{
"@type": [
"ActiveMassLoading",
"ConventionalProperty"
],
"skos:prefLabel": "ActiveMassLoading",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 11.5
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliGramPerSquareCentiMetre"
},
{
"@type": [
"CalenderedCoatingThickness",
"ConventionalProperty"
],
"skos:prefLabel": "CalenderedCoatingThickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 72
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
]
},
"hasCurrentCollector": {
"@type": [
"CurrentCollector",
"Copper",
"Foil"
],
"schema:name": "Copper foil",
"hasProperty": {
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 10
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
},
"hasActiveMaterial": {
"@id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc#described",
"@type": "ActiveMaterial"
},
"skos:prefLabel": "Graphite anode",
"@id": "https://w3id.org/battinfo/spec/d7qr-n581-74c3-7g7r#described"
},
"@id": "https://w3id.org/battinfo/spec/d7qr-n581-74c3-7g7r",
"schema:name": "Graphite anode",
"schema:comment": "Graphite anode (95/4/1 graphite/CMC-SBR/carbon black on Cu foil). Discovery-Benchmark cells."
}
LFP cathode (electrode-spec)
The record ships in the installed wheel — load it as a starting point:
import json
from importlib import resources
record = json.loads(
resources.files("battinfo")
.joinpath("data/examples/electrode-spec/m6y0-tkfg-sn40-q10p.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrode_spec": {
"id": "https://w3id.org/battinfo/spec/m6y0-tkfg-sn40-q10p",
"short_id": "m6y0tk",
"name": "LFP cathode",
"active_material_kind": "lfp",
"active_material_spec_id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e",
"coating": {
"component": {
"active_material": [
{
"name": "LFP",
"material_spec_id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e",
"property": {
"mass_fraction": {
"value": 0.96,
"unit": "1"
}
}
}
],
"binder": [
{
"name": "PVDF",
"material_spec_id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "Carbon black",
"material_spec_id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
]
},
"property": {
"loading": {
"value": 20,
"unit": "mg/cm2"
}
}
},
"current_collector": {
"name": "Aluminium foil",
"property": {
"thickness": {
"value": 15,
"unit": "um"
}
}
},
"polarity": "positive",
"manufacturer": {
"type": "Organization",
"name": "Canrud",
"id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781772766
},
"notes": [
"LFP cathode (96/2/2 LFP/PVDF/carbon black on Al foil)."
]
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": [
"Description",
"schema:ProductModel",
"schema:CreativeWork"
],
"isDescriptionFor": {
"@type": [
"LithiumIronPhosphateElectrode",
"PositiveElectrode"
],
"hasCoating": {
"@type": "ElectrodeCoating",
"hasActiveMaterial": {
"@type": [
"LithiumIronPhosphate",
"ActiveMaterial"
],
"schema:name": "LFP",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.96
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasBinder": {
"@type": [
"PolyvinylideneFluoride",
"Binder"
],
"schema:name": "PVDF",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasConductiveAdditive": {
"@type": [
"CarbonBlack",
"ConductiveAdditive"
],
"schema:name": "Carbon black",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasProperty": {
"@type": [
"ActiveMassLoading",
"ConventionalProperty"
],
"skos:prefLabel": "ActiveMassLoading",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 20
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliGramPerSquareCentiMetre"
}
},
"hasCurrentCollector": {
"@type": [
"CurrentCollector",
"Aluminium",
"Foil"
],
"schema:name": "Aluminium foil",
"hasProperty": {
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 15
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
},
"hasActiveMaterial": {
"@id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e#described",
"@type": "ActiveMaterial"
},
"skos:prefLabel": "LFP cathode",
"@id": "https://w3id.org/battinfo/spec/m6y0-tkfg-sn40-q10p#described"
},
"@id": "https://w3id.org/battinfo/spec/m6y0-tkfg-sn40-q10p",
"schema:name": "LFP cathode",
"schema:comment": "LFP cathode (96/2/2 LFP/PVDF/carbon black on Al foil)."
}
Si-Gr anode (electrode-spec)
The record ships in the installed wheel — load it as a starting point:
import json
from importlib import resources
record = json.loads(
resources.files("battinfo")
.joinpath("data/examples/electrode-spec/qw3j-we77-zzj1-ya55.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrode_spec": {
"id": "https://w3id.org/battinfo/spec/qw3j-we77-zzj1-ya55",
"short_id": "qw3jwe",
"name": "Si-Gr anode",
"active_material_kind": "silicon_graphite",
"polarity": "negative",
"grade": "AQ",
"active_material_spec_id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr",
"coating": {
"component": {
"active_material": [
{
"name": "Silicon-graphite composite",
"property": {
"mass_fraction": {
"value": 0.9,
"unit": "1"
}
},
"material_spec_id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr"
}
],
"binder": [
{
"name": "CMC",
"material_spec_id": "https://w3id.org/battinfo/spec/5k8a-bj67-7v5w-6vvd",
"property": {
"mass_fraction": {
"value": 0.05,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "Carbon black",
"material_spec_id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
"property": {
"mass_fraction": {
"value": 0.05,
"unit": "1"
}
}
}
]
}
},
"current_collector": {
"name": "Copper foil",
"property": {
"thickness": {
"value": 10,
"unit": "um"
}
}
},
"processing": {
"route": "aqueous",
"solvent": "water",
"detail": "planetary mixing, 80 degC drying, calendered to 35% porosity"
},
"manufacturer": {
"type": "Organization",
"name": "SINTEF"
},
"property": {
"loading": {
"value": 6.2,
"unit": "mg/cm2"
},
"dry_thickness": {
"value": 62,
"unit": "um"
},
"calendered_thickness": {
"value": 48,
"unit": "um"
},
"areal_capacity": {
"value": 2.8,
"unit": "mAh/cm2"
},
"porosity": {
"value": 0.35,
"unit": "1"
}
}
},
"provenance": {
"source_type": "lab",
"retrieved_at": 1786492800,
"battinfo_version": "0.7.0"
},
"notes": [
"Si-Gr anode, water-processed (CMC binder). The NMP-processed sibling of this recipe is a DIFFERENT electrode-spec: for an electrode the processing route is a design decision, so it is part of the spec identity."
]
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": [
"Description",
"schema:ProductModel",
"schema:CreativeWork"
],
"isDescriptionFor": {
"@type": [
"SiliconGraphiteElectrode",
"NegativeElectrode"
],
"hasCoating": {
"@type": "ElectrodeCoating",
"hasActiveMaterial": {
"@type": "ActiveMaterial",
"schema:name": "Silicon-graphite composite",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.9
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasBinder": {
"@type": [
"CarboxymethylCellulose",
"Binder"
],
"schema:name": "CMC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/5k8a-bj67-7v5w-6vvd"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.05
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasConductiveAdditive": {
"@type": [
"CarbonBlack",
"ConductiveAdditive"
],
"schema:name": "Carbon black",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.05
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
}
},
"hasCurrentCollector": {
"@type": [
"CurrentCollector",
"Copper",
"Foil"
],
"schema:name": "Copper foil",
"hasProperty": {
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 10
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
},
"hasProperty": [
{
"@type": [
"AreicCapacity",
"ConventionalProperty"
],
"skos:prefLabel": "AreicCapacity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 2.8
},
"schema:unitText": "mAh/cm2"
},
{
"@type": [
"CalenderedCoatingThickness",
"ConventionalProperty"
],
"skos:prefLabel": "CalenderedCoatingThickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 48
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
},
{
"@type": [
"DryCoatingThickness",
"ConventionalProperty"
],
"skos:prefLabel": "DryCoatingThickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 62
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
},
{
"@type": [
"ActiveMassLoading",
"ConventionalProperty"
],
"skos:prefLabel": "ActiveMassLoading",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 6.2
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliGramPerSquareCentiMetre"
},
{
"@type": [
"Porosity",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.35
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
],
"hasActiveMaterial": {
"@id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr#described",
"@type": "ActiveMaterial"
},
"prov:wasGeneratedBy": {
"@type": "Manufacturing",
"skos:prefLabel": "Manufacturing",
"dcterms:type": {
"@type": "schema:DefinedTerm",
"schema:termCode": "aqueous",
"schema:name": "Water-based (aqueous) processing"
},
"hasSolvent": {
"@type": "schema:ChemicalSubstance",
"schema:name": "water"
},
"schema:description": "planetary mixing, 80 degC drying, calendered to 35% porosity"
},
"skos:prefLabel": "Si-Gr anode",
"@id": "https://w3id.org/battinfo/spec/qw3j-we77-zzj1-ya55#described"
},
"@id": "https://w3id.org/battinfo/spec/qw3j-we77-zzj1-ya55",
"schema:name": "Si-Gr anode",
"schema:comment": "Si-Gr anode, water-processed (CMC binder). The NMP-processed sibling of this recipe is a DIFFERENT electrode-spec: for an electrode the processing route is a design decision, so it is part of the spec identity."
}
Graphite anode disc (16 mm) (electrode)
The record ships in the installed wheel — load it as a starting point:
import json
from importlib import resources
record = json.loads(
resources.files("battinfo")
.joinpath("data/examples/electrode/k81p-5wxb-gaph-z6ee.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrode": {
"id": "https://w3id.org/battinfo/electrode/k81p-5wxb-gaph-z6ee",
"electrode_spec_id": "https://w3id.org/battinfo/spec/d7qr-n581-74c3-7g7r",
"short_id": "k81p5w",
"property": {
"diameter": {
"value": 16,
"unit": "mm"
},
"mass": {
"value": 25.8,
"unit": "mg"
}
},
"name": "Graphite anode disc (16 mm)",
"lot_id": "ANODE-GR-001"
},
"provenance": {
"source_type": "lab",
"retrieved_at": 1781778468
},
"notes": [
"A built graphite anode disc (16 mm)."
]
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": [
"https://w3id.org/emmo/domain/battery/context",
{
"schema": "https://schema.org/",
"dcterms": "http://purl.org/dc/terms/",
"battinfo": "https://w3id.org/battinfo/"
}
],
"@type": "Electrode",
"hasProperty": [
{
"@type": [
"Diameter",
"ConventionalProperty"
],
"skos:prefLabel": "Diameter",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 16
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliMetre"
},
{
"@type": [
"Mass",
"ConventionalProperty"
],
"skos:prefLabel": "Mass",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 25.8
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliGram"
}
],
"@id": "https://w3id.org/battinfo/electrode/k81p-5wxb-gaph-z6ee",
"schema:name": "Graphite anode disc (16 mm)",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/d7qr-n581-74c3-7g7r"
},
"schema:identifier": {
"@type": "schema:PropertyValue",
"schema:name": "lot_id",
"schema:value": "ANODE-GR-001"
},
"schema:comment": "A built graphite anode disc (16 mm)."
}
Fields#
Generated from the packaged JSON Schemas — the same files battinfo validate and the registry’s publish gate enforce. Every record also carries the shared envelope (schema_version, provenance, and optional notes, funding, contributor, license). Quantities are {value, unit} maps and may also carry value_basis (Measured, Conventional, Rated, or Nominal) and conditions (the parameters under which the value holds, each itself a quantity; a qualitative condition may be value_text alone). In JSON-LD, conditions ride a measurement node the quantity isOutputOf; the voltage_reference key instead becomes a hasMetrologicalReference datum on the quantity, beside its unit. When authoring, an instance references its spec with the spec_id= kwarg; the record stores the self-describing <type>_spec_id key shown in the tables below.
electrode-spec fields#
Schema: electrode-spec.schema.json · required at top level: schema_version, electrode_spec, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentSpecIri |
yes |
|
|
→ ShortId |
||
|
string |
yes |
Human-readable electrode name / designation (e.g. ‘Si-Gr anode, aqueous’, ‘NMC811 cathode 96/2/2’). |
|
string |
Required Level-1 kind naming the ACTIVE material of this electrode, from the curated material-kind vocabulary (e.g. ‘graphite’, ‘silicon_graphite’, ‘nmc811’, ‘lfp’). Named for what it identifies: the electrode’s active material, not the electrode’s form. Required so a purchased electrode whose powder provenance is unknown is still queryable on the same aggregation axis as one built from an authored material-spec. Aliases resolve on input; an unknown kind is rejected at save time. See battinfo.electrodes.electrode_kind_keys(). |
|
|
string |
Deprecated alias of active_material_kind; accepted so existing records keep validating, normalized to active_material_kind on round-trip. |
|
|
|
Electrode polarity, authored when the design has a side to state. Never derived from the kind: which side an active material sits on is system-relative (graphite is the positive electrode of a lithium-counter half cell). Role-based cells (half / three-electrode) name electrodes by role instead. |
|
|
string |
Producer grade / design version (e.g. ‘v2’, ‘rev B’). Part of spec identity together with the producer and the electrode name. |
|
|
→ MaterialSpecIri |
Optional canonical IRI of the material-spec for this electrode’s active material, present when the powder is known and authored. Absent for a purchased electrode of known chemistry but unknown powder — ‘kind’ still carries the chemistry. |
|
|
→ material-component |
The electrode body as a single monolithic material - an uncoated metal foil or disc (lithium metal counter, zinc foil). States the material directly; there is no coating and no separate current collector, the foil is both. Alternative to |
|
|
→ electrode-coating |
Coating composition and coating-level design values. ‘component.active_material / binder / additive’ each carry a weight fraction under property.mass_fraction — the same shape a cell-spec’s inline electrode coating uses, so a composition authored here is the composition a cell reads. |
|
|
→ current-collector |
Current-collector foil: material (name and/or material_spec_id) and its thickness under property. |
|
|
→ tab |
Electrode current-collector tab: material plus its dimensions (width, thickness, length, weld_width, tape_width) under property. |
|
|
→ Processing |
||
|
→ OrgRef |
Producer of this electrode design — a vendor for a purchased electrode, or the lab that designed it for an in-house coating. Part of spec identity. |
|
|
→ OrgRef |
Supplier or vendor the item was sourced from. |
|
|
string |
Producer product / design identifier. Preferred over ‘name’ as the product half of the spec identity when present. |
|
|
→ quantitative-properties |
Electrode-level design values: areal loading (‘loading’), dry and calendered coating thickness (‘dry_thickness’ / ‘calendered_thickness’), nominal areal capacity (‘areal_capacity’), porosity, diameter / width / length. An open snake_case map — new design values need no schema change. |
|
|
string |
||
|
string |
Free-text comment. |
electrode fields#
Schema: electrode.schema.json · required at top level: schema_version, electrode, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentIri |
yes |
|
|
→ ComponentSpecIri |
yes |
Canonical IRI of the electrode-spec this batch realizes. Required: a built electrode without a design is not describable. |
|
→ ShortId |
||
|
string |
Human-readable label for this batch. |
|
|
string |
Producer / supplier lot number for a purchased electrode. |
|
|
→ ComponentIri |
Canonical IRI of the electrode this piece was cut from - the coated roll, web, or strip its siblings share. The parent is itself an electrode record (usually realizing the same spec), so genealogy chains compose: cell -> disc -> parent roll -> electrode-spec. |
|
|
string |
Label of this cut piece within its parent (e.g. ‘disc-07’, ‘strip-B’). Joins the identity seed, so pieces cut from the same parent mint distinct IRIs. |
|
|
string |
Coating batch label (e.g. ‘Si-AQ-1’). Together with the spec IRI this is the batch’s identity — the IRI is minted from the pair. |
|
|
→ OrgRef |
Supplier or vendor the item was sourced from. |
|
|
→ FlexDate |
Date this batch was coated / built. |
|
|
→ FlexDate |
Date a purchased batch was received. |
|
|
→ FlexDate |
||
|
→ quantity |
Quantity of this batch on hand or consumed (e.g. coated area in cm2, web length in m, mass in g). |
|
|
integer |
Number of discrete pieces in this batch (e.g. punched discs). |
|
|
string |
Storage conditions for this batch (e.g. ‘argon glovebox’, ‘dry room, -40 degC dew point’). |
|
|
array of → DatasetLink |
Characterization datasets for this batch (thickness maps, SEM, adhesion, half-cell checks, …). |
|
|
→ quantitative-properties |
As-built batch actuals — measured loading, measured calendered thickness, measured porosity, disc diameter, disc mass. An open snake_case map: whatever this batch was actually measured for is recordable without a schema change. |
|
|
string |
Free-text comment. |
Design notes#
The reasoning behind the model
Design vs disc. The spec is the design: composition (coating.component with active/binder/additive holders), processing route, design values, and batch statistics stated with the structured standard_deviation / sample_count fields. The instance is the physical disc or batch — the per-cell as-built figures (mass, loading, areal capacity) live here, because they were true before any test ran.
Genealogy: pieces are cut from a parent. A coating run makes one big source — a roll in a factory, a strip in the lab — and the electrodes that reach cells are cut from it. Both are electrode records: the parent carries the batch facts (batch_id, count, amount, batch statistics), and each cut piece states parent_id (the record it was cut from) and piece_id (its label within the parent, e.g. disc-07, which joins the identity seed so siblings mint distinct IRIs). Chains compose — roll → sheet → disc is two hops of the same relation — and each hop emits as prov:wasDerivedFrom, so the full lineage cell → disc → roll → electrode-spec → material-spec is walkable in the graph.
Half cells name their electrodes by role, not by polarity. A half cell has no sides to name, and in the working-electrode convention a graphite working electrode charges toward 1 V vs Li/Li+ — polarity labels would mislead. polarity is therefore authored or absent, never derived from the kind: an “LFP negative electrode” is a legitimate design (lithium-counter half cell), not a typo, and nothing warns about it.
Cells reference electrodes. Which electrode pair a cell uses follows from its cell_configuration — the polarity holders (positive_electrode / negative_electrode) for a full cell, the role holders (working_electrode / counter_electrode) for a half or three-electrode cell. A cell instance points at the physical disc inside it through working_electrode_id.
Tabs and coatings belong to the electrode. A current-collector tab (Electrode.tab) carries identity fields plus a property dict (width, thickness, weld width) and emits under hasCurrentCollectorTab. A coating carries the composition, its own properties, and double_sided — whether the current collector is coated on both sides or one; a secondary layer such as a ceramic coating is simply an additional coating holder.
The active material is named for what it is. active_material_kind names the electrode’s active material from the curated material-kind vocabulary — not kind, which on an electrode would read as its form (porous, foil, rotating-disc). The old kind spelling stays accepted as a deprecated alias and normalizes on round-trip.
Emission. The spec is an information artifact: it emits typed [Description, schema:ProductModel, schema:CreativeWork] — EMMO’s Description is the very class BatterySpecification subclasses, so the spec sits in the right family until an ElectrodeSpecification class is published (on the upstream ask list) — and its isDescriptionFor node carries the physical typing: the chemistry electrode class derived from active_material_kind (GraphiteElectrode, LithiumIronPhosphateElectrode, …), with an authored polarity stacking PositiveElectrode / NegativeElectrode on top. Role holders emit role types (WorkingElectrode, and the counter of a two-electrode half cell types as both CounterElectrode and ReferenceElectrode).