Schema · 0.1-draft
Bearing record schema, draft v0.1.
A minimal JSON Schema (2020-12) envelope for bearing records. It fixes how identity, field status, applicability, scope and evidence are expressed. Family-specific attribute definitions grow from here with domain review.
Draft — not a standard, not complete
Field reference
Top-level fields
Released 2026-10-09. Generated from the published schema file, so this table and the download always agree.
| Field | Type | Required | Meaning |
|---|---|---|---|
schema_version | const "0.1-draft" | yes | Contract version the record conforms to. |
synthetic | boolean | yes | true for fixtures. Synthetic records are never published as reference data. |
product_id | string | yes | Stable, opaque product identifier. Slugs and designations are presentation, not identity. |
manufacturer | object | yes | Manufacturer identity: stable id and display name. |
designation | object | yes | Full designation as published (raw) and in comparison form (normalized). Suffixes are kept. |
family | string | null | yes | Bearing family; decides which attributes apply and how source labels are read. |
attributes | array | yes | Field-level values with status, applicability, scope, unit and assertions. |
sources | array | yes | Documents and feeds referenced by assertions, with permitted use. |
relationships | array | yes | Typed links to other products with evidence and review status. |
attributes[]
Attribute rules
The heart of the model. Each attribute states not just a value, but whether the field applies, what it is scoped to, and what supports it.
| Property | Allowed values | Rule |
|---|---|---|
status | populated unknown not_applicable conflicting not_researched | populated requires a non-null value and ≥1 assertion; every other status requires value: null. |
applicability | applicable not_applicable unknown | not_applicable status implies not_applicable applicability. |
scope | manufacturer_product supplier_listing inventory_lot | Lot-scoped facts (e.g. origin of a batch) never overwrite product-level fields. |
value / unit | string · number · boolean · null / string · null | Units are explicit; no implied millimetres. |
assertions[].method | source_extraction documented_rule human_entry synthetic_demo | How the value was obtained. |
assertions[].review_status | unreviewed rule_validated expert_reviewed synthetic_only | Review state of the assertion. |
conflicting status | — | Requires ≥2 assertions so the disagreement is preserved. |
sources[]
Sources carry permitted use
| Property | Values |
|---|---|
kind | manufacturer_document manufacturer_feed supplier_listing customer_file rule_definition synthetic_fixture |
permitted_use | public_reference licensed_distribution tenant_private synthetic_demo unknown |
relationships[]
Relationships are typed
| Property | Values |
|---|---|
type | same_identity_candidate variant candidate_substitute supersession |
status | proposed reviewed rejected |
Example
A complete synthetic record
This record validates against the draft schema in our test suite. Every value in it is synthetic.
{
"schema_version": "0.1-draft",
"synthetic": true,
"product_id": "demo-product-001",
"manufacturer": {
"id": "demo-manufacturer",
"name": "Synthetic Example Manufacturer"
},
"designation": {
"raw": "DEMO OPEN 001",
"normalized": "DEMO-OPEN-001"
},
"family": "synthetic-bearing-family",
"attributes": [
{
"field": "example_bore_diameter",
"scope": "manufacturer_product",
"status": "populated",
"applicability": "applicable",
"value": 25,
"unit": "mm",
"assertions": [
{
"value": 25,
"unit": "mm",
"source_id": "demo-source-001",
"source_location": "Illustrative row 1",
"raw_label": "Bore",
"raw_value": "25 mm",
"method": "synthetic_demo",
"review_status": "synthetic_only"
}
]
},
{
"field": "example_total_width",
"scope": "manufacturer_product",
"status": "unknown",
"applicability": "applicable",
"value": null,
"unit": "mm",
"assertions": []
},
{
"field": "example_contact_angle",
"scope": "manufacturer_product",
"status": "not_applicable",
"applicability": "not_applicable",
"value": null,
"unit": "degree",
"assertions": []
},
{
"field": "example_country_of_origin",
"scope": "inventory_lot",
"status": "not_researched",
"applicability": "unknown",
"value": null,
"unit": null,
"assertions": []
}
],
"sources": [
{
"id": "demo-source-001",
"kind": "synthetic_fixture",
"title": "Illustrative development source — no manufacturer evidence",
"url": null,
"retrieved_at": null,
"permitted_use": "synthetic_demo"
}
],
"relationships": []
}Limitations
What this draft is not
Not a standard
It is a working contract for MyBearings records, not an industry standard and not affiliated with ETIM or ECLASS.
Not family-complete
Per-family attribute definitions and applicability predicates are not yet published; field names in the example are illustrative.
Not a stable API
Breaking changes are possible before v1. Versions and migrations will be documented here.

Designing your own bearing model?
Compare notes with us.
Tell us which families and fields you need. Feedback on the draft directly shapes v0.2.