Materials#

How to describe a material: the manufactured product as a material spec, a physical lot or batch as a material instance, both under a curated Level-1 kind.

  • kind is required and curated: aliases resolve on input (NMC 811, LiFePO4, Si/Gr), an unknown kind is rejected at save.

  • A kind’s roles list is informative, never restrictive - the role a material plays is stated where it is used.

  • The spec is the manufactured product (Targray NMC811, grade X); the material instance is one physical lot.

  • Other records reference a material at whichever level you know - kind key, spec IRI, or lot IRI - and upgrade later without re-modeling.

Define one#

A material spec (the powder as a product)#

from battinfo.api import create_material_spec

record = create_material_spec(
    uid="7d9k-2m4p-8t3x-6nq5",
    name="NMC811 cathode powder",
    kind="nmc811",                     # Level-1 key from the curated vocabulary
    property={
        "specific_capacity": {"value": 200, "unit": "mAh/g"},
        "d50_particle_size": {"value": 10, "unit": "um"},
    },
    source_type="datasheet",
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
    "short_id": "7d9k2m",
    "name": "NMC811 cathode powder",
    "kind": "nmc811",
    "property": {
      "specific_capacity": {
        "value": 200,
        "unit": "mAh/g"
      },
      "d50_particle_size": {
        "value": 10,
        "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"
  ],
  "@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
  "schema:name": "NMC811 cathode powder",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_e877987f_3b08_4e21_8f2e_c280e6bef52f"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q121086674"
    }
  ],
  "isDescriptionFor": {
    "@type": "LithiumNickelManganeseCobaltOxide811",
    "hasProperty": [
      {
        "@type": [
          "D50ParticleSize",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "D50ParticleSize",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 10
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
      },
      {
        "@type": [
          "SpecificCapacity",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "SpecificCapacity",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 200
        },
        "schema:unitText": "mAh/g"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5#described",
    "skos:prefLabel": "NMC811 cathode powder"
  }
}

What to notice:

  • The kind resolves to the chemical-substance class IRI that types the emitted node — the genome’s aggregation axis.

A material instance (one physical lot)#

from battinfo.api import create_material

record = create_material(
    uid="y9xy-kr0v-y5tn-dfj7",
    name="NMC811 lot 2026-04",
    spec_id="https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
    source_type="lab",
)
{
  "schema_version": "0.2.0",
  "material": {
    "id": "https://w3id.org/battinfo/material/y9xy-kr0v-y5tn-dfj7",
    "material_spec_id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5",
    "short_id": "y9xykr",
    "name": "NMC811 lot 2026-04"
  },
  "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/"
    }
  ],
  "@id": "https://w3id.org/battinfo/material/y9xy-kr0v-y5tn-dfj7",
  "@type": "schema:ChemicalSubstance",
  "schema:name": "NMC811 lot 2026-04",
  "schema:isVariantOf": {
    "@id": "https://w3id.org/battinfo/spec/7d9k-2m4p-8t3x-6nq5"
  }
}

What to notice:

  • material_spec_id links the lot to its product; the lot is what an electrode batch 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.

