Electrolytes#
How to describe an electrolyte: the formulation as an electrolyte spec (its family and its composition, assembled from material-specs), a mixed batch as an electrolyte instance.
family(organic, aqueous, …) is required.The composition is assembled from materials:
salt,solvent_mixture.component[], andadditive[]each cite a material-spec by IRI.The spec is the formulation; the electrolyte instance is one mixed batch.
Define one#
An electrolyte spec (the formulation)#
from battinfo.api import create_electrolyte_spec
# Every constituent can cite its material-spec by IRI, so the formulation
# is assembled from materials, never retyped — the salt's ions and
# chemistry follow from its material identity.
record = create_electrolyte_spec(
uid="0rp6-kncv-cyem-qwcd",
name="1M LiPF6 in EC:EMC 3:7 + 2% VC",
family="organic",
salt={
"name": "LiPF6",
"material_spec_id": "https://w3id.org/battinfo/spec/t4wz-ff8s-6vp6-af48",
"property": {"concentration": {"value": 1.0, "unit": "mol/L"}},
},
# One solvent component for a pure solvent, a list for a mixture.
solvent=[
{
"name": "EC",
"material_spec_id": "https://w3id.org/battinfo/spec/xcv1-hpy1-b0bw-z5s2",
"property": {"volume_fraction": {"value": 0.3, "unit": "1"}},
},
{
"name": "EMC",
"material_spec_id": "https://w3id.org/battinfo/spec/7p3d-2e22-7yae-spyb",
"property": {"volume_fraction": {"value": 0.7, "unit": "1"}},
},
],
additive=[
{
"name": "VC",
"material_spec_id": "https://w3id.org/battinfo/spec/s6y8-5mne-94gx-e5ve",
"property": {"mass_fraction": {"value": 0.02, "unit": "1"}},
}
],
property={"conductivity": {"value": 10.0, "unit": "mS/cm"}},
source_type="datasheet",
)
{
"schema_version": "0.2.0",
"electrolyte_spec": {
"id": "https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd",
"short_id": "0rp6kn",
"name": "1M LiPF6 in EC:EMC 3:7 + 2% VC",
"family": "organic",
"salt": {
"name": "LiPF6",
"material_spec_id": "https://w3id.org/battinfo/spec/t4wz-ff8s-6vp6-af48",
"property": {
"concentration": {
"value": 1.0,
"unit": "mol/L"
}
}
},
"solvent": [
{
"name": "EC",
"material_spec_id": "https://w3id.org/battinfo/spec/xcv1-hpy1-b0bw-z5s2",
"property": {
"volume_fraction": {
"value": 0.3,
"unit": "1"
}
}
},
{
"name": "EMC",
"material_spec_id": "https://w3id.org/battinfo/spec/7p3d-2e22-7yae-spyb",
"property": {
"volume_fraction": {
"value": 0.7,
"unit": "1"
}
}
}
],
"additive": [
{
"name": "VC",
"material_spec_id": "https://w3id.org/battinfo/spec/s6y8-5mne-94gx-e5ve",
"property": {
"mass_fraction": {
"value": 0.02,
"unit": "1"
}
}
}
],
"property": {
"conductivity": {
"value": 10.0,
"unit": "mS/cm"
}
}
},
"provenance": {
"source_type": "datasheet",
"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": "OrganicElectrolyte",
"hasSolute": {
"@type": [
"LithiumHexafluorophosphate",
"Solute"
],
"schema:name": "LiPF6",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/t4wz-ff8s-6vp6-af48"
},
"hasProperty": {
"@type": [
"AmountConcentration",
"ConventionalProperty"
],
"skos:prefLabel": "AmountConcentration",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 1.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MolePerLitre"
}
},
"hasSolvent": [
{
"@type": [
"EthyleneCarbonate",
"Solvent"
],
"schema:name": "EC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/xcv1-hpy1-b0bw-z5s2"
},
"hasProperty": {
"@type": [
"VolumeFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.3
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
{
"@type": [
"EthylMethylCarbonate",
"Solvent"
],
"schema:name": "EMC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/7p3d-2e22-7yae-spyb"
},
"hasProperty": {
"@type": [
"VolumeFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.7
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
}
],
"hasAdditive": {
"@type": [
"VinyleneCarbonate",
"ElectrolyteAdditive"
],
"schema:name": "VC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/s6y8-5mne-94gx-e5ve"
},
"hasProperty": {
"@type": [
"MassFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.02
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
"hasProperty": {
"@type": [
"ElectrolyticConductivity",
"ConventionalProperty"
],
"skos:prefLabel": "ElectrolyticConductivity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 10.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliSiemensPerCentiMetre"
},
"skos:prefLabel": "1M LiPF6 in EC:EMC 3:7 + 2% VC",
"@id": "https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd#described"
},
"@id": "https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd",
"schema:name": "1M LiPF6 in EC:EMC 3:7 + 2% VC"
}
What to notice:
The node types by its family (
OrganicElectrolyte), and the composition emits as typed constituents: the salt underhasSolute(itself EMMO-typed, e.g.LithiumHexafluorophosphate), the solvents underhasSolvent, the additive underhasAdditive.Every constituent cites its material-spec by IRI, so the formulation is assembled from materials, never retyped.
An electrolyte (one mixed batch)#
from battinfo.api import create_electrolyte
record = create_electrolyte(
uid="me0t-k16f-eh5y-rq0k",
spec_id="https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd",
)
{
"schema_version": "0.2.0",
"electrolyte": {
"id": "https://w3id.org/battinfo/electrolyte/me0t-k16f-eh5y-rq0k",
"electrolyte_spec_id": "https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd",
"short_id": "me0tk1"
},
"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": "ElectrolyteSolution",
"@id": "https://w3id.org/battinfo/electrolyte/me0t-k16f-eh5y-rq0k",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/0rp6-kncv-cyem-qwcd"
}
}
What to notice:
spec_idcarries the formulation; the batch is what a cell build actually consumed.
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.
1M LiPF6 in EC:EMC 3:7 (electrolyte-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/electrolyte-spec/gpkh-74nj-6sdb-vcsc.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrolyte_spec": {
"id": "https://w3id.org/battinfo/spec/gpkh-74nj-6sdb-vcsc",
"short_id": "gpkh74",
"name": "1M LiPF6 in EC:EMC 3:7",
"family": "organic",
"solvent": [
{
"name": "EC",
"material_spec_id": "https://w3id.org/battinfo/spec/efxx-b9yg-wh00-d23a",
"property": {
"volume_fraction": {
"value": 0.3,
"unit": "1"
}
}
},
{
"name": "EMC",
"material_spec_id": "https://w3id.org/battinfo/spec/hy9g-22sd-czdb-nmm4",
"property": {
"volume_fraction": {
"value": 0.7,
"unit": "1"
}
}
}
],
"salt": {
"name": "LiPF6",
"material_spec_id": "https://w3id.org/battinfo/spec/fpeg-3wg8-e6cs-2vn1",
"property": {
"concentration": {
"value": 1.0,
"unit": "mol/L"
}
}
},
"property": {
"conductivity": {
"value": 10.0,
"unit": "mS/cm"
}
},
"manufacturer": {
"type": "Organization",
"name": "Canrud",
"id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781768181
},
"notes": [
"Organic Li-ion electrolyte, 1M LiPF6 in EC:EMC 3:7 v/v. Discovery-Benchmark electrolyte (Canrud)."
]
}
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": "OrganicElectrolyte",
"hasSolute": {
"@type": [
"LithiumHexafluorophosphate",
"Solute"
],
"schema:name": "LiPF6",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/fpeg-3wg8-e6cs-2vn1"
},
"hasProperty": {
"@type": [
"AmountConcentration",
"ConventionalProperty"
],
"skos:prefLabel": "AmountConcentration",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 1.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MolePerLitre"
}
},
"hasSolvent": [
{
"@type": [
"EthyleneCarbonate",
"Solvent"
],
"schema:name": "EC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/efxx-b9yg-wh00-d23a"
},
"hasProperty": {
"@type": [
"VolumeFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.3
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
},
{
"@type": [
"EthylMethylCarbonate",
"Solvent"
],
"schema:name": "EMC",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/hy9g-22sd-czdb-nmm4"
},
"hasProperty": {
"@type": [
"VolumeFraction",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.7
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
}
}
],
"hasProperty": {
"@type": [
"ElectrolyticConductivity",
"ConventionalProperty"
],
"skos:prefLabel": "ElectrolyticConductivity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 10.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliSiemensPerCentiMetre"
},
"skos:prefLabel": "1M LiPF6 in EC:EMC 3:7",
"@id": "https://w3id.org/battinfo/spec/gpkh-74nj-6sdb-vcsc#described"
},
"@id": "https://w3id.org/battinfo/spec/gpkh-74nj-6sdb-vcsc",
"schema:name": "1M LiPF6 in EC:EMC 3:7"
}
7M KOH in H2O (electrolyte-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/electrolyte-spec/gzt2-hrqq-gsfn-sp94.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"electrolyte_spec": {
"id": "https://w3id.org/battinfo/spec/gzt2-hrqq-gsfn-sp94",
"short_id": "gzt2hr",
"name": "7M KOH in H2O",
"family": "aqueous",
"solvent": {
"name": "Water"
},
"salt": {
"name": "KOH",
"material_spec_id": "https://w3id.org/battinfo/spec/s9h8-dfbw-zs4k-2qk8",
"property": {
"concentration": {
"value": 7.0,
"unit": "mol/L"
}
}
},
"property": {
"conductivity": {
"value": 600.0,
"unit": "mS/cm"
}
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781768181
},
"notes": [
"Aqueous alkaline electrolyte, 7M KOH in water (e.g. Zn-MnO2 / Zn-air)."
]
}
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": "AqueousElectrolyte",
"hasSolute": {
"@type": [
"PotassiumHydroxide",
"Solute"
],
"schema:name": "KOH",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/s9h8-dfbw-zs4k-2qk8"
},
"hasProperty": {
"@type": [
"AmountConcentration",
"ConventionalProperty"
],
"skos:prefLabel": "AmountConcentration",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 7.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MolePerLitre"
}
},
"hasSolvent": {
"@type": "Solvent",
"schema:name": "Water"
},
"hasProperty": {
"@type": [
"ElectrolyticConductivity",
"ConventionalProperty"
],
"skos:prefLabel": "ElectrolyticConductivity",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 600.0
},
"hasMeasurementUnit": "https://w3id.org/emmo#MilliSiemensPerCentiMetre"
},
"skos:prefLabel": "7M KOH in H2O",
"@id": "https://w3id.org/battinfo/spec/gzt2-hrqq-gsfn-sp94#described"
},
"@id": "https://w3id.org/battinfo/spec/gzt2-hrqq-gsfn-sp94",
"schema:name": "7M KOH in H2O"
}
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.
electrolyte-spec fields#
Schema: electrolyte-spec.schema.json · required at top level: schema_version, electrolyte_spec, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentSpecIri |
yes |
|
|
→ ShortId |
||
|
string |
yes |
Human-readable name of this formulation (e.g. ‘LP57 + 2% VC’). |
|
→ family |
yes |
Broad electrolyte class. |
|
→ salt |
Conducting salt (e.g. LiPF6), with concentration under its property map. |
|
|
→ solvent |
Solvent component(s): a single component object for a pure solvent, or an array for a mixture. Each component’s fraction lives under its property map (volume_fraction v/v or mass_fraction w/w - one basis per formulation). |
|
|
→ solvent_mixture |
Deprecated alias of solvent (its {component: […]} wrapper form); accepted so existing records keep validating, normalized to solvent on round-trip. |
|
|
→ additive |
Functional additives (e.g. VC, FEC), each with its fraction under property. |
|
|
→ quantitative-properties |
Named quantity map of technical properties (snake_case key to value+unit quantity). |
|
|
→ OrgRef |
Manufacturer of the item. |
|
|
→ OrgRef |
Supplier or vendor the item was sourced from. |
|
|
string |
Manufacturer or supplier product/grade identifier. |
|
|
string |
Free-text comment. |
electrolyte fields#
Schema: electrolyte.schema.json · required at top level: schema_version, electrolyte, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentIri |
yes |
|
|
→ ComponentSpecIri |
yes |
IRI of the electrolyte-spec this physical electrolyte realizes. |
|
→ ShortId |
||
|
string |
Human-readable label for this physical lot (e.g. a lab inventory id). |
|
|
string |
Manufacturer or supplier lot number. |
|
|
string |
Internal lab batch identifier, when different from the supplier lot. |
|
|
→ OrgRef |
Supplier or vendor the item was sourced from. |
|
|
→ FlexDate |
Date this item was manufactured. |
|
|
array of → DatasetLink |
Characterization datasets recorded for this physical item. |
|
|
→ quantitative-properties |
Named quantity map of technical properties (snake_case key to value+unit quantity). |
|
|
string |
Free-text comment. |
Design notes#
The reasoning behind the model
Composition is assembled, never retyped. salt + solvent + additive[] each reference a material-spec by IRI, so an organic 1M LiPF₆ EC:EMC 3:7 and an aqueous 7M KOH are built from the LiPF6/EC/EMC/KOH material-specs. Each constituent carries its own fraction or concentration under property. The salt’s ions and chemistry follow from its material identity (the kind resolves to the chemical-substance class); the old cation/anion strings stay accepted as deprecated keys, never taught.
One solvent or many. solvent takes a single component object for a pure solvent and a list for a mixture — no wrapper level. The old solvent_mixture: {component: [...]} spelling stays accepted as a deprecated alias and normalizes to solvent on round-trip.
Emission follows the composition. The spec is an information artifact — it types [Description, schema:ProductModel, schema:CreativeWork], and the physical typing rides the described individual (<spec-IRI>#described) under isDescriptionFor: the generic ElectrolyteSolution for a minimal spec, the family class (OrganicElectrolyte, AqueousElectrolyte) for a full formulation, with constituents typed under hasSolute / hasSolvent / hasAdditive.
Authoring is first-class: create_electrolyte_spec(...) / create_electrolyte(...) take the composition fields (family=, salt=, solvent=, additive=) as plain keyword arguments.