Separators#
How to describe separators: a separator-spec is the membrane product (Celgard 2500), a separator instance is one physical roll or lot. A cell references the spec through separator_spec_id, or describes a one-off inline on its holder.
The spec is the membrane product; a separator instance is one physical roll or lot.
materialis the bulk polymer (‘PP’, ‘PE’, ‘cellulose’);structuresays how it is layered (monolayer, trilayer, …).material_spec_idcites a standalone material-spec when the membrane material is itself a record.Author with
create_separator_spec(...)/create_separator(spec_id=...).
Define one#
The product#
from battinfo.api import create_separator_spec
record = create_separator_spec(
uid="6nec-h262-tthy-4rnt",
name="Celgard 2500",
material="PP",
structure="monolayer",
property={
"thickness": {"value": 25, "unit": "um"},
"porosity": {"value": 0.55, "unit": "1"},
},
manufacturer="Celgard",
source_type="datasheet",
)
{
"schema_version": "0.2.0",
"separator_spec": {
"id": "https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt",
"short_id": "6nech2",
"name": "Celgard 2500",
"material": "PP",
"structure": "monolayer",
"property": {
"thickness": {
"value": 25,
"unit": "um"
},
"porosity": {
"value": 0.55,
"unit": "1"
}
},
"manufacturer": {
"type": "Organization",
"name": "Celgard"
}
},
"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": [
"Polypropylene",
"Separator"
],
"schema:name": "PP",
"hasProperty": [
{
"@type": [
"Porosity",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.55
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
},
{
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 25
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
],
"skos:prefLabel": "Celgard 2500",
"@id": "https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt#described"
},
"@id": "https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt",
"schema:name": "Celgard 2500"
}
A physical lot#
from battinfo.api import create_separator
record = create_separator(
uid="p2vx-4nq7-8mtk-3fhd",
spec_id="https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt",
lot_id="CG25-2026-114",
)
{
"schema_version": "0.2.0",
"separator": {
"id": "https://w3id.org/battinfo/separator/7d9k-2m4p-8t3x-6nq5",
"separator_spec_id": "https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt",
"short_id": "7d9k2m",
"lot_id": "CG25-2026-114"
},
"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": "Separator",
"@id": "https://w3id.org/battinfo/separator/7d9k-2m4p-8t3x-6nq5",
"schema:isVariantOf": {
"@id": "https://w3id.org/battinfo/spec/6nec-h262-tthy-4rnt"
}
}
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.
Celgard 2400 (separator-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/separator-spec/wgym-4xfa-pws1-ek1b.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"separator_spec": {
"id": "https://w3id.org/battinfo/spec/wgym-4xfa-pws1-ek1b",
"short_id": "wgym4x",
"name": "Celgard 2400",
"material": "polypropylene",
"structure": "monolayer",
"property": {
"thickness": {
"value": 25,
"unit": "um"
},
"porosity": {
"value": 0.41,
"unit": "1"
}
},
"manufacturer": {
"type": "Organization",
"name": "Celgard",
"id": "https://w3id.org/battinfo/organization/9jcc-71jq-m4vk-r8jm"
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781768181
},
"notes": [
"Celgard 2400 monolayer PP separator. Discovery-Benchmark cells use Celgard separators."
]
}
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": [
"Polypropylene",
"Separator"
],
"schema:name": "polypropylene",
"hasProperty": [
{
"@type": [
"Porosity",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.41
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
},
{
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 25
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
],
"skos:prefLabel": "Celgard 2400",
"@id": "https://w3id.org/battinfo/spec/wgym-4xfa-pws1-ek1b#described"
},
"@id": "https://w3id.org/battinfo/spec/wgym-4xfa-pws1-ek1b",
"schema:name": "Celgard 2400"
}
Ceramic-coated PE (separator-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/separator-spec/v94j-jm2h-t8d1-t5a6.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"separator_spec": {
"id": "https://w3id.org/battinfo/spec/v94j-jm2h-t8d1-t5a6",
"short_id": "v94jjm",
"name": "Ceramic-coated PE",
"material": "polyethylene",
"structure": "monolayer",
"coating": "Al2O3",
"property": {
"thickness": {
"value": 20,
"unit": "um"
},
"porosity": {
"value": 0.42,
"unit": "1"
}
}
},
"provenance": {
"source_type": "datasheet",
"retrieved_at": 1781768181
},
"notes": [
"Ceramic (Al2O3) coated PE separator for higher thermal stability."
]
}
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": [
"Polyethylene",
"Separator"
],
"schema:name": "polyethylene",
"hasProperty": [
{
"@type": [
"Porosity",
"ConventionalProperty"
],
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 0.42
},
"hasMeasurementUnit": "https://w3id.org/emmo#EMMO_5ebd5e01_0ed3_49a2_a30d_cd05cbe72978"
},
{
"@type": [
"Thickness",
"ConventionalProperty"
],
"skos:prefLabel": "Thickness",
"hasNumericalPart": {
"@type": "RealData",
"hasNumberValue": 20
},
"hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
}
],
"skos:prefLabel": "Ceramic-coated PE",
"@id": "https://w3id.org/battinfo/spec/v94j-jm2h-t8d1-t5a6#described"
},
"@id": "https://w3id.org/battinfo/spec/v94j-jm2h-t8d1-t5a6",
"schema:name": "Ceramic-coated PE"
}
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.
separator-spec fields#
Schema: separator-spec.schema.json · required at top level: schema_version, separator_spec, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentSpecIri |
yes |
|
|
→ ShortId |
||
|
string |
yes |
Human-readable name of this separator design (e.g. ‘Celgard 2325’). |
|
string |
Bulk separator material (e.g. ‘PP’, ‘PE’, ‘cellulose’). |
|
|
|
Physical layer structure of the separator membrane. |
|
|
string |
Surface coating applied to the base membrane, e.g. ‘Al2O3’, ‘SiO2’, ‘PVDF’, ‘ceramic’. |
|
|
string |
||
|
→ quantitative-properties |
Named quantity map of separator properties (e.g. thickness, porosity, gurley_number, ionic_conductivity). See the property keys reference for the full list of recognised keys. |
|
|
→ 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. |
separator fields#
Schema: separator.schema.json · required at top level: schema_version, separator, provenance
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ ComponentIri |
yes |
|
|
→ ComponentSpecIri |
yes |
IRI of the separator-spec this physical separator realizes. |
|
→ ShortId |
||
|
string |
Human-readable label for this physical item (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
Generated surface. create_separator_spec, save_separator_spec, query_separator_specs, template_separator_spec and the bare-name instance equivalents are thin wrappers over the shared component machinery (create_component_spec("separator", ...) underneath) — one registry entry per family, no divergent code paths.
Coatings are a holder. A ceramic-coated separator states its coating under coating (the same holder shape an electrode coating uses); CeramicCoating is a published class and types the node.