{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema:ProductModel", "title": "ProductModel", "description": "A datasheet or vendor specification of a product (in the sense of a prototypical description).", "type": "object", "allOf": [ { "description": "Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online.", "$ref": "schema:Product" } ], "properties": { "isVariantOf": { "description": "Indicates the kind of product that this is a variant of. In the case of [[ProductModel]], this is a pointer (from a ProductModel) to a base product from which this product is a variant. It is safe to infer that the variant inherits all product features from the base model, unless defined locally. This is not transitive. In the case of a [[ProductGroup]], the group description also serves as a template, representing a set of Products that vary on explicitly defined, specific dimensions only (so it defines both a set of variants, as well as which values distinguish amongst those variants). When used with [[ProductGroup]], this property can apply to any [[Product]] included in the group.", "oneOf": [ { "anyOf": [ { "$ref": "schema:ProductGroup" }, { "$ref": "schema:ProductModel" } ] }, { "type": "array", "items": { "anyOf": [ { "$ref": "schema:ProductGroup" }, { "$ref": "schema:ProductModel" } ] } } ] }, "predecessorOf": { "description": "A pointer from a previous, often discontinued variant of the product to its newer variant.", "oneOf": [ { "$ref": "schema:ProductModel" }, { "type": "array", "items": { "$ref": "schema:ProductModel" } } ] }, "successorOf": { "description": "A pointer from a newer variant of a product to its previous, often discontinued predecessor.", "oneOf": [ { "$ref": "schema:ProductModel" }, { "type": "array", "items": { "$ref": "schema:ProductModel" } } ] } } }