Current collectors#

How to describe current collectors: a current-collector-spec is the foil or mesh product, a current-collector instance is one physical roll or lot. Electrodes usually describe their collector inline; the standalone record is for a foil shared across designs or tracked as its own supply.

  • The spec is the foil or mesh product; an instance is one physical roll or lot.

  • The name and material/form derive the typed node: ‘Aluminium foil’ emits [CurrentCollector, Aluminium, Foil].

  • Electrodes usually embed their collector inline (current_collector holder); the standalone record is for a shared or tracked foil, cited via material_spec_id.

  • Author with create_current_collector_spec(...) / create_current_collector(spec_id=...).

Define one#

The product#

from battinfo.api import create_current_collector_spec

record = create_current_collector_spec(
    uid="vq83-2hkm-7tpn-9fdx",
    name="Aluminium foil",
    material="Al",
    form="foil",
    property={"thickness": {"value": 15, "unit": "um"}},
    source_type="datasheet",
)
{
  "schema_version": "0.2.0",
  "current_collector_spec": {
    "id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
    "short_id": "7d9k2m",
    "name": "Aluminium foil",
    "material": "Al",
    "form": "foil",
    "property": {
      "thickness": {
        "value": 15,
        "unit": "um"
      }
    }
  },
  "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": [
      "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"
    },
    "skos:prefLabel": "Aluminium foil",
    "@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5#described"
  },
  "@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
  "schema:name": "Aluminium foil"
}

A physical lot#

from battinfo.api import create_current_collector

record = create_current_collector(
    uid="tr5k-8wq2-3npx-6mvh",
    spec_id="https://w3id.org/battinfo/spec/vq83-2hkm-7tpn-9fdx",
    lot_id="AL15-2026-031",
)
{
  "schema_version": "0.2.0",
  "current_collector": {
    "id": "https://w3id.org/battinfo/current-collector/7d9k-2m4p-8t3x-6nq5",
    "current_collector_spec_id": "https://w3id.org/battinfo/spec/y9xy-kr0v-y5tn-dfj7",
    "short_id": "7d9k2m",
    "lot_id": "AL15-2026-031"
  },
  "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": "CurrentCollector",
  "@id": "https://w3id.org/battinfo/current-collector/7d9k-2m4p-8t3x-6nq5",
  "schema:isVariantOf": {
    "@id": "https://w3id.org/battinfo/spec/y9xy-kr0v-y5tn-dfj7"
  }
}

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.

Aluminium foil (current-collector-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/current-collector-spec/vkaf-f5bv-fwt2-e6yz.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "current_collector_spec": {
    "id": "https://w3id.org/battinfo/spec/vkaf-f5bv-fwt2-e6yz",
    "short_id": "vkaff5",
    "name": "Aluminium foil",
    "property": {
      "thickness": {
        "value": 15,
        "unit": "um"
      },
      "areal_mass": {
        "value": 4.05,
        "unit": "mg/cm2"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781768181
  },
  "notes": [
    "Aluminium foil cathode current collector (15 um)."
  ]
}

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": [
      "CurrentCollector",
      "Aluminium",
      "Foil"
    ],
    "schema:name": "Aluminium foil",
    "hasProperty": [
      {
        "@type": [
          "battinfo:arealMass",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "arealMass",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 4.05
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#MilliGramPerSquareCentiMetre"
      },
      {
        "@type": [
          "Thickness",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Thickness",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 15
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
      }
    ],
    "skos:prefLabel": "Aluminium foil",
    "@id": "https://w3id.org/battinfo/spec/vkaf-f5bv-fwt2-e6yz#described"
  },
  "@id": "https://w3id.org/battinfo/spec/vkaf-f5bv-fwt2-e6yz",
  "schema:name": "Aluminium foil"
}
Copper foil (current-collector-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/current-collector-spec/z25y-gab5-hd3n-qfpr.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "current_collector_spec": {
    "id": "https://w3id.org/battinfo/spec/z25y-gab5-hd3n-qfpr",
    "short_id": "z25yga",
    "name": "Copper foil",
    "property": {
      "thickness": {
        "value": 10,
        "unit": "um"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781768181
  },
  "notes": [
    "Copper foil anode current collector (10 um)."
  ]
}

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": [
      "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"
    },
    "skos:prefLabel": "Copper foil",
    "@id": "https://w3id.org/battinfo/spec/z25y-gab5-hd3n-qfpr#described"
  },
  "@id": "https://w3id.org/battinfo/spec/z25y-gab5-hd3n-qfpr",
  "schema:name": "Copper foil"
}

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.

current-collector-spec fields#

Schema: current-collector-spec.schema.json · required at top level: schema_version, current_collector_spec, provenance

Field

Type

Required

Description

id

→ ComponentSpecIri

yes

short_id

→ ShortId

name

string

yes

Product label of this current-collector design (e.g. ‘Al foil 15 um’).

material

string

Substrate material of the current collector (e.g. ‘Al’, ‘Cu’, ‘Ni’, ‘stainless steel’, ‘carbon-coated Al’).

form

foil | mesh | foam | perforated … (5 values)

Physical form of the current collector.

material_spec_id

string

property

→ quantitative-properties

Named quantity map of current-collector properties (e.g. thickness, areal_mass, width). See the property keys reference for the full list of recognised keys.

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.

current-collector fields#

Schema: current-collector.schema.json · required at top level: schema_version, current_collector, provenance

Field

Type

Required

Description

id

→ ComponentIri

yes

current_collector_spec_id

→ ComponentSpecIri

yes

IRI of the current collector-spec this physical current collector realizes.

short_id

→ ShortId

name

string

Human-readable label for this physical item (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

Inline first, standalone when shared. An electrode spec carries its collector inline (current_collector holder: name, form, thickness); that inline holder and this standalone record are the same shape, and both can cite the foil’s material-spec via material_spec_id — so a lab that later starts tracking foil lots promotes the holder to a record without re-modeling.

Emission. The name parses to a typed stack — ‘Aluminium foil’ → [CurrentCollector, Aluminium, Foil], ‘expanded mesh’ variants reach ExpandedMesh / WovenMesh / PerforatedFoil — so substrate and form are classes, not strings. On a spec the stack rides the described individual (<spec-IRI>#described) under isDescriptionFor (the spec itself is a [Description, schema:ProductModel, schema:CreativeWork]); on an instance it types the node directly.

Generated surface. create_current_collector_spec and friends wrap the shared component machinery; family identifiers use underscores (current_collector), IRI namespaces use hyphens (current-collector), and the API derives one from the other.