NMC811 (material-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/material-spec/npa4-0dnw-evyh-hhdm.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm",
    "short_id": "npa40d",
    "name": "NMC811",
    "kind": "nmc811",
    "material_class": "active_material",
    "formula": "LiNi0.8Mn0.1Co0.1O2",
    "chemistry_family": "layered-oxide",
    "manufacturer": {
      "type": "Organization",
      "name": "Canrud",
      "id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
    },
    "property": {
      "specific_capacity": {
        "value": 200,
        "unit": "mAh/g",
        "value_basis": "Measured",
        "conditions": {
          "discharging_c_rate": {
            "value": 0.1,
            "unit": "C"
          },
          "lower_voltage_limit": {
            "value": 3.0,
            "unit": "V"
          },
          "upper_voltage_limit": {
            "value": 4.3,
            "unit": "V"
          },
          "temperature": {
            "value": 25,
            "unit": "degC"
          },
          "voltage_reference": {
            "value_text": "Li/Li+"
          }
        }
      },
      "true_density": {
        "value": 4.8,
        "unit": "g/cm3"
      },
      "average_voltage": {
        "value": 3.8,
        "unit": "V"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "Nickel-rich layered oxide cathode. 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"
  ],
  "@id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm",
  "schema:name": "NMC811",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_e877987f_3b08_4e21_8f2e_c280e6bef52f"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q121086674"
    }
  ],
  "schema:manufacturer": {
    "@type": "schema:Organization",
    "schema:name": "Canrud"
  },
  "isDescriptionFor": {
    "@type": "LithiumNickelManganeseCobaltOxide811",
    "schema:molecularFormula": "LiNi0.8Mn0.1Co0.1O2",
    "hasProperty": [
      {
        "@type": [
          "Voltage",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Voltage",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 3.8
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
      },
      {
        "@type": [
          "SpecificCapacity",
          "MeasuredProperty"
        ],
        "skos:prefLabel": "SpecificCapacity",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 200
        },
        "schema:unitText": "mAh/g",
        "schema:valueReference": {
          "@type": [
            "ReferenceElectrode",
            "LithiumElectrode"
          ],
          "skos:prefLabel": "Li/Li+"
        },
        "isOutputOf": {
          "@type": "BatteryMeasurement",
          "hasMeasurementParameter": [
            {
              "@type": [
                "CRate",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "discharging_c_rate",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 0.1
              },
              "schema:unitText": "C"
            },
            {
              "@type": [
                "LowerVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "lower_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 3.0
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            },
            {
              "@type": [
                "CelsiusTemperature",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "temperature",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 25
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#EMMO_36a9bf69_483b_42fd_8a0c_7ac9206320bc"
            },
            {
              "@type": [
                "UpperVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "upper_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 4.3
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            }
          ]
        }
      },
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 4.8
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/npa4-0dnw-evyh-hhdm#described",
    "skos:prefLabel": "NMC811"
  },
  "schema:comment": "Nickel-rich layered oxide cathode. Discovery-Benchmark NMC811-Graphite cells."
}
LFP (material-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/material-spec/5ms1-9jv8-hr54-mn4e.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e",
    "short_id": "5ms19j",
    "name": "LFP",
    "kind": "lfp",
    "material_class": "active_material",
    "formula": "LiFePO4",
    "chemistry_family": "olivine",
    "manufacturer": {
      "type": "Organization",
      "name": "Canrud",
      "id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
    },
    "property": {
      "specific_capacity": {
        "value": 160,
        "unit": "mAh/g",
        "value_basis": "Measured",
        "conditions": {
          "discharging_c_rate": {
            "value": 0.1,
            "unit": "C"
          },
          "lower_voltage_limit": {
            "value": 2.5,
            "unit": "V"
          },
          "upper_voltage_limit": {
            "value": 3.65,
            "unit": "V"
          },
          "temperature": {
            "value": 25,
            "unit": "degC"
          },
          "voltage_reference": {
            "value_text": "Li/Li+"
          }
        }
      },
      "true_density": {
        "value": 3.6,
        "unit": "g/cm3"
      },
      "average_voltage": {
        "value": 3.4,
        "unit": "V"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "Lithium iron phosphate cathode active material. Discovery-Benchmark LFP-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"
  ],
  "@id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e",
  "schema:name": "LFP",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_aa8e9cc4_5f66_4307_b1c8_26fac7653a90"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q3042400"
    },
    {
      "@id": "https://pubchem.ncbi.nlm.nih.gov/compound/15320824"
    },
    {
      "@id": "https://next-gen.materialsproject.org/materials/mp-19017"
    }
  ],
  "schema:manufacturer": {
    "@type": "schema:Organization",
    "schema:name": "Canrud"
  },
  "isDescriptionFor": {
    "@type": "LithiumIronPhosphate",
    "schema:molecularFormula": "LiFePO4",
    "hasProperty": [
      {
        "@type": [
          "Voltage",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Voltage",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 3.4
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
      },
      {
        "@type": [
          "SpecificCapacity",
          "MeasuredProperty"
        ],
        "skos:prefLabel": "SpecificCapacity",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 160
        },
        "schema:unitText": "mAh/g",
        "schema:valueReference": {
          "@type": [
            "ReferenceElectrode",
            "LithiumElectrode"
          ],
          "skos:prefLabel": "Li/Li+"
        },
        "isOutputOf": {
          "@type": "BatteryMeasurement",
          "hasMeasurementParameter": [
            {
              "@type": [
                "CRate",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "discharging_c_rate",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 0.1
              },
              "schema:unitText": "C"
            },
            {
              "@type": [
                "LowerVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "lower_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 2.5
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            },
            {
              "@type": [
                "CelsiusTemperature",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "temperature",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 25
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#EMMO_36a9bf69_483b_42fd_8a0c_7ac9206320bc"
            },
            {
              "@type": [
                "UpperVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "upper_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 3.65
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            }
          ]
        }
      },
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 3.6
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/5ms1-9jv8-hr54-mn4e#described",
    "skos:prefLabel": "LFP"
  },
  "schema:comment": "Lithium iron phosphate cathode active material. Discovery-Benchmark LFP-Graphite cells."
}
Graphite (material-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/material-spec/gwck-k5kf-ae1f-gfgc.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc",
    "short_id": "gwckk5",
    "name": "Graphite",
    "kind": "graphite",
    "material_class": "active_material",
    "formula": "C",
    "chemistry_family": "graphitic-carbon",
    "manufacturer": {
      "type": "Organization",
      "name": "Canrud",
      "id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
    },
    "property": {
      "specific_capacity": {
        "value": 360,
        "unit": "mAh/g",
        "value_basis": "Measured",
        "conditions": {
          "discharging_c_rate": {
            "value": 0.1,
            "unit": "C"
          },
          "lower_voltage_limit": {
            "value": 0.01,
            "unit": "V"
          },
          "upper_voltage_limit": {
            "value": 1.5,
            "unit": "V"
          },
          "temperature": {
            "value": 25,
            "unit": "degC"
          },
          "voltage_reference": {
            "value_text": "Li/Li+"
          }
        }
      },
      "true_density": {
        "value": 2.26,
        "unit": "g/cm3"
      },
      "particle_size_d50": {
        "value": 15,
        "unit": "um"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "Graphite anode active material. Grounded in the DIGIBAT Discovery-Benchmark coin-cell builds (Canrud anode)."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc",
  "schema:name": "Graphite",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_d53259a7_0d9c_48b9_a6c1_4418169df303"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q5309"
    },
    {
      "@id": "https://pubchem.ncbi.nlm.nih.gov/compound/5462310"
    },
    {
      "@id": "https://next-gen.materialsproject.org/materials/mp-48"
    }
  ],
  "schema:manufacturer": {
    "@type": "schema:Organization",
    "schema:name": "Canrud"
  },
  "isDescriptionFor": {
    "@type": "Graphite",
    "schema:molecularFormula": "C",
    "hasProperty": [
      {
        "@type": [
          "D50ParticleSize",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "D50ParticleSize",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 15
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#MicroMetre"
      },
      {
        "@type": [
          "SpecificCapacity",
          "MeasuredProperty"
        ],
        "skos:prefLabel": "SpecificCapacity",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 360
        },
        "schema:unitText": "mAh/g",
        "schema:valueReference": {
          "@type": [
            "ReferenceElectrode",
            "LithiumElectrode"
          ],
          "skos:prefLabel": "Li/Li+"
        },
        "isOutputOf": {
          "@type": "BatteryMeasurement",
          "hasMeasurementParameter": [
            {
              "@type": [
                "CRate",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "discharging_c_rate",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 0.1
              },
              "schema:unitText": "C"
            },
            {
              "@type": [
                "LowerVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "lower_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 0.01
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            },
            {
              "@type": [
                "CelsiusTemperature",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "temperature",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 25
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#EMMO_36a9bf69_483b_42fd_8a0c_7ac9206320bc"
            },
            {
              "@type": [
                "UpperVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "upper_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 1.5
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            }
          ]
        }
      },
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 2.26
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/gwck-k5kf-ae1f-gfgc#described",
    "skos:prefLabel": "Graphite"
  },
  "schema:comment": "Graphite anode active material. Grounded in the DIGIBAT Discovery-Benchmark coin-cell builds (Canrud anode)."
}
Silicon-graphite composite (material-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/material-spec/jnab-ggw9-cbn8-hhjr.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr",
    "short_id": "jnabgg",
    "name": "Silicon-graphite composite",
    "kind": "silicon_graphite",
    "material_class": "active_material",
    "formula": "Si/C",
    "property": {
      "specific_capacity": {
        "value": 450,
        "unit": "mAh/g"
      }
    }
  },
  "provenance": {
    "source_type": "literature",
    "retrieved_at": 1786492800,
    "battinfo_version": "0.7.0"
  },
  "notes": [
    "Generic Si/Gr blend (nominal 450 mAh/g); a real grade carries its manufacturer and grade."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr",
  "schema:name": "Silicon-graphite composite",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_3f061928_e90f_4414_9308_d4c843ebb79a"
  },
  "isDescriptionFor": {
    "@type": "SiliconGraphite",
    "schema:molecularFormula": "Si/C",
    "hasProperty": {
      "@type": [
        "SpecificCapacity",
        "ConventionalProperty"
      ],
      "skos:prefLabel": "SpecificCapacity",
      "hasNumericalPart": {
        "@type": "RealData",
        "hasNumberValue": 450
      },
      "schema:unitText": "mAh/g"
    },
    "@id": "https://w3id.org/battinfo/spec/jnab-ggw9-cbn8-hhjr#described",
    "skos:prefLabel": "Silicon-graphite composite"
  },
  "schema:comment": "Generic Si/Gr blend (nominal 450 mAh/g); a real grade carries its manufacturer and grade."
}
LNMO (material-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/material-spec/83bd-jmk7-2x47-s04a.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/83bd-jmk7-2x47-s04a",
    "short_id": "83bdjm",
    "name": "LNMO",
    "kind": "lnmo",
    "material_class": "active_material",
    "formula": "LiNi0.5Mn1.5O4",
    "chemistry_family": "spinel",
    "property": {
      "specific_capacity": {
        "value": 140,
        "unit": "mAh/g",
        "value_basis": "Measured",
        "conditions": {
          "discharging_c_rate": {
            "value": 0.1,
            "unit": "C"
          },
          "lower_voltage_limit": {
            "value": 3.5,
            "unit": "V"
          },
          "upper_voltage_limit": {
            "value": 4.9,
            "unit": "V"
          },
          "temperature": {
            "value": 25,
            "unit": "degC"
          },
          "voltage_reference": {
            "value_text": "Li/Li+"
          }
        }
      },
      "average_voltage": {
        "value": 4.7,
        "unit": "V"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "High-voltage spinel cathode active material (synthetic reference example)."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/83bd-jmk7-2x47-s04a",
  "schema:name": "LNMO",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_f3e7979a_e3ef_450a_8762_7d8778afe478"
  },
  "isDescriptionFor": {
    "@type": "LithiumNickelManganeseOxide",
    "schema:molecularFormula": "LiNi0.5Mn1.5O4",
    "hasProperty": [
      {
        "@type": [
          "Voltage",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Voltage",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 4.7
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
      },
      {
        "@type": [
          "SpecificCapacity",
          "MeasuredProperty"
        ],
        "skos:prefLabel": "SpecificCapacity",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 140
        },
        "schema:unitText": "mAh/g",
        "schema:valueReference": {
          "@type": [
            "ReferenceElectrode",
            "LithiumElectrode"
          ],
          "skos:prefLabel": "Li/Li+"
        },
        "isOutputOf": {
          "@type": "BatteryMeasurement",
          "hasMeasurementParameter": [
            {
              "@type": [
                "CRate",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "discharging_c_rate",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 0.1
              },
              "schema:unitText": "C"
            },
            {
              "@type": [
                "LowerVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "lower_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 3.5
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            },
            {
              "@type": [
                "CelsiusTemperature",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "temperature",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 25
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#EMMO_36a9bf69_483b_42fd_8a0c_7ac9206320bc"
            },
            {
              "@type": [
                "UpperVoltageLimit",
                "ConventionalProperty"
              ],
              "skos:prefLabel": "upper_voltage_limit",
              "hasNumericalPart": {
                "@type": "RealData",
                "hasNumberValue": 4.9
              },
              "hasMeasurementUnit": "https://w3id.org/emmo#Volt"
            }
          ]
        }
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/83bd-jmk7-2x47-s04a#described",
    "skos:prefLabel": "LNMO"
  },
  "schema:comment": "High-voltage spinel cathode active material (synthetic reference example)."
}
PVDF (material-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/material-spec/bkrw-7shb-tzbm-j664.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664",
    "short_id": "bkrw7s",
    "name": "PVDF",
    "kind": "pvdf",
    "material_class": "binder",
    "formula": "(C2H2F2)n",
    "chemistry_family": "fluoropolymer",
    "property": {
      "molar_mass": {
        "value": 534000,
        "unit": "g/mol"
      },
      "true_density": {
        "value": 1.78,
        "unit": "g/cm3"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "Polyvinylidene fluoride binder."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664",
  "schema:name": "PVDF",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_f2e48e9e_f774_4f42_939f_1fe522efb7c8"
  },
  "isDescriptionFor": {
    "@type": "PolyvinylideneFluoride",
    "schema:molecularFormula": "(C2H2F2)n",
    "hasProperty": [
      {
        "@type": [
          "MolarMass",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "MolarMass",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 534000
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerMole"
      },
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 1.78
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/bkrw-7shb-tzbm-j664#described",
    "skos:prefLabel": "PVDF"
  },
  "schema:comment": "Polyvinylidene fluoride binder."
}
Carbon black (material-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/material-spec/r5xt-4hrh-jm2k-yg4m.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
    "short_id": "r5xt4h",
    "name": "Carbon black",
    "kind": "carbon_black",
    "material_class": "conductive_additive",
    "formula": "C",
    "chemistry_family": "amorphous-carbon",
    "property": {
      "bet_surface_area": {
        "value": 62,
        "unit": "m2/g"
      },
      "true_density": {
        "value": 1.8,
        "unit": "g/cm3"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740345
  },
  "notes": [
    "Conductive carbon additive (e.g. Super P-grade)."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m",
  "schema:name": "Carbon black",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_0a5cb747_60cf_4929_a54a_712c54b49f3b"
  },
  "isDescriptionFor": {
    "@type": "CarbonBlack",
    "schema:molecularFormula": "C",
    "hasProperty": [
      {
        "@type": [
          "SpecificSurfaceArea",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "SpecificSurfaceArea",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 62
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#SquareMetrePerGram"
      },
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 1.8
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/r5xt-4hrh-jm2k-yg4m#described",
    "skos:prefLabel": "Carbon black"
  },
  "schema:comment": "Conductive carbon additive (e.g. Super P-grade)."
}
LiPF6 (material-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/material-spec/fpeg-3wg8-e6cs-2vn1.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/fpeg-3wg8-e6cs-2vn1",
    "short_id": "fpeg3w",
    "name": "LiPF6",
    "kind": "lipf6",
    "material_class": "electrolyte_salt",
    "formula": "LiPF6",
    "chemistry_family": "lithium-salt",
    "manufacturer": {
      "type": "Organization",
      "name": "Canrud",
      "id": "https://w3id.org/battinfo/organization/9rfa-w6b3-dv1x-vj4z"
    },
    "property": {
      "molar_mass": {
        "value": 151.9,
        "unit": "g/mol"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740346
  },
  "notes": [
    "Lithium hexafluorophosphate; conducting salt for organic Li-ion electrolytes. Discovery-Benchmark 1M LiPF6 EC:EMC."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/fpeg-3wg8-e6cs-2vn1",
  "schema:name": "LiPF6",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_0deb4fe8_b0c0_4e3f_8848_64435e5c0771"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q2583808"
    },
    {
      "@id": "https://pubchem.ncbi.nlm.nih.gov/compound/23688915"
    },
    {
      "@id": "https://next-gen.materialsproject.org/materials/mp-9143"
    }
  ],
  "schema:manufacturer": {
    "@type": "schema:Organization",
    "schema:name": "Canrud"
  },
  "isDescriptionFor": {
    "@type": "LithiumHexafluorophosphate",
    "schema:molecularFormula": "LiPF6",
    "hasProperty": {
      "@type": [
        "MolarMass",
        "ConventionalProperty"
      ],
      "skos:prefLabel": "MolarMass",
      "hasNumericalPart": {
        "@type": "RealData",
        "hasNumberValue": 151.9
      },
      "hasMeasurementUnit": "https://w3id.org/emmo#GramPerMole"
    },
    "@id": "https://w3id.org/battinfo/spec/fpeg-3wg8-e6cs-2vn1#described",
    "skos:prefLabel": "LiPF6"
  },
  "schema:comment": "Lithium hexafluorophosphate; conducting salt for organic Li-ion electrolytes. Discovery-Benchmark 1M LiPF6 EC:EMC."
}
EC (material-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/material-spec/efxx-b9yg-wh00-d23a.json")
    .read_text(encoding="utf-8")
)
{
  "schema_version": "0.2.0",
  "material_spec": {
    "id": "https://w3id.org/battinfo/spec/efxx-b9yg-wh00-d23a",
    "short_id": "efxxb9",
    "name": "EC",
    "kind": "ec",
    "material_class": "electrolyte_solvent",
    "formula": "C3H4O3",
    "chemistry_family": "carbonate-solvent",
    "property": {
      "molar_mass": {
        "value": 88.06,
        "unit": "g/mol"
      },
      "density": {
        "value": 1.32,
        "unit": "g/cm3"
      }
    }
  },
  "provenance": {
    "source_type": "datasheet",
    "retrieved_at": 1781740346
  },
  "notes": [
    "Ethylene carbonate; cyclic carbonate solvent."
  ]
}

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"
  ],
  "@id": "https://w3id.org/battinfo/spec/efxx-b9yg-wh00-d23a",
  "schema:name": "EC",
  "schema:sameAs": {
    "@id": "https://w3id.org/emmo/domain/chemical-substance#substance_57339d90_0553_4a96_8da9_ff6c3684e226"
  },
  "skos:exactMatch": [
    {
      "@id": "http://www.wikidata.org/entity/Q421145"
    },
    {
      "@id": "https://pubchem.ncbi.nlm.nih.gov/compound/7303"
    }
  ],
  "isDescriptionFor": {
    "@type": "EthyleneCarbonate",
    "schema:molecularFormula": "C3H4O3",
    "hasProperty": [
      {
        "@type": [
          "Density",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "Density",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 1.32
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerCubicCentiMetre"
      },
      {
        "@type": [
          "MolarMass",
          "ConventionalProperty"
        ],
        "skos:prefLabel": "MolarMass",
        "hasNumericalPart": {
          "@type": "RealData",
          "hasNumberValue": 88.06
        },
        "hasMeasurementUnit": "https://w3id.org/emmo#GramPerMole"
      }
    ],
    "@id": "https://w3id.org/battinfo/spec/efxx-b9yg-wh00-d23a#described",
    "skos:prefLabel": "EC"
  },
  "schema:comment": "Ethylene carbonate; cyclic carbonate solvent."
}

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.

material-spec fields#

Schema: material-spec.schema.json · required at top level: schema_version, material_spec, provenance

Field

Type

Required

Description

id

→ MaterialSpecIri

yes

short_id

→ ShortId

name

string

yes

Human-readable material name / grade (e.g. ‘LFP’, ‘Graphite’, ‘NMC811’, ‘PVDF’).

kind

string

Required Level-1 MaterialKind key from the curated material_kinds vocabulary (e.g. ‘graphite’, ‘lfp’, ‘nmc811’). The aggregation axis of the Battery Genome; resolves to the kind’s chemical-substance class IRI. An unknown kind is rejected at save time. See battinfo.materials.material_kind_keys().

grade

string

Manufacturer grade / product version (e.g. ‘grade X’, ‘v2’). Part of spec identity together with manufacturer and product.

material_class

active_material | binder | conductive_additive | current_collector … (13 values)

Deprecated in favor of the kind’s roles (the curated vocabulary lists the use-site slots a kind is known to fill): a single forced role is system-relative. Accepted for back-compat and still written by importers; slated for removal at the next record-shape version.

electrode_polarity

positive | negative | none

Deprecated, do not author: polarity is an electrode property, never a material’s — state it on the electrode or through the cell’s holders. Accepted only so existing records keep validating.

formula

string

Chemical formula or idealized composition (e.g. ‘LiFePO4’, ‘C’, ‘Zn’, ‘(C2H2F2)n’).

chemistry_family

string

Coarse chemistry family label (e.g. ‘olivine’, ‘layered-oxide’, ‘spinel’, ‘graphitic-carbon’).

emmo_type

string

Optional EMMO/domain-battery class label or IRI for this material; informs JSON-LD @type.

cas_number

string

CAS Registry Number, when applicable.

manufacturer

→ OrgRef

Manufacturer of the item.

supplier

→ OrgRef

Supplier or vendor the item was sourced from.

product_id

string

Manufacturer / supplier product or grade identifier.

composition

→ Composition

Structured derivation of this grade: base material, coatings, dopants, and constituents.

property

→ quantitative-properties

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

description

string

Longer free-text description of the material.

comment

string

Free-text comment.

material fields#

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

Field

Type

Required

Description

id

→ MaterialIri

yes

material_spec_id

→ MaterialSpecIri

yes

IRI of the material-spec this physical lot realizes.

short_id

→ ShortId

name

string

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

lot_id

string

Manufacturer / supplier lot or batch number.

batch_id

string

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

supplier

→ OrgRef

Supplier or vendor the item was sourced from.

received_date

→ FlexDate

Date the lot was received (YYYY, YYYY-MM, or YYYY-MM-DD, or Unix timestamp).

opened_date

→ FlexDate

Date this lot was first opened / put into use.

expires_at

→ FlexDate

Expiry or retest date for the lot (YYYY, YYYY-MM, or YYYY-MM-DD, or Unix timestamp).

amount

→ quantity

Quantity of this lot on hand or consumed (e.g. mass in g, volume in mL).

storage

string

Storage conditions for this lot (e.g. ‘argon glovebox’, ‘dry room, -40 degC dew point’).

processing

→ Processing

datasets

array of → DatasetLink

Characterization datasets for this material lot (XRD, SEM, ICP, PSD, …).

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

Why three levels. The kind (Level 1) is a curated vocabulary, not a record type — if generic materials were records, the corpus would grow fifty graphites. Level 2 (material-spec) is a manufactured product; Level 3 (material) is a physical lot. This mirrors cells: chemistry/format vocabulary above cell-spec above cell.

The kind’s semantic identity is its chemical-substance ontology class (chemsub), verified per release; the battinfo key is the ergonomic handle. Optional external anchors (wikidata_qid, inchikey, pubchem_cid, mp_id, cas_rn) each emit as a skos:exactMatch link and are populated only where verified — absent means unverified, never guessed. Kinds may carry curated, citable reference_properties (for example a theoretical specific capacity) that the genome compares reported distributions against.

Why roles is a list, and informative only. Roles are system-relative: FEC is both co-solvent and additive, CMC both binder and thickener, and which electrode an active material serves depends on the cell (graphite is the positive electrode of a lithium-counter half cell). So the list means “known to fill these use-site slots”, a use outside it is never an error, and the role a material actually plays is stated where it is used — coating role slots, electrolyte constituent slots, or the component spec that references it. active_material is the one load-bearing role: it gates electrode kinds and anchors reference properties. An empty list is honest too: NMP fills no composition slot (a processing solvent), which its roles_note says.

The embedded ↔ standalone bridge. A material described inline in a composition can be lifted to a standalone spec (material_spec_from_component) and a cell’s inline holders decomposed and de-duplicated (extract_material_specs), so starting embedded never blocks graduating to first-class records.

Two deprecated record fields. electrode_polarity is deprecated and has no authoring path: polarity is an electrode property, never a material’s — the schema accepts the key only so existing records keep validating. material_class is deprecated in favor of the kind’s roles: a single forced role is system-relative, and the kind carries strictly better information; the field stays accepted (importers still write it) until the next record-shape version.

Governance: the vocabulary changes by PR only; tests pin that each kind’s emmo class resolves in the bundled context and names the same substance as its chemsub anchor.

The spec describes; the substance node carries the chemistry. A material spec emits as [Description, schema:ProductModel, schema:CreativeWork] (no MaterialSpecification class is published yet - upstream ask), with the substance node - chemsub class, formula, properties - on the described individual (<spec-IRI>#described) under isDescriptionFor, read the same way as a cell spec’s described battery. The schema:sameAs/skos:exactMatch identity anchors are catalogue facts and ride the spec node itself (skos:exactMatch is symmetric and transitive - on the described substance it would conflate every supplier’s grade through the shared Wikidata IRI). Material lots are physical and keep their typing.