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[], and additive[] 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 under hasSolute (itself EMMO-typed, e.g. LithiumHexafluorophosphate), the solvents under hasSolvent, the additive under hasAdditive.

  • 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_id carries 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

id

→ ComponentSpecIri

yes

short_id

→ ShortId

name

string

yes

Human-readable name of this formulation (e.g. ‘LP57 + 2% VC’).

family

→ family

yes

Broad electrolyte class.

salt

→ salt

Conducting salt (e.g. LiPF6), with concentration under its property map.

solvent

→ 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

→ solvent_mixture

Deprecated alias of solvent (its {component: […]} wrapper form); accepted so existing records keep validating, normalized to solvent on round-trip.

additive

→ additive

Functional additives (e.g. VC, FEC), each with its fraction under property.

property

→ quantitative-properties

Named quantity map of technical properties (snake_case key to value+unit quantity).

manufacturer

→ OrgRef

Manufacturer of the item.

supplier

→ OrgRef

Supplier or vendor the item was sourced from.

product_id

string

Manufacturer or supplier product/grade identifier.

comment

string

Free-text comment.

electrolyte fields#

Schema: electrolyte.schema.json · required at top level: schema_version, electrolyte, provenance

Field

Type

Required

Description

id

→ ComponentIri

yes

electrolyte_spec_id

→ ComponentSpecIri

yes

IRI of the electrolyte-spec this physical electrolyte realizes.

short_id

→ ShortId

name

string

Human-readable label for this physical lot (e.g. a lab inventory id).

lot_id

string

Manufacturer or supplier lot number.

batch_id

string

Internal lab batch identifier, when different from the supplier lot.

supplier

→ OrgRef

Supplier or vendor the item was sourced from.

manufactured_at

→ FlexDate

Date this item was manufactured.

datasets

array of → DatasetLink

Characterization datasets recorded for this physical item.

property

→ quantitative-properties

Named quantity map of technical properties (snake_case key to value+unit quantity).

comment

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.