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

View Source

A recipe. For dietary restrictions covered by the recipe, a few common restrictions are enumerated via suitableForDiet. The keywords property can also be used to add more detail.

Recipe rich-result example Recipe rich-result example

Example

SEO.JSONLD.Recipe.build(%{
  name: "Chocolate Chip Cookies",
  image: "https://example.com/cookies.jpg",
  author: SEO.JSONLD.Person.build(%{name: "Jane Doe"}),
  prep_time: Duration.new!(minute: 15),
  cook_time: Duration.new!(minute: 12),
  recipe_yield: "24 cookies",
  recipe_category: "Dessert",
  recipe_cuisine: "American",
  recipe_ingredient: ["2 cups flour", "1 cup butter", "1 cup sugar"],
  recipe_instructions: [
    SEO.JSONLD.HowToStep.build(%{name: "Mix dry", text: "Combine flour, salt, baking soda."}),
    SEO.JSONLD.HowToStep.build(%{name: "Cream wet", text: "Beat butter and sugar until fluffy."}),
    SEO.JSONLD.HowToStep.build(%{name: "Bake", text: "Bake at 375F for 10-12 minutes."})
  ],
  nutrition:
    SEO.JSONLD.NutritionInformation.build(%{
      calories: "180 calories",
      serving_size: "1 cookie"
    })
})

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

Summary

Types

t()

A JSON-LD map ready to be nested or rendered. String-keyed, always includes "@type" set to "Recipe", 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 Recipe JSON-LD map.

Types

attrs()

