SEO.JSONLD.ProductGroup (SEO v0.3.0-rc.0)

View Source

A ProductGroup represents a group of SEO.JSONLD.Products that vary only in certain well-described ways, such as by size, color, material etc.

While a ProductGroup itself is not directly offered for sale, the various varying products that it represents can be. The ProductGroup serves as a prototype or template, standing in for all of the products who have an isVariantOf relationship to it. As such, properties (including additional types) can be applied to the ProductGroup to represent characteristics shared by each of the (possibly very many) variants. Properties that reference a ProductGroup are not included in this mechanism; neither are the following specific properties variesBy, hasVariant, url.

Helper for building a Schema.org ProductGroup JSON-LD structure.

Summary

Types

t()

A JSON-LD map ready to be nested or rendered. String-keyed, always includes "@type" set to "ProductGroup", plus any camelCased field keys the caller provided (see build/1). "@context" is added at render time by SEO.JSONLD.meta/1 on the top-level node only.

Functions

Build a ProductGroup JSON-LD map.

Types

attrs()

@type attrs() ::
  %{
    optional(:has_variant) => SEO.JSONLD.Product.t() | map(),
    optional(:product_group_id) => String.t(),
    optional(:varies_by) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:additional_property) => SEO.JSONLD.PropertyValue.t() | map(),
    optional(:aggregate_rating) => SEO.JSONLD.AggregateRating.t() | map(),
    optional(:asin) => String.t() | URI.t(),
    optional(:audience) => SEO.JSONLD.Audience.t() | map(),
    optional(:award) => String.t(),
    optional(:awards) => String.t(),
    optional(:brand) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Brand.t(),
    optional(:category) =>
      String.t()
      | URI.t()
      | SEO.JSONLD.Thing.t()
      | map()
      | :aerobic_activity
      | :anaerobic_activity
      | :balance
      | :flexibility
      | :leisure_time_activity
      | :occupational_activity
      | :strength_training
      | SEO.JSONLD.CategoryCode.t(),
    optional(:color) => String.t(),
    optional(:color_swatch) =>
      URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
    optional(:country_of_assembly) => String.t(),
    optional(:country_of_last_processing) => String.t(),
    optional(:country_of_origin) => SEO.JSONLD.Country.t() | map(),
    optional(:depth) => SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:display_location) => SEO.JSONLD.Place.t() | map(),
    optional(:funding) => SEO.JSONLD.Grant.t() | map(),
    optional(:gtin) => String.t() | URI.t(),
    optional(:gtin12) => String.t(),
    optional(:gtin13) => String.t(),
    optional(:gtin14) => String.t(),
    optional(:gtin8) => String.t(),
    optional(:has_adult_consideration) =>
      :alcohol_consideration
      | :dangerous_good_consideration
      | :healthcare_consideration
      | :narcotic_consideration
      | :reduced_relevance_for_children_consideration
      | :sexual_content_consideration
      | :tobacco_nicotine_consideration
      | :unclassified_adult_consideration
      | :violence_consideration
      | :weapon_consideration,
    optional(:has_certification) => SEO.JSONLD.Certification.t() | map(),
    optional(:has_energy_consumption_details) =>
      SEO.JSONLD.EnergyConsumptionDetails.t() | map(),
    optional(:has_gs1_digital_link) => URI.t() | String.t(),
    optional(:has_measurement) => SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:has_merchant_return_policy) =>
      SEO.JSONLD.MerchantReturnPolicy.t() | map(),
    optional(:height) => SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:in_product_group_with_id) => String.t(),
    optional(:is_accessory_or_spare_part_for) => SEO.JSONLD.Product.t() | map(),
    optional(:is_consumable_for) => SEO.JSONLD.Product.t() | map(),
    optional(:is_family_friendly) => boolean(),
    optional(:is_related_to) =>
      SEO.JSONLD.Service.t() | map() | SEO.JSONLD.Product.t(),
    optional(:is_similar_to) =>
      SEO.JSONLD.Service.t() | map() | SEO.JSONLD.Product.t(),
    optional(:is_variant_of) => SEO.JSONLD.ProductModel.t() | map() | t(),
    optional(:item_condition) =>
      :damaged_condition
      | :new_condition
      | :refurbished_condition
      | :used_condition,
    optional(:keywords) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
    optional(:logo) =>
      URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
    optional(:manufacturer) => SEO.JSONLD.Organization.t() | map(),
    optional(:material) =>
      String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
    optional(:mobile_url) => String.t(),
    optional(:model) => String.t() | SEO.JSONLD.ProductModel.t() | map(),
    optional(:mpn) => String.t(),
    optional(:negative_notes) =>
      SEO.JSONLD.ItemList.t()
      | map()
      | SEO.JSONLD.ListItem.t()
      | String.t()
      | SEO.JSONLD.WebContent.t(),
    optional(:nsn) => String.t(),
    optional(:offers) => SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
    optional(:pattern) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:positive_notes) =>
      SEO.JSONLD.WebContent.t()
      | map()
      | SEO.JSONLD.ItemList.t()
      | SEO.JSONLD.ListItem.t()
      | String.t(),
    optional(:product_id) => String.t(),
    optional(:production_date) => Date.t() | String.t(),
    optional(:purchase_date) => Date.t() | String.t(),
    optional(:release_date) => Date.t() | String.t(),
    optional(:review) => SEO.JSONLD.Review.t() | map(),
    optional(:reviews) => SEO.JSONLD.Review.t() | map(),
    optional(:size) =>
      SEO.JSONLD.DefinedTerm.t()
      | map()
      | SEO.JSONLD.QuantitativeValue.t()
      | String.t(),
    optional(:sku) => String.t(),
    optional(:slogan) => String.t(),
    optional(:weight) => SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:width) => SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:additional_type) => String.t() | URI.t(),
    optional(:alternate_name) => String.t(),
    optional(:description) => SEO.JSONLD.TextObject.t() | map() | String.t(),
    optional(:disambiguating_description) => String.t(),
    optional(:identifier) =>
      String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(),
    optional(:image) =>
      URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
    optional(:main_entity_of_page) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:name) => String.t(),
    optional(:owner) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:potential_action) => SEO.JSONLD.Action.t() | map(),
    optional(:same_as) => URI.t() | String.t(),
    optional(:subject_of) =>
      SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(),
    optional(:url) => URI.t() | String.t()
  }
  | [
      has_variant: SEO.JSONLD.Product.t() | map(),
      product_group_id: String.t(),
      varies_by: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      additional_property: SEO.JSONLD.PropertyValue.t() | map(),
      aggregate_rating: SEO.JSONLD.AggregateRating.t() | map(),
      asin: String.t() | URI.t(),
      audience: SEO.JSONLD.Audience.t() | map(),
      award: String.t(),
      awards: String.t(),
      brand: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Brand.t(),
      category:
        String.t()
        | URI.t()
        | SEO.JSONLD.Thing.t()
        | map()
        | :aerobic_activity
        | :anaerobic_activity
        | :balance
        | :flexibility
        | :leisure_time_activity
        | :occupational_activity
        | :strength_training
        | SEO.JSONLD.CategoryCode.t(),
      color: String.t(),
      color_swatch: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
      country_of_assembly: String.t(),
      country_of_last_processing: String.t(),
      country_of_origin: SEO.JSONLD.Country.t() | map(),
      depth: SEO.JSONLD.QuantitativeValue.t() | map(),
      display_location: SEO.JSONLD.Place.t() | map(),
      funding: SEO.JSONLD.Grant.t() | map(),
      gtin: String.t() | URI.t(),
      gtin12: String.t(),
      gtin13: String.t(),
      gtin14: String.t(),
      gtin8: String.t(),
      has_adult_consideration:
        :alcohol_consideration
        | :dangerous_good_consideration
        | :healthcare_consideration
        | :narcotic_consideration
        | :reduced_relevance_for_children_consideration
        | :sexual_content_consideration
        | :tobacco_nicotine_consideration
        | :unclassified_adult_consideration
        | :violence_consideration
        | :weapon_consideration,
      has_certification: SEO.JSONLD.Certification.t() | map(),
      has_energy_consumption_details:
        SEO.JSONLD.EnergyConsumptionDetails.t() | map(),
      has_gs1_digital_link: URI.t() | String.t(),
      has_measurement: SEO.JSONLD.QuantitativeValue.t() | map(),
      has_merchant_return_policy: SEO.JSONLD.MerchantReturnPolicy.t() | map(),
      height: SEO.JSONLD.QuantitativeValue.t() | map(),
      in_product_group_with_id: String.t(),
      is_accessory_or_spare_part_for: SEO.JSONLD.Product.t() | map(),
      is_consumable_for: SEO.JSONLD.Product.t() | map(),
      is_family_friendly: boolean(),
      is_related_to: SEO.JSONLD.Service.t() | map() | SEO.JSONLD.Product.t(),
      is_similar_to: SEO.JSONLD.Service.t() | map() | SEO.JSONLD.Product.t(),
      is_variant_of: SEO.JSONLD.ProductModel.t() | map() | t(),
      item_condition:
        :damaged_condition
        | :new_condition
        | :refurbished_condition
        | :used_condition,
      keywords: SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
      logo: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
      manufacturer: SEO.JSONLD.Organization.t() | map(),
      material: String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
      mobile_url: String.t(),
      model: String.t() | SEO.JSONLD.ProductModel.t() | map(),
      mpn: String.t(),
      negative_notes:
        SEO.JSONLD.ItemList.t()
        | map()
        | SEO.JSONLD.ListItem.t()
        | String.t()
        | SEO.JSONLD.WebContent.t(),
      nsn: String.t(),
      offers: SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
      pattern: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      positive_notes:
        SEO.JSONLD.WebContent.t()
        | map()
        | SEO.JSONLD.ItemList.t()
        | SEO.JSONLD.ListItem.t()
        | String.t(),
      product_id: String.t(),
      production_date: Date.t() | String.t(),
      purchase_date: Date.t() | String.t(),
      release_date: Date.t() | String.t(),
      review: SEO.JSONLD.Review.t() | map(),
      reviews: SEO.JSONLD.Review.t() | map(),
      size:
        SEO.JSONLD.DefinedTerm.t()
        | map()
        | SEO.JSONLD.QuantitativeValue.t()
        | String.t(),
      sku: String.t(),
      slogan: String.t(),
      weight: SEO.JSONLD.QuantitativeValue.t() | map(),
      width: SEO.JSONLD.QuantitativeValue.t() | map(),
      additional_type: String.t() | URI.t(),
      alternate_name: String.t(),
      description: SEO.JSONLD.TextObject.t() | map() | String.t(),
      disambiguating_description: String.t(),
      identifier: String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(),
      image: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
      main_entity_of_page:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      name: String.t(),
      owner: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      potential_action: SEO.JSONLD.Action.t() | map(),
      same_as: URI.t() | String.t(),
      subject_of: SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(),
      url: URI.t() | String.t()
    ]

t()

@type t() :: %{required(String.t()) => term()}

A JSON-LD map ready to be nested or rendered. String-keyed, always includes "@type" set to "ProductGroup", plus any camelCased field keys the caller provided (see build/1). "@context" is added at render time by SEO.JSONLD.meta/1 on the top-level node only.

Functions

build(attrs)

@spec build(attrs()) :: t()

Build a ProductGroup JSON-LD map.

Fields

  • :has_variant - Indicates a SEO.JSONLD.Product that is a member of this SEO.JSONLD.ProductGroup (or SEO.JSONLD.ProductModel).
  • :product_group_id - Indicates a textual identifier for a ProductGroup.
  • :varies_by - Indicates the property or properties by which the variants in a SEO.JSONLD.ProductGroup vary, e.g. their size, color etc. Schema.org properties can be referenced by their short name e.g. "color"; terms defined elsewhere can be referenced with their URIs.

Inherited properties

Additional properties are available through the inheritance chain. See each ancestor's docs for its properties: