Organizations#
How to describe an organization — the manufacturers, labs, and publishers other records point at.
Identity is the
same_asregistry link (ROR, Wikidata); the body carries the display name and its variants.Other records point here:
manufacturer.idon specs, publisher on datasets.An
editorialblock records curation decisions (for example, supersession on a name change).
Define one#
A manufacturer#
from battinfo.api import create_organization
record = create_organization(
name="Example Instruments",
type="Manufacturer",
legal_name="Example Instruments GmbH",
url="https://www.example-instruments.test",
same_as=["https://ror.org/000000000"],
location={"address_country": "DE", "address_locality": "Ulm"},
description="Fictional bench-equipment manufacturer for this example.",
source_url="https://www.example-instruments.test",
retrieved_at=1750000000,
)
{
"schema_version": "0.2.0",
"organization": {
"id": "https://w3id.org/battinfo/organization/7d9k-2m4p-8t3x-6nq5",
"short_id": "7d9k2m",
"name": "Example Instruments",
"type": "Manufacturer",
"legal_name": "Example Instruments GmbH",
"url": "https://www.example-instruments.test",
"same_as": [
"https://ror.org/000000000"
],
"location": {
"address_country": "DE",
"address_locality": "Ulm"
},
"description": "Fictional bench-equipment manufacturer for this example."
},
"provenance": {
"source_type": "manual",
"retrieved_at": 1750000000,
"battinfo_version": "0.7.0",
"source_url": "https://www.example-instruments.test"
}
}
Emitted by record_to_jsonld, hosted-context mode.
{
"@context": "https://w3id.org/battinfo/context/records/v1.json",
"@type": "schema:Organization",
"@id": "https://w3id.org/battinfo/organization/7d9k-2m4p-8t3x-6nq5",
"schema:name": "Example Instruments",
"schema:legalName": "Example Instruments GmbH",
"schema:additionalType": "Manufacturer",
"schema:url": "https://www.example-instruments.test",
"schema:sameAs": {
"@id": "https://ror.org/000000000"
},
"schema:address": {
"@type": "schema:PostalAddress",
"schema:addressCountry": "DE",
"schema:addressLocality": "Ulm"
},
"schema:description": "Fictional bench-equipment manufacturer for this example.",
"dcterms:source": {
"@type": "prov:Entity",
"dcterms:type": "manual",
"prov:hadPrimarySource": {
"@id": "https://www.example-instruments.test"
},
"prov:generatedAtTime": "2025-06-15T15:06:40+00:00"
}
}
What to notice:
create_organizationmints the IRI deterministically from the normalized name — creating “A123 Systems” twice lands on the same record.Pure schema.org emission (
schema:Organization, withCorporation/ResearchOrganization/… stacked when the type IS a schema.org class);same_ascarries the Wikidata/ROR identity anchors.
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.
A123 Systems (organization)
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/organization/A123.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"organization": {
"id": "https://w3id.org/battinfo/organization/8z6j-n7vw-e73w-smh7",
"short_id": "8z6jn7",
"type": "Manufacturer",
"name": "A123 Systems",
"url": "https://www.a123systems.com",
"same_as": [
"https://www.wikidata.org/wiki/Q279389"
],
"location": {
"address_country": "US",
"address_region": "Massachusetts"
},
"description": "Lithium iron phosphate cell and battery system manufacturer.",
"legal_name": "A123 Systems LLC",
"alternate_name": [
"A123"
]
},
"provenance": {
"source_type": "manual",
"source_url": "https://www.a123systems.com",
"retrieved_at": 1750000000
}
}
Celgard (organization)
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/organization/Celgard.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"organization": {
"id": "https://w3id.org/battinfo/organization/9jcc-71jq-m4vk-r8jm",
"short_id": "9jcc71",
"type": "Manufacturer",
"name": "Celgard",
"description": "Separator manufacturer (microporous polyolefin membranes) referenced in the Discovery-Benchmark cells.",
"url": "https://www.celgard.com"
},
"provenance": {
"source_type": "manual",
"retrieved_at": 1750000000
}
}
Empa (organization)
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/organization/EMPA.json")
.read_text(encoding="utf-8")
)
{
"schema_version": "0.2.0",
"organization": {
"id": "https://w3id.org/battinfo/organization/mtf8-84d1-addg-nnvv",
"short_id": "mtf884",
"type": "ResearchOrganization",
"name": "Empa",
"url": "https://www.empa.ch",
"same_as": [
"https://ror.org/02x681a42",
"https://www.wikidata.org/wiki/Q683116"
],
"location": {
"address_country": "CH",
"address_locality": "Dübendorf"
},
"description": "Swiss Federal Laboratories for Materials Science and Technology, an interdisciplinary research institute of the ETH Domain with battery materials and electrochemistry activity.",
"legal_name": "Swiss Federal Laboratories for Materials Science and Technology",
"alternate_name": [
"EMPA",
"Empa"
]
},
"provenance": {
"source_type": "manual",
"source_url": "https://www.empa.ch",
"retrieved_at": 1750000000
}
}
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.
organization fields#
Schema: organization.schema.json · required at top level: schema_version, organization, provenance
The organization block:
Field |
Type |
Required |
Description |
|---|---|---|---|
|
→ OrganizationIri |
yes |
Canonical IRI of this organization record. |
|
→ ShortId |
||
|
|
Organization kind (schema.org type). |
|
|
string |
yes |
Current preferred name of the organization. |
|
string |
DEPRECATED alias of |
|
|
string or array of string |
DEPRECATED alias of |
|
|
string |
Official website URL. |
|
|
string or array of string |
Canonical external IRIs (Wikidata, ROR, GRID, LEI) that identify this organization. |
|
|
object |
Headquarters or principal location. |
|
|
string |
DEPRECATED alias of |
|
|
string |
DEPRECATED alias of |
|
|
string |
Short description of the organization. |
|
|
→ OrganizationIri or object |
DEPRECATED alias of |
|
|
string |
Full legal name, if different from name. |
|
|
string or array of string |
Former names, abbreviations, or brand names (e.g. ‘LG Chem’ for LG Energy Solution). |
|
|
string |
Year or ISO 8601 date the organization was founded. |
|
|
string |
Year or ISO 8601 date the organization was dissolved, if applicable. |
|
|
→ OrganizationIri or object |
Parent organization, if this is a subsidiary or division. |
Top-level editorial: Internal editorial metadata — not forwarded to the registry semantic payload.
Design notes#
The reasoning behind the model
Identity is the whole job. An organization record exists so other records can point at one thing: manufacturer on a spec, publisher and funders on a dataset, supplier on equipment. New IRIs mint deterministically from the normalized name, so independently created records for the same organization collate instead of duplicating; same_as carries the external anchors (Wikidata, ROR, GRID, LEI) that make the identity verifiable beyond the registry.
The one pure schema.org family. Everything an organization record says already has a home in schema.org — name, legal name, address, founding date, parent organization — so the JSON-LD emits a plain schema:Organization node with no EMMO terms and nothing minted. Where the type value is itself a schema.org class (Corporation, ResearchOrganization, EducationalOrganization, GovernmentOrganization, NGO) it stacks as a second @type; Manufacturer is a schema.org property, not a class, so it stays data under schema:additionalType.
Spelling. Organization records predate the snake_case migration; the canonical keys are now legal_name, alternate_name, founding_date, dissolution_date, parent_organization (and address_country/address_region/address_locality in location). The original camelCase spellings stay accepted forever as deprecated aliases — as kwargs and in stored records — and normalize on round-trip, never taught.