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.

FieldTypeRequiredMeaning
schema_versionconst "0.1-draft"yesContract version the record conforms to.
syntheticbooleanyestrue for fixtures. Synthetic records are never published as reference data.
product_idstringyesStable, opaque product identifier. Slugs and designations are presentation, not identity.
manufacturerobjectyesManufacturer identity: stable id and display name.
designationobjectyesFull designation as published (raw) and in comparison form (normalized). Suffixes are kept.
familystring | nullyesBearing family; decides which attributes apply and how source labels are read.
attributesarrayyesField-level values with status, applicability, scope, unit and assertions.
sourcesarrayyesDocuments and feeds referenced by assertions, with permitted use.
relationshipsarrayyesTyped 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.

PropertyAllowed valuesRule
statuspopulated unknown not_applicable conflicting not_researchedpopulated requires a non-null value and ≥1 assertion; every other status requires value: null.
applicabilityapplicable not_applicable unknownnot_applicable status implies not_applicable applicability.
scopemanufacturer_product supplier_listing inventory_lotLot-scoped facts (e.g. origin of a batch) never overwrite product-level fields.
value / unitstring · number · boolean · null / string · nullUnits are explicit; no implied millimetres.
assertions[].methodsource_extraction documented_rule human_entry synthetic_demoHow the value was obtained.
assertions[].review_statusunreviewed rule_validated expert_reviewed synthetic_onlyReview state of the assertion.
conflicting status—Requires ≥2 assertions so the disagreement is preserved.

sources[]

Sources carry permitted use

PropertyValues
kindmanufacturer_document manufacturer_feed supplier_listing customer_file rule_definition synthetic_fixture
permitted_usepublic_reference licensed_distribution tenant_private synthetic_demo unknown

relationships[]

Relationships are typed

PropertyValues
typesame_identity_candidate variant candidate_substitute supersession
statusproposed reviewed rejected

Example

A complete synthetic record

This record validates against the draft schema in our test suite. Every value in it is synthetic.

synthetic-record.jsonIllustrative demo · synthetic data
{
  "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.