@type attrs() ::
  %{
    optional(:cook_time) => Duration.t() | String.t(),
    optional(:cooking_method) => String.t(),
    optional(:ingredients) => String.t(),
    optional(:nutrition) => SEO.JSONLD.NutritionInformation.t() | map(),
    optional(:recipe_category) => String.t(),
    optional(:recipe_cuisine) => String.t(),
    optional(:recipe_ingredient) =>
      String.t()
      | SEO.JSONLD.ItemList.t()
      | map()
      | SEO.JSONLD.PropertyValue.t(),
    optional(:recipe_instructions) =>
      SEO.JSONLD.CreativeWork.t() | map() | String.t() | SEO.JSONLD.ItemList.t(),
    optional(:recipe_yield) =>
      String.t() | SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:suitable_for_diet) =>
      SEO.JSONLD.Diet.t()
      | map()
      | :diabetic_diet
      | :gluten_free_diet
      | :halal_diet
      | :hindu_diet
      | :kosher_diet
      | :low_calorie_diet
      | :low_fat_diet
      | :low_lactose_diet
      | :low_salt_diet
      | :vegan_diet
      | :vegetarian_diet,
    optional(:estimated_cost) =>
      String.t() | SEO.JSONLD.MonetaryAmount.t() | map(),
    optional(:perform_time) => Duration.t() | String.t(),
    optional(:prep_time) => Duration.t() | String.t(),
    optional(:step) =>
      String.t()
      | SEO.JSONLD.CreativeWork.t()
      | map()
      | SEO.JSONLD.HowToStep.t()
      | SEO.JSONLD.HowToSection.t(),
    optional(:steps) =>
      SEO.JSONLD.CreativeWork.t() | map() | SEO.JSONLD.ItemList.t() | String.t(),
    optional(:supply) => String.t() | SEO.JSONLD.HowToSupply.t() | map(),
    optional(:tool) => SEO.JSONLD.HowToTool.t() | map() | String.t(),
    optional(:total_time) => Duration.t() | String.t(),
    optional(:yield) => String.t() | SEO.JSONLD.QuantitativeValue.t() | map(),
    optional(:about) => SEO.JSONLD.Thing.t() | map(),
    optional(:abstract) => String.t(),
    optional(:access_mode) => String.t(),
    optional(:access_mode_sufficient) => SEO.JSONLD.ItemList.t() | map(),
    optional(:accessibility_api) => String.t(),
    optional(:accessibility_control) => String.t(),
    optional(:accessibility_feature) => String.t(),
    optional(:accessibility_hazard) => String.t(),
    optional(:accessibility_summary) => String.t(),
    optional(:accountable_person) => SEO.JSONLD.Person.t() | map(),
    optional(:acquire_license_page) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:aggregate_rating) => SEO.JSONLD.AggregateRating.t() | map(),
    optional(:alternative_headline) => String.t(),
    optional(:archived_at) =>
      SEO.JSONLD.WebPage.t() | map() | URI.t() | String.t(),
    optional(:assesses) => String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:associated_media) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:audience) => SEO.JSONLD.Audience.t() | map(),
    optional(:audio) =>
      SEO.JSONLD.Clip.t()
      | map()
      | SEO.JSONLD.MusicRecording.t()
      | SEO.JSONLD.AudioObject.t(),
    optional(:author) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:award) => String.t(),
    optional(:awards) => String.t(),
    optional(:character) => SEO.JSONLD.Person.t() | map(),
    optional(:citation) => SEO.JSONLD.CreativeWork.t() | map() | String.t(),
    optional(:comment) => SEO.JSONLD.Comment.t() | map(),
    optional(:comment_count) => integer(),
    optional(:conditions_of_access) => String.t(),
    optional(:content_location) => SEO.JSONLD.Place.t() | map(),
    optional(:content_rating) => String.t() | SEO.JSONLD.Rating.t() | map(),
    optional(:content_reference_time) =>
      DateTime.t() | NaiveDateTime.t() | String.t(),
    optional(:contributor) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:copyright_holder) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:copyright_notice) => String.t(),
    optional(:copyright_year) => number(),
    optional(:correction) =>
      SEO.JSONLD.CorrectionComment.t() | map() | String.t() | URI.t(),
    optional(:country_of_origin) => SEO.JSONLD.Country.t() | map(),
    optional(:creative_work_status) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:creator) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:credit_text) => String.t(),
    optional(:date_created) =>
      DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
    optional(:date_modified) =>
      DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
    optional(:date_published) =>
      Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:digital_source_type) =>
      :algorithmic_media_digital_source
      | :algorithmically_enhanced_digital_source
      | :composite_capture_digital_source
      | :composite_digital_source
      | :composite_synthetic_digital_source
      | :composite_with_trained_algorithmic_media_digital_source
      | :data_driven_media_digital_source
      | :digital_art_digital_source
      | :digital_capture_digital_source
      | :minor_human_edits_digital_source
      | :multi_frame_computational_capture_digital_source
      | :negative_film_digital_source
      | :positive_film_digital_source
      | :print_digital_source
      | :screen_capture_digital_source
      | :trained_algorithmic_media_digital_source
      | :virtual_recording_digital_source,
    optional(:discussion_url) => URI.t() | String.t(),
    optional(:display_location) => SEO.JSONLD.Place.t() | map(),
    optional(:edit_eidr) => String.t() | URI.t(),
    optional(:editor) => SEO.JSONLD.Person.t() | map(),
    optional(:educational_alignment) => SEO.JSONLD.AlignmentObject.t() | map(),
    optional(:educational_level) =>
      String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:educational_use) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:encoding) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:encoding_format) => String.t() | URI.t(),
    optional(:encodings) => SEO.JSONLD.MediaObject.t() | map(),
    optional(:example_of_work) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:expires) =>
      Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:file_format) => String.t() | URI.t(),
    optional(:funder) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:funding) => SEO.JSONLD.Grant.t() | map(),
    optional(:genre) =>
      String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:has_part) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:headline) => String.t(),
    optional(:in_language) => String.t() | SEO.JSONLD.Language.t() | map(),
    optional(:interaction_statistic) =>
      SEO.JSONLD.InteractionCounter.t() | map(),
    optional(:interactivity_type) => String.t(),
    optional(:interpreted_as_claim) => SEO.JSONLD.Claim.t() | map(),
    optional(:is_accessible_for_free) => boolean(),
    optional(:is_based_on) =>
      SEO.JSONLD.CreativeWork.t()
      | map()
      | SEO.JSONLD.Product.t()
      | URI.t()
      | String.t(),
    optional(:is_based_on_url) =>
      SEO.JSONLD.CreativeWork.t()
      | map()
      | SEO.JSONLD.Product.t()
      | URI.t()
      | String.t(),
    optional(:is_family_friendly) => boolean(),
    optional(:is_part_of) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:keywords) =>
      SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
    optional(:learning_resource_type) =>
      String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
    optional(:license) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:location_created) => SEO.JSONLD.Place.t() | map(),
    optional(:main_entity) => SEO.JSONLD.Thing.t() | map(),
    optional(:maintainer) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:material) =>
      String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
    optional(:material_extent) =>
      SEO.JSONLD.QuantitativeValue.t() | map() | String.t(),
    optional(:mentions) => SEO.JSONLD.Thing.t() | map(),
    optional(:offers) => SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
    optional(:pattern) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:position) => String.t() | integer(),
    optional(:producer) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:provider) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:publication) => SEO.JSONLD.PublicationEvent.t() | map(),
    optional(:publisher) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:publisher_imprint) => SEO.JSONLD.Organization.t() | map(),
    optional(:publishing_principles) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:recorded_at) => SEO.JSONLD.Event.t() | map(),
    optional(:released_event) => SEO.JSONLD.PublicationEvent.t() | map(),
    optional(:review) => SEO.JSONLD.Review.t() | map(),
    optional(:reviews) => SEO.JSONLD.Review.t() | map(),
    optional(:schema_version) => String.t() | URI.t(),
    optional(:sd_date_published) => Date.t() | String.t(),
    optional(:sd_license) =>
      URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(),
    optional(:sd_publisher) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:size) =>
      SEO.JSONLD.DefinedTerm.t()
      | map()
      | SEO.JSONLD.QuantitativeValue.t()
      | String.t(),
    optional(:source_organization) => SEO.JSONLD.Organization.t() | map(),
    optional(:spatial) => SEO.JSONLD.Place.t() | map(),
    optional(:spatial_coverage) => SEO.JSONLD.Place.t() | map(),
    optional(:sponsor) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:teaches) => SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
    optional(:temporal) => String.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:temporal_coverage) =>
      String.t() | URI.t() | DateTime.t() | NaiveDateTime.t(),
    optional(:text) => String.t(),
    optional(:thumbnail) => SEO.JSONLD.ImageObject.t() | map(),
    optional(:thumbnail_url) => URI.t() | String.t(),
    optional(:time_required) => Duration.t() | String.t(),
    optional(:translation_of_work) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:translator) =>
      SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
    optional(:typical_age_range) => String.t(),
    optional(:usage_info) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    optional(:version) => String.t() | number(),
    optional(:video) =>
      SEO.JSONLD.VideoObject.t() | map() | SEO.JSONLD.Clip.t(),
    optional(:word_count) => integer(),
    optional(:work_example) => SEO.JSONLD.CreativeWork.t() | map(),
    optional(:work_translation) => SEO.JSONLD.CreativeWork.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(),
    :image => URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(),
    optional(:main_entity_of_page) =>
      SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
    :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()
  }
  | [
      cook_time: Duration.t() | String.t(),
      cooking_method: String.t(),
      ingredients: String.t(),
      nutrition: SEO.JSONLD.NutritionInformation.t() | map(),
      recipe_category: String.t(),
      recipe_cuisine: String.t(),
      recipe_ingredient:
        String.t()
        | SEO.JSONLD.ItemList.t()
        | map()
        | SEO.JSONLD.PropertyValue.t(),
      recipe_instructions:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | String.t()
        | SEO.JSONLD.ItemList.t(),
      recipe_yield: String.t() | SEO.JSONLD.QuantitativeValue.t() | map(),
      suitable_for_diet:
        SEO.JSONLD.Diet.t()
        | map()
        | :diabetic_diet
        | :gluten_free_diet
        | :halal_diet
        | :hindu_diet
        | :kosher_diet
        | :low_calorie_diet
        | :low_fat_diet
        | :low_lactose_diet
        | :low_salt_diet
        | :vegan_diet
        | :vegetarian_diet,
      estimated_cost: String.t() | SEO.JSONLD.MonetaryAmount.t() | map(),
      perform_time: Duration.t() | String.t(),
      prep_time: Duration.t() | String.t(),
      step:
        String.t()
        | SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.HowToStep.t()
        | SEO.JSONLD.HowToSection.t(),
      steps:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.ItemList.t()
        | String.t(),
      supply: String.t() | SEO.JSONLD.HowToSupply.t() | map(),
      tool: SEO.JSONLD.HowToTool.t() | map() | String.t(),
      total_time: Duration.t() | String.t(),
      yield: String.t() | SEO.JSONLD.QuantitativeValue.t() | map(),
      about: SEO.JSONLD.Thing.t() | map(),
      abstract: String.t(),
      access_mode: String.t(),
      access_mode_sufficient: SEO.JSONLD.ItemList.t() | map(),
      accessibility_api: String.t(),
      accessibility_control: String.t(),
      accessibility_feature: String.t(),
      accessibility_hazard: String.t(),
      accessibility_summary: String.t(),
      accountable_person: SEO.JSONLD.Person.t() | map(),
      acquire_license_page:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      aggregate_rating: SEO.JSONLD.AggregateRating.t() | map(),
      alternative_headline: String.t(),
      archived_at: SEO.JSONLD.WebPage.t() | map() | URI.t() | String.t(),
      assesses: String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      associated_media: SEO.JSONLD.MediaObject.t() | map(),
      audience: SEO.JSONLD.Audience.t() | map(),
      audio:
        SEO.JSONLD.Clip.t()
        | map()
        | SEO.JSONLD.MusicRecording.t()
        | SEO.JSONLD.AudioObject.t(),
      author: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      award: String.t(),
      awards: String.t(),
      character: SEO.JSONLD.Person.t() | map(),
      citation: SEO.JSONLD.CreativeWork.t() | map() | String.t(),
      comment: SEO.JSONLD.Comment.t() | map(),
      comment_count: integer(),
      conditions_of_access: String.t(),
      content_location: SEO.JSONLD.Place.t() | map(),
      content_rating: String.t() | SEO.JSONLD.Rating.t() | map(),
      content_reference_time: DateTime.t() | NaiveDateTime.t() | String.t(),
      contributor: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      copyright_holder:
        SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      copyright_notice: String.t(),
      copyright_year: number(),
      correction:
        SEO.JSONLD.CorrectionComment.t() | map() | String.t() | URI.t(),
      country_of_origin: SEO.JSONLD.Country.t() | map(),
      creative_work_status: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      creator: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      credit_text: String.t(),
      date_created: DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
      date_modified: DateTime.t() | NaiveDateTime.t() | String.t() | Date.t(),
      date_published: Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
      digital_source_type:
        :algorithmic_media_digital_source
        | :algorithmically_enhanced_digital_source
        | :composite_capture_digital_source
        | :composite_digital_source
        | :composite_synthetic_digital_source
        | :composite_with_trained_algorithmic_media_digital_source
        | :data_driven_media_digital_source
        | :digital_art_digital_source
        | :digital_capture_digital_source
        | :minor_human_edits_digital_source
        | :multi_frame_computational_capture_digital_source
        | :negative_film_digital_source
        | :positive_film_digital_source
        | :print_digital_source
        | :screen_capture_digital_source
        | :trained_algorithmic_media_digital_source
        | :virtual_recording_digital_source,
      discussion_url: URI.t() | String.t(),
      display_location: SEO.JSONLD.Place.t() | map(),
      edit_eidr: String.t() | URI.t(),
      editor: SEO.JSONLD.Person.t() | map(),
      educational_alignment: SEO.JSONLD.AlignmentObject.t() | map(),
      educational_level:
        String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      educational_use: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      encoding: SEO.JSONLD.MediaObject.t() | map(),
      encoding_format: String.t() | URI.t(),
      encodings: SEO.JSONLD.MediaObject.t() | map(),
      example_of_work: SEO.JSONLD.CreativeWork.t() | map(),
      expires: Date.t() | String.t() | DateTime.t() | NaiveDateTime.t(),
      file_format: String.t() | URI.t(),
      funder: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      funding: SEO.JSONLD.Grant.t() | map(),
      genre: String.t() | URI.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      has_part: SEO.JSONLD.CreativeWork.t() | map(),
      headline: String.t(),
      in_language: String.t() | SEO.JSONLD.Language.t() | map(),
      interaction_statistic: SEO.JSONLD.InteractionCounter.t() | map(),
      interactivity_type: String.t(),
      interpreted_as_claim: SEO.JSONLD.Claim.t() | map(),
      is_accessible_for_free: boolean(),
      is_based_on:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.Product.t()
        | URI.t()
        | String.t(),
      is_based_on_url:
        SEO.JSONLD.CreativeWork.t()
        | map()
        | SEO.JSONLD.Product.t()
        | URI.t()
        | String.t(),
      is_family_friendly: boolean(),
      is_part_of: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      keywords: SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(),
      learning_resource_type: String.t() | SEO.JSONLD.DefinedTerm.t() | map(),
      license: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      location_created: SEO.JSONLD.Place.t() | map(),
      main_entity: SEO.JSONLD.Thing.t() | map(),
      maintainer: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      material: String.t() | SEO.JSONLD.Product.t() | map() | URI.t(),
      material_extent: SEO.JSONLD.QuantitativeValue.t() | map() | String.t(),
      mentions: SEO.JSONLD.Thing.t() | map(),
      offers: SEO.JSONLD.Offer.t() | map() | SEO.JSONLD.Demand.t(),
      pattern: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      position: String.t() | integer(),
      producer: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      provider: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      publication: SEO.JSONLD.PublicationEvent.t() | map(),
      publisher: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      publisher_imprint: SEO.JSONLD.Organization.t() | map(),
      publishing_principles:
        SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      recorded_at: SEO.JSONLD.Event.t() | map(),
      released_event: SEO.JSONLD.PublicationEvent.t() | map(),
      review: SEO.JSONLD.Review.t() | map(),
      reviews: SEO.JSONLD.Review.t() | map(),
      schema_version: String.t() | URI.t(),
      sd_date_published: Date.t() | String.t(),
      sd_license: URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(),
      sd_publisher: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      size:
        SEO.JSONLD.DefinedTerm.t()
        | map()
        | SEO.JSONLD.QuantitativeValue.t()
        | String.t(),
      source_organization: SEO.JSONLD.Organization.t() | map(),
      spatial: SEO.JSONLD.Place.t() | map(),
      spatial_coverage: SEO.JSONLD.Place.t() | map(),
      sponsor: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      teaches: SEO.JSONLD.DefinedTerm.t() | map() | String.t(),
      temporal: String.t() | DateTime.t() | NaiveDateTime.t(),
      temporal_coverage:
        String.t() | URI.t() | DateTime.t() | NaiveDateTime.t(),
      text: String.t(),
      thumbnail: SEO.JSONLD.ImageObject.t() | map(),
      thumbnail_url: URI.t() | String.t(),
      time_required: Duration.t() | String.t(),
      translation_of_work: SEO.JSONLD.CreativeWork.t() | map(),
      translator: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(),
      typical_age_range: String.t(),
      usage_info: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(),
      version: String.t() | number(),
      video: SEO.JSONLD.VideoObject.t() | map() | SEO.JSONLD.Clip.t(),
      word_count: integer(),
      work_example: SEO.JSONLD.CreativeWork.t() | map(),
      work_translation: SEO.JSONLD.CreativeWork.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 "Recipe", 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 Recipe JSON-LD map.

Fields

  • :cook_time - The time it takes to actually cook the dish, in ISO 8601 duration format.
  • :cooking_method - The method of cooking, such as Frying, Steaming, ...
  • :ingredients - A single ingredient used in the recipe, e.g. sugar, flour or garlic.
  • :nutrition - Nutrition information about the recipe or menu item.
  • :recipe_category - The category of the recipe—for example, appetizer, entree, etc.
  • :recipe_cuisine - The cuisine of the recipe (for example, French or Ethiopian).
  • :recipe_ingredient - An ingredient or ordered list of ingredients and potentially quantities used in the recipe, e.g. 1 cup of sugar, flour or garlic. The ingredients can be represented as free text or more structured values.
  • :recipe_instructions - A step in making the recipe, in the form of a single item (document, video, etc.) or an ordered list with HowToStep and/or HowToSection items.
  • :recipe_yield - The quantity produced by the recipe (for example, number of people served, number of servings, etc).
  • :suitable_for_diet - Indicates a dietary restriction or guideline for which this recipe or menu item is suitable, e.g. diabetic, halal etc. One of: :diabetic_diet, :gluten_free_diet, :halal_diet, :hindu_diet, :kosher_diet, :low_calorie_diet, :low_fat_diet, :low_lactose_diet, :low_salt_diet, :vegan_diet, :vegetarian_diet.

Inherited properties

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