hrecipe: Difference between revisions

From Microformats Wiki
Jump to navigation Jump to search
(updated field details, xmdp profile and example to version 0.2)
Line 19: Line 19:


Microformats [[#Copyright]] and [[#Patents]] statements apply.
Microformats [[#Copyright]] and [[#Patents]] statements apply.


== Introduction ==
== Introduction ==
Line 33: Line 34:


Many thanks to the various individuals that did research and proposed ideas and discussion related to the hRecipe-format and recipes in general.
Many thanks to the various individuals that did research and proposed ideas and discussion related to the hRecipe-format and recipes in general.


=== Scope ===
=== Scope ===
Line 41: Line 43:


Recipes that are not for stuff that's meant to be eaten by humans are out of scope.
Recipes that are not for stuff that's meant to be eaten by humans are out of scope.


== Format ==
== Format ==
Line 49: Line 52:
The hRecipe format is based on a set of fields common to numerous recipe sites and formats in use today on the web.  Where possible field names have been chosen based on those defined by related microformat standards.<br>
The hRecipe format is based on a set of fields common to numerous recipe sites and formats in use today on the web.  Where possible field names have been chosen based on those defined by related microformat standards.<br>
Some fields are marked ''experimental'' since they exceed the minimum set of elements needed to describe a recipe but still are very commonly used on the web. It's not sure if they are relevant enough for inclusion in the format. Implementation and general uptake of these elements will be observed and inform further decisions. So their use is not at all discouraged - but use them with care and be prepared for their eventual removal from the final spec.
Some fields are marked ''experimental'' since they exceed the minimum set of elements needed to describe a recipe but still are very commonly used on the web. It's not sure if they are relevant enough for inclusion in the format. Implementation and general uptake of these elements will be observed and inform further decisions. So their use is not at all discouraged - but use them with care and be prepared for their eventual removal from the final spec.


=== Schema ===
=== Schema ===
Line 68: Line 72:
*** ''value'' and ''type''. optional. re-used from [[hCard]]. [experimental]
*** ''value'' and ''type''. optional. re-used from [[hCard]]. [experimental]
** ''tag''. optional. 1 or more. re-used from [[rel-tag]]. [experimental]
** ''tag''. optional. 1 or more. re-used from [[rel-tag]]. [experimental]


=== Field details ===
=== Field details ===


Class names <code>photo</code> and <code>note</code> are reused from [[hCard]], <code>num</code>, <code>unit</code> and <code>item</code> are reused from [[measure]], <code>author</code> and <code>published</code> are reused from [[hAtom]].
Class names <code>fn</code>, <code>photo</code, <code>value</code> and <code>type</code> are reused from [[hCard]] <code>duration</code> and<code>summary</code> are reused from [[hCalendar]], <code>author</code> and <code>published</code> are reused from [[hAtom]], <code>tag</code> is reused from [[rel-tag]].


The fields of the hRecipe schema represent the following:
The fields of the hRecipe schema represent the following:
Line 81: Line 86:
* A hRecipe element is identified by class name <code>hrecipe</code>
* A hRecipe element is identified by class name <code>hrecipe</code>


==== recipe-title ====
==== fn ====
 
The title of a single recipe. A short textual description used to identify the work among interested parties. This can be the name of a meal or a short description regarding it's ingredients.


The title of a single recipe is a short textual description used to identify the work among interested parties. This can be the name of a meal or a short description regarding it's ingredients.
* The element is identified by class name <code>fn</code>.
* A Recipe {{must}} include a <code> fn </code>.
* The element {{must}} follow the conventions outlined in [[hCard]].


* The element is identified by class name <code>recipe-title</code>.
==== ingredient ====
* A Recipe {{must}} include a <code>recipe-title</code>.


==== recipe-summary ====
Describes one or more ingredients used in the recipe.


The summary provides a short introduction or an accompanying statement about the recipe.
* The element is identified by the class name <code>ingredient</code>.
* A Recipe {{must}} include one or more <code>ingredient</code>s.
* The field {{may}} include valid HTML markup (e.g. a list of ingredients).
* The element {{may}} include the fields <code>value</code> and <code>type</code> following the conventions outlined in [[hCard]]. In this case each ingredient should be marked up with it's own <code>ingredient</code> element.


* The element is identified by the class name <code>recipe-summary</code>.
==== yield ====
* A Recipe {{may}} include a <code>recipe-summary</code>.


==== author ====
Specifies the quantity produced by the recipe, like how many persons it satisfyies or how many pieces can be made of it.
 
* The element is identified by the class name <code>yield</code>.
* A Recipe {{may}} include a <code>yield</code>.
 
==== instructions ====


An Author is the person who authored the recipe.
The method of the recipe.


* The element is identified by class name <code>author</code>.
* The element is identified by the class name <code>instructions</code>.
* A Recipe {{may}} include one or more <code>author</code> elements.
* A Recipe {{may}} include a <code>instructions</code> element.  
* The contents of the element {{must}} follow the conventions outlined in [[hCard]].
* The field {{may}} include valid HTML markup e.g. paragraphs or a list of steps.


==== published ====
==== duration ====


The date the recipe was published.
The time it takes to prepare the meal described by the recipe. Multiple duration fields can be used to denote  e.g. time for preparing a dough, time needed for the dough to raise, time to bake the dough, time for decorating the cake etc.


* The element is identified by the class name <code>published</code>.
* The element is identified by the class name <code>duration</code>.
* A Recipe {{may}} include a <code>published</code> date.
* A Recipe {{may}} include one or more <code>duration</code>s.
* The element {{must}} follow the conventions outlined in [[hAtom]].
* The element {{must}} follow the conventions outlined in [[hCalendar]].
* The [[datetime-design-pattern]] {{should}} be used to encode the published datetime.


==== photo ====
==== photo ====
Line 121: Line 135:
* The element {{may}} use any other element that contains a URL, such as &lt;a&gt; or &lt;object&gt;, but it is not recommended.
* The element {{may}} use any other element that contains a URL, such as &lt;a&gt; or &lt;object&gt;, but it is not recommended.
* The contents of the element {{must}} follow the conventions outlined in [[hCard]].
* The contents of the element {{must}} follow the conventions outlined in [[hCard]].
* The element is considered ''experimental'' and may be removed from the final specification.


==== ingredient ====
==== summary ====


Describes one or more ingredients used in the recipe.
The summary provides a short introduction to or an accompanying statement about the recipe.


* The element is identified by the class name <code>ingredient</code>.
* The element is identified by the class name <code>summary</code>.
* A Recipe {{must}} have one or more <code>ingredient</code>s.
* A Recipe {{may}} include a <code>summary</code>.
* The field {{may}} include valid HTML markup (e.g. a list of ingredients).
* The element {{must}} follow the conventions outlined in [[hCalendar]].
* The element {{may}} include the fields <code>num</code>, <code>unit</code> and <code>item</code> following the conventions outlined in [[measure]]. In this case each ingredient should be marked up with it's own <code>ingredient</code> element.
* The element is considered ''experimental'' and may be removed from the final specification.
* The element {{may}} include a <code>note</code> detailing the ingredient, which {{must}} follow the conventions outlined in [[hCard]].


==== method ====
==== author ====


The method of the recipe.
An Author is the person who authored the recipe.


* The element is identified by the class name <code>method</code>.
* The element is identified by class name <code>author</code>.
* A Recipe {{may}} include a <code>method</code>.  
* A Recipe {{may}} include one or more <code>author</code> elements.
* The field {{may}} include valid HTML markup e.g. paragraphs or a list for steps in the method.
* The contents of the element {{must}} follow the conventions outlined in [[hCard]].
* The element is considered ''experimental'' and may be removed from the final specification.


==== yield ====
==== published ====


Specifies the quantity produced by the recipe, like how many persons it satisfyies or how many pieces can be made of it.
The date the recipe was published.


* The element is identified by the class name <code>yield</code>.
* The element is identified by the class name <code>published</code>.
* A Recipe {{may}} include a <code>yield</code>.
* A Recipe {{may}} include a <code>published</code> date.
 
* The element {{must}} follow the conventions outlined in [[hAtom]].
==== preparation-time ====
* The [[datetime-design-pattern]] {{should}} be used to encode the published datetime.
 
* The element is considered ''experimental'' and may be removed from the final specification.
The time it takes to prepare the meal described by the recipe. Multiple preparation-time fields can be used to denote  e.g. time for preparing a dough, time needed for the dough to raise, time to bake the dough, time for decorating the cake etc.
 
* The element is identified by the class name <code>preparation-time</code>.
* A Recipe {{may}} include one or more <code>preparation-time</code>s.
* Each Preparation Time element {{may}} include a <code>note</code> to specify their respective purpose, which {{must}} follow the conventions outlined in [[hCard]].


==== nutrition ====
==== nutrition ====
Line 161: Line 171:
* The element is identified by class name <code>nutrition</code>.
* The element is identified by class name <code>nutrition</code>.
* A Recipe {{may}} include one or more <code>nutrition</code> elements.
* A Recipe {{may}} include one or more <code>nutrition</code> elements.
* The element {{may}} include the fields <code>num</code>, <code>unit</code> and <code>item</code> following [[measure]].
* The element {{may}} include the fields <code>value</code> and <code>type</code> following the conventions outlined in [[hCard]]. In this case each nutritional information item should be marked up with it's own <code>nutrition</code> element.
* The element is considered ''experimental'' and may be removed from the final specification.
 
==== tag ====
 
A keyword indicating a subject or an important aspect of the recipe like it's main ingredient, type of meal etc.
 
* The element is identified by class name <code>tag</code>.
* A Recipe {{may}} include one or more <code>tag</code> elements.
* The element {{must}} follow the conventions outlined in [[rel-tag]].
* The element is considered ''experimental'' and may be removed from the final specification.




Line 167: Line 187:


From [http://microformats.org/wiki/index.php?title=hrecipe&oldid=37357  Version 0.1] some elements have been renamed to strenghten re-use of established elements: '''fn''' for '''hRecipe-title''', '''summary''' for '''hRecipe-summary''', '''duration''' for '''preparation-time''', '''value''' and '''type''' for '''num''' and '''unit'''. Also some elements have been marked '''experimental''' because of concerns of element bloat. See the [[hrecipe-issues]] page for a more thorough discussion.
From [http://microformats.org/wiki/index.php?title=hrecipe&oldid=37357  Version 0.1] some elements have been renamed to strenghten re-use of established elements: '''fn''' for '''hRecipe-title''', '''summary''' for '''hRecipe-summary''', '''duration''' for '''preparation-time''', '''value''' and '''type''' for '''num''' and '''unit'''. Also some elements have been marked '''experimental''' because of concerns of element bloat. See the [[hrecipe-issues]] page for a more thorough discussion.


=== Parser Processing Notes ===
=== Parser Processing Notes ===


None so far.
None so far.


=== Semantic XHTML Design Principles ===
=== Semantic XHTML Design Principles ===


{{semantic-xhtml-design-principles}}
{{semantic-xhtml-design-principles}}


==== More Semantic Equivalents ====
==== More Semantic Equivalents ====
Line 181: Line 204:


* For "photo", use <code><img class="photo" src="..." alt="" /></code>  
* For "photo", use <code><img class="photo" src="..." alt="" /></code>  


==== Language ====
==== Language ====
Line 189: Line 213:
* hRecipe parsers which need to handle the native language of hRecipe {{must}} process the standard (X)HTML 'lang' or 'xml:lang' attribute as specified.
* hRecipe parsers which need to handle the native language of hRecipe {{must}} process the standard (X)HTML 'lang' or 'xml:lang' attribute as specified.
* hRecipe parsers which need to handle native language {{may}} traverse up the DOM to discover the native language of the page and apply that to the hRecipe if no other language is specified on the hRecipe.
* hRecipe parsers which need to handle native language {{may}} traverse up the DOM to discover the native language of the page and apply that to the hRecipe if no other language is specified on the hRecipe.


==== Human vs. Machine Readable ====
==== Human vs. Machine Readable ====
Line 201: Line 226:


If an <code>&lt;object&gt;</code> element is used for the 'photo' property, it {{must}} use the property value provided by the <code>data="..."</code> attribute as property value.
If an <code>&lt;object&gt;</code> element is used for the 'photo' property, it {{must}} use the property value provided by the <code>data="..."</code> attribute as property value.


=== Notes ===
=== Notes ===
Line 207: Line 233:


* By marking up audio content with the hAudio microformat, the expectation is communicated that information about the content {{may}} be indexed.  This has no impact on the copyright of the content itself which the publisher may explicitly specify using the [[rel-license]] microformat.
* By marking up audio content with the hAudio microformat, the expectation is communicated that information about the content {{may}} be indexed.  This has no impact on the copyright of the content itself which the publisher may explicitly specify using the [[rel-license]] microformat.


== XMDP Profile ==
== XMDP Profile ==
Line 225: Line 252:
     Used to identify and describe metadata associated with instructions for creating meals, drinks or food-based items.
     Used to identify and describe metadata associated with instructions for creating meals, drinks or food-based items.
   </dd>
   </dd>
   <dt>recipe-title</dt>
   <dt>fn</dt>
   <dd>
   <dd>
     The title of the recipe.
     The title of the recipe.
   </dd>
   </dd>
   <dt>recipe-summary</dt>
   <dt>ingredient</dt>
   <dd>
   <dd>
     The summary provides a short introduction or an accompanying statement about the recipe.
     Describes the ingredient(s) used in the recipe.
  </dd>
  <dt>yield</dt>
  <dd>
    Specifies the quantity produced by the recipe.
   </dd>
   </dd>
   <dt>author</dt>
   <dt>instructions</dt>
   <dd>
   <dd>
  The person who authored the recipe..
    The method of the recipe.
   </dd>
   </dd>
   <dt>published</dt>
   <dt>duration</dt>
   <dd>
   <dd>
     The date that the recipe was made available to the public.
     The time it takes to prepare the meal described by the recipe.
   </dd>
   </dd>
   <dt>photo</dt>
   <dt>photo</dt>
Line 245: Line 276:
     Accompanying image.
     Accompanying image.
   </dd>
   </dd>
   <dt>ingredient</dt>
   <dt>summary</dt>
   <dd>
   <dd>
     Describes the ingredient(s) used in the recipe.
     The summary provides a short introduction or an accompanying statement about the recipe.
   </dd>
   </dd>
   <dt>method</dt>
   <dt>author</dt>
   <dd>
   <dd>
    The method of the recipe.
  The person who authored the recipe..
   </dd>
   </dd>
   <dt>yield</dt>
   <dt>published</dt>
   <dd>
   <dd>
     Specifies the quantity produced by the recipe.
     The date that the recipe was made available to the public.
   </dd>
   </dd>
   <dt>preparation-time</dt>
   <dt>nutrition</dt>
   <dd>
   <dd>
     The time it takes to prepare the meal described by the recipe.
     Nutritional information like calories, fat, dietary fiber etc.
   </dd>
   </dd>
   <dt>nutrition</dt>
   <dt>tag</dt>
   <dd>
   <dd>
     Nutritional information like calories, fat, dietary fiber etc.
     Keyword(s) describing the recipe.
   </dd>
   </dd>
   </dl>
   </dl>
Line 277: Line 308:


<pre><nowiki><div class="hrecipe">
<pre><nowiki><div class="hrecipe">
<p class="recipe-title">Pommes Frites</p>
<p class="fn">Pommes Frites</p>
<p class="recipe-summary">
<p class="summary">
Pommes frites originate in outer space. They are served hot.<br />
Pommes frites originate in outer space. They are served hot.<br />
This recipe is only an example. Don't try this at home!
This recipe is only an example. Don't try this at home!
Line 285: Line 316:
<p>Published <abbr class="published" title="2008-10-14T10:05:37-01:00">14. Oct 2008</abbr></p>
<p>Published <abbr class="published" title="2008-10-14T10:05:37-01:00">14. Oct 2008</abbr></p>
<img src="/img/pommes.png" class="photo" width="100" height="100" alt="Pommes Frites"/>
<img src="/img/pommes.png" class="photo" width="100" height="100" alt="Pommes Frites"/>
<p class="ingredient hmeasure">
<p class="ingredient hcard">
<span class="num">500</span>  
<span class="value">500</span>  
<span class="unit">gramme</span>
<span class="type">gramme</span>
<span class="item">potatoes</span>,
potatoes, hard cooking.
<span class="note">hard cooking</span>.
</p>
</p>
<ul class="method">
<ul class="instructions">
<li>First wash the potatoes.</li>
<li>First wash the potatoes.</li>
<li>Then slice and dice them and put them in boiling fat.</li>
<li>Then slice and dice them and put them in boiling fat.</li>
<li>After a few minutes take them out again.</li>
<li>After a few minutes take them out again.</li>
</ul>
</ul>
<p>Enough for <span class="yield">12</span> children.</p>
<p>Enough for <span class="yield">12 children</span>.</p>
<p class="preparation-time hmeasure">Preparation time is approximately  
<p >Preparation time is approximately  
<span class="num">90</span>
<span class="duration">90 <abbr title="minutes">min</abbr></span>.
<abbr class="unit" title="minutes">min</abbr>.
</p>
</p>
<p class="preparation-time hmeasure">Add  
<p>Add  
<span class="num">5</span>
<span class="duration">5 <abbr class="unit" title="minutes" >min</abbr></span>  
<abbr class="unit" title="minutes" >min</abbr>  
for <span class="note">preparing the Ketchup</span>.
for <span class="note">preparing the Ketchup</span>.
</p>
</p>
<p>This recipe is <a href="http://www.eut.de/tags/difficulty/easy" rel="tag">easy</a> and <a href="http://www.eut.de/tags/tastyness/delicious" rel="tag">delicious</a>.</p>
<p>This recipe is <a href="http://www.eut.de/tags/difficulty/easy" rel="tag">easy</a> and <a href="http://www.eut.de/tags/tastyness/delicious" rel="tag">delicious</a>.</p>
<p class="nutrition hmeasure">
<p class="nutrition hcard">
Pommes Frites have more than  
Pommes Frites have more than  
<span class="num">1000</span>  
<span class="value">1000</span>  
<span class="unit">Joule</span>
<span class="type">Joule</span>
                 <span class="type">Energy</span>.
                 Energy.
</p>
</p>
</div>
</div>

Revision as of 14:19, 11 February 2009

<entry-title>hRecipe 0.2</entry-title> This document represents a draft microformat specification. Although drafts are somewhat mature in the development process, the stability of this document cannot be guaranteed, and implementers should be prepared to keep abreast of future developments and changes. Watch this wiki page, or follow discussions on the #microformats IRC channel to stay up-to-date.

hRecipe.png

hRecipe is a simple, open, distributed format, suitable for embedding information about recipes for cooking in (X)HTML, Atom, RSS, and arbitrary XML. hRecipe is one of several microformats open standards. This page and Microformat is in the public domain.

hRecipe Microformat Draft Specification

Editor

Authors

Contributors

Andy Mabbett, Frances Berriman, Cameron Perry, John LeMasney, Tantek Çelik, SudarshanP, Ciaran McNulty, Lee Jordan, Robert Bachmann, jeffmcneill, Manu Sporny, Ryan King, HollyMarieKoltz, Straup, Christophe Ducamp, Mercman, Yde, Ameer Dawood, Scottk, Lee Jordan, MonroAlmon, EstevaoSamuel, Brian Suda, SteveL, JohnLeMasney,

Microformats #Copyright and #Patents statements apply.


Introduction

The hRecipe microformat is designed for the mark-up of instructions for creating meals, drinks or food-based items.

It is difficult for a browser to extract semantic information about a recipe described on a web page. Metadata such as author and name and details such as ingredients, method, preparation time etc provide relevant information about the recipe.

Having such information marked up can provide a number of benefits to the viewer. If a web browser understands that a particular web page contains a recipe with specific characteristics, it can produce richer interactions. For example, specific searches may be performed for ingredients or authors via general search services such as Google and Wikipedia. Additionally, classification by crawlers can become more accurate. If there are 20 recipes found on a page, and they all contain a certain ingredient, it can be assumed that the page is not only about cooking, but also about that particular ingredient.

In order to enable and encourage the sharing, distribution, syndication, and aggregation of recipes, the authors propose the hRecipe microformat, an open standard for distributed recipe metadata. The authors have researched both numerous recipe-examples in the wild and earlier attempts at recipe-formats, and have designed hRecipe around a simple minimal schema for recipe content. Feedback is encouraged on the hRecipe feedback page.

Inspiration and Acknowledgments

Many thanks to the various individuals that did research and proposed ideas and discussion related to the hRecipe-format and recipes in general.


Scope

hRecipe is a format to annotate descriptions and lists of ingredients for the preparation of food and meals. Recipes consistently share several common elements and fields. hRecipe has been based on this minimal common subset.

Out of scope

Recipes that are not for stuff that's meant to be eaten by humans are out of scope.


Format

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

In General

The hRecipe format is based on a set of fields common to numerous recipe sites and formats in use today on the web. Where possible field names have been chosen based on those defined by related microformat standards.
Some fields are marked experimental since they exceed the minimum set of elements needed to describe a recipe but still are very commonly used on the web. It's not sure if they are relevant enough for inclusion in the format. Implementation and general uptake of these elements will be observed and inform further decisions. So their use is not at all discouraged - but use them with care and be prepared for their eventual removal from the final spec.


Schema

The hRecipe schema consists of the following elements:

  • hrecipe
    • fn. required. text. the name of the recipe. re-used from hCard.
    • ingredient. required. 1 or more. text with optional valid (x)HTML markup.
      • value and type. optional. re-used from hCard.
    • yield. optional. text.
    • instructions. optional. text with optional valid (x)HTML markup.
    • duration. optional. 1 or more. text (see ISO-31-1 duration brainstorming). re-used from hCalendar.
    • photo. optional. 1 or more. using any element containing a URL, such as IMG. re-used from hCard. [experimental]
    • summary. optional. text. re-used from hCalendar. [experimental]
    • author. optional. 1 or more. re-used from hAtom using hCard. [experimental]
    • published. optional. re-used from hAtom. [experimental]
    • nutrition. optional. 1 or more. [experimental]
      • value and type. optional. re-used from hCard. [experimental]
    • tag. optional. 1 or more. re-used from rel-tag. [experimental]


Field details

Class names fn, photo</code, value and type are reused from hCard duration andsummary are reused from hCalendar, author and published are reused from hAtom, tag is reused from rel-tag.

The fields of the hRecipe schema represent the following:

hRecipe

A hRecipe is used to identify and describe values and metadata typically associated with a recipe.

  • A hRecipe element is identified by class name hrecipe

fn

The title of a single recipe. A short textual description used to identify the work among interested parties. This can be the name of a meal or a short description regarding it's ingredients.

  • The element is identified by class name fn.
  • A Recipe MUST include a fn .
  • The element MUST follow the conventions outlined in hCard.

ingredient

Describes one or more ingredients used in the recipe.

  • The element is identified by the class name ingredient.
  • A Recipe MUST include one or more ingredients.
  • The field MAY include valid HTML markup (e.g. a list of ingredients).
  • The element MAY include the fields value and type following the conventions outlined in hCard. In this case each ingredient should be marked up with it's own ingredient element.

yield

Specifies the quantity produced by the recipe, like how many persons it satisfyies or how many pieces can be made of it.

  • The element is identified by the class name yield.
  • A Recipe MAY include a yield.

instructions

The method of the recipe.

  • The element is identified by the class name instructions.
  • A Recipe MAY include a instructions element.
  • The field MAY include valid HTML markup e.g. paragraphs or a list of steps.

duration

The time it takes to prepare the meal described by the recipe. Multiple duration fields can be used to denote e.g. time for preparing a dough, time needed for the dough to raise, time to bake the dough, time for decorating the cake etc.

  • The element is identified by the class name duration.
  • A Recipe MAY include one or more durations.
  • The element MUST follow the conventions outlined in hCalendar.

photo

Accompanying image.

  • The element is identified by the class name photo.
  • A Recipe MAY include one or more photo elements.
  • The element SHOULD use an <img> element.
  • The element MAY use any other element that contains a URL, such as <a> or <object>, but it is not recommended.
  • The contents of the element MUST follow the conventions outlined in hCard.
  • The element is considered experimental and may be removed from the final specification.

summary

The summary provides a short introduction to or an accompanying statement about the recipe.

  • The element is identified by the class name summary.
  • A Recipe MAY include a summary.
  • The element MUST follow the conventions outlined in hCalendar.
  • The element is considered experimental and may be removed from the final specification.

author

An Author is the person who authored the recipe.

  • The element is identified by class name author.
  • A Recipe MAY include one or more author elements.
  • The contents of the element MUST follow the conventions outlined in hCard.
  • The element is considered experimental and may be removed from the final specification.

published

The date the recipe was published.

  • The element is identified by the class name published.
  • A Recipe MAY include a published date.
  • The element MUST follow the conventions outlined in hAtom.
  • The datetime-design-pattern SHOULD be used to encode the published datetime.
  • The element is considered experimental and may be removed from the final specification.

nutrition

Nutritional information like calories, fat, dietary fiber etc.

  • The element is identified by class name nutrition.
  • A Recipe MAY include one or more nutrition elements.
  • The element MAY include the fields value and type following the conventions outlined in hCard. In this case each nutritional information item should be marked up with it's own nutrition element.
  • The element is considered experimental and may be removed from the final specification.

tag

A keyword indicating a subject or an important aspect of the recipe like it's main ingredient, type of meal etc.

  • The element is identified by class name tag.
  • A Recipe MAY include one or more tag elements.
  • The element MUST follow the conventions outlined in rel-tag.
  • The element is considered experimental and may be removed from the final specification.


Version history

From Version 0.1 some elements have been renamed to strenghten re-use of established elements: fn for hRecipe-title, summary for hRecipe-summary, duration for preparation-time, value and type for num and unit. Also some elements have been marked experimental because of concerns of element bloat. See the hrecipe-issues page for a more thorough discussion.


Parser Processing Notes

None so far.


Semantic XHTML Design Principles

Note: the Semantic XHTML Design Principles were written primarily within the context of developing hCard and hCalendar, thus it may be easier to understand these principles in the context of the hCard design methodology (i.e. read that first). Tantek

XHTML is built on XML, and thus XHTML based formats can be used not only for convenient display presentation, but also for general purpose data exchange. In many ways, XHTML based formats exemplify the best of both HTML and XML worlds. However, when building XHTML based formats, it helps to have a guiding set of principles.

  1. Reuse the schema (names, objects, properties, values, types, hierarchies, constraints) as much as possible from pre-existing, established, well-supported standards by reference. Avoid restating constraints expressed in the source standard. Informative mentions are ok.
    1. For types with multiple components, use nested elements with class names equivalent to the names of the components.
    2. Plural components are made singular, and thus multiple nested elements are used to represent multiple text values that are comma-delimited.
  2. Use the most accurately precise semantic XHTML building block for each object etc.
  3. Otherwise use a generic structural element (e.g. <span> or <div>), or the appropriate contextual element (e.g. an <li> inside a <ul> or <ol>).
  4. Use class names based on names from the original schema, unless the semantic XHTML building block precisely represents that part of the original schema. If names in the source schema are case-insensitive, then use an all lowercase equivalent. Components names implicit in prose (rather than explicit in the defined schema) should also use lowercase equivalents for ease of use. Spaces in component names become dash '-' characters.
  5. Finally, if the format of the data according to the original schema is too long and/or not human-friendly, use <abbr> instead of a generic structural element, and place the literal data into the 'title' attribute (where abbr expansions go), and the more brief and human readable equivalent into the element itself. Further informative explanation of this use of <abbr>: Human vs. ISO8601 dates problem solved


More Semantic Equivalents

For some properties there is a more semantic equivalent, and therefore they get special treatment, e.g.:

  • For "photo", use <img class="photo" src="..." alt="" />


Language

  • To explicitly convey the natural language that an recipe is written in, use the standard (X)HTML 'lang' or 'xml:lang' attribute on the element with class="hrecipe"
    • e.g. <p>I like <span class="hrecipe" lang="de"><span class="fn">Kartoffelknödel</span></span> best.</p>
  • If portions of an hRecipe (e.g. an ingredient name) are in a different language to the rest of the hRecipe, use the 'lang' or 'xml:lang' attribute on those portions.
  • hRecipe parsers which need to handle the native language of hRecipe MUST process the standard (X)HTML 'lang' or 'xml:lang' attribute as specified.
  • hRecipe parsers which need to handle native language MAY traverse up the DOM to discover the native language of the page and apply that to the hRecipe if no other language is specified on the hRecipe.


Human vs. Machine Readable

If an <abbr> element is used for a property, then its 'title' attribute is used for the value of the property, instead of the contents of the element, which can then be used to provide a user-friendly alternate presentation of the value.

If an <a> element is used for one or more properties, it MUST be treated as follows:

  1. For the 'photo' property and any other property that takes a URL as its value, the href="..." attribute provides the property value.
  2. For other properties, the element's content is the value of the property.

If an <img> element is used for the 'photo' property, it MUST use the property value provided by the src="..." attribute as property value.

If an <object> element is used for the 'photo' property, it MUST use the property value provided by the data="..." attribute as property value.


Notes

This section is informative.

  • By marking up audio content with the hAudio microformat, the expectation is communicated that information about the content MAY be indexed. This has no impact on the copyright of the content itself which the publisher may explicitly specify using the rel-license microformat.


XMDP Profile

<dl class="profile">
 <dt>class</dt>
 <dd><p>
  <a rel="help" href="http://www.w3.org/TR/html401/struct/global.html#adef-class">
   HTML4 definition of the 'class' attribute.</a>
  This meta data profile defines some 'class' attribute values (class names) 
  and their meanings as suggested by a 
  <a href="http://www.w3.org/TR/WD-htmllink-970328#profile">
   draft of "Hypertext Links in HTML"</a>.</p>
  <dl>
   <dt>hrecipe</dt>
   <dd>
    Used to identify and describe metadata associated with instructions for creating meals, drinks or food-based items.
   </dd>
   <dt>fn</dt>
   <dd>
    The title of the recipe.
   </dd>
   <dt>ingredient</dt>
   <dd>
    Describes the ingredient(s) used in the recipe.
   </dd>
   <dt>yield</dt>
   <dd>
    Specifies the quantity produced by the recipe.
   </dd>
   <dt>instructions</dt>
   <dd>
    The method of the recipe.
   </dd>
   <dt>duration</dt>
   <dd>
    The time it takes to prepare the meal described by the recipe.
   </dd>
   <dt>photo</dt>
   <dd>
    Accompanying image.
   </dd>
   <dt>summary</dt>
   <dd>
    The summary provides a short introduction or an accompanying statement about the recipe.
   </dd>
   <dt>author</dt>
   <dd>
   The person who authored the recipe..
   </dd>
   <dt>published</dt>
   <dd>
    The date that the recipe was made available to the public.
   </dd>
   <dt>nutrition</dt>
   <dd>
    Nutritional information like calories, fat, dietary fiber etc.
   </dd>
   <dt>tag</dt>
   <dd>
    Keyword(s) describing the recipe.
   </dd>
  </dl>
 </dd>
</dl>

Examples

This section is informative.

Here will be a few examples of recipes, from real web sites, showing how they could be easily enhanced to use hRecipe. In the meantime the following contrieved example will have to do.

<div class="hrecipe">
	<p class="fn">Pommes Frites</p>
	<p class="summary">
		Pommes frites originate in outer space. They are served hot.<br />
		This recipe is only an example. Don't try this at home!
	</p>
	<p class="vcard fn">Thomas Loertsch</p>
	<p>Published <abbr class="published" title="2008-10-14T10:05:37-01:00">14. Oct 2008</abbr></p>
	<img src="/img/pommes.png" class="photo" width="100" height="100" alt="Pommes Frites"/>
	<p class="ingredient hcard">
		<span class="value">500</span> 
		<span class="type">gramme</span>
		potatoes, hard cooking.
	</p>
	<ul class="instructions">
		<li>First wash the potatoes.</li>
		<li>Then slice and dice them and put them in boiling fat.</li>
		<li>After a few minutes take them out again.</li>
	</ul>
	<p>Enough for <span class="yield">12 children</span>.</p>
	<p >Preparation time is approximately 
		<span  class="duration">90 <abbr  title="minutes">min</abbr></span>.
	</p>
	<p>Add 
		<span  class="duration">5 <abbr class="unit" title="minutes" >min</abbr></span> 
		for <span class="note">preparing the Ketchup</span>.
	</p>
	<p>This recipe is <a href="http://www.eut.de/tags/difficulty/easy" rel="tag">easy</a> and <a href="http://www.eut.de/tags/tastyness/delicious" rel="tag">delicious</a>.</p>
	<p class="nutrition hcard">
		Pommes Frites have more than 
		<span class="value">1000</span> 
		<span class="type">Joule</span>
                Energy.
	</p>
</div>

Examples in the wild

This section is informative.

Wild Mushroom, Pancetta & Truffle Risotto by Toby Inkster


Implementations

This section is informative.

  • Cognition

As of September 2008, Cognition has experimental support for this format. (Details of support.) Recipes may be exported in RecipeBook XML format or RDF.

References

Normative References

Informative References

Copyright

This document and hAudio specification was placed into the public domain on 2008-11-14 by the authors. There are no usage, distribution, re-printing, or any other restrictions of any kind with regards to the text or content of this specification.

Patents

This specification is subject to a royalty free patent policy, e.g. per the W3C Patent Policy, and IETF RFC3667 & RFC3668.

Public Domain Release

The authors and editors of this page due hereby relinquish their copyright on the document and release the text of this page into the public domain.

Work in progress

This specification is a work in progress. As additional aspects are discussed, understood, and written, they will be added.

related pages

Per the microformats process, the recipe effort developed

towards the development of this draft.