The following table lists the complete CookML data structure. It contains required/mandatory elements and optional elements. Required elements must be supported and handled for any application, while optional elements are not. If an application is not able to handle optional or unknown elements (e.g. because the implementation is older than the version of the dataset), these must be ignored without any warning or error message.

Some additional notes:

  • The used character set is UTF8
  • For some (new) elements, "rtf" as datatype is possible. If an application is supporting this, it’s required to export always also a plain-text version of the same information using the datatype "text"
  • Preparation: Programs must handle the import of both "text" and "step" but can transform it for internal storage or export only in one of both
  • Picbin: "format": Programs must support "jpg". Other formats are allowed, but there is risk that other Programs are not able to handle that
  • "rid": is the unique identifier for a recipe. See definition here
  • Tags or elements marked with "!" are required, if the parent element is used
  • New tags or elements are marked bold

cookmlElementXRoot of the actual data1.1.2
 versionTagXRevision number of the CML specification use to create the instance file1.1.2
 nameTagXName of the recipe collection contained in this file1.1.2
 progTagXName of the program which generated this instance1.1.2
 progverTagXVersion number of “prog”1.1.2
 recipeElementXRoot of the individual recipe (Sequence)1.1.2
  langTag Language used in the recipe1.1.2
  headElementXInformational data to a recipe1.1.2
   titleTagXTitle of the recipe1.1.2
   ridTag Unique recipe identifier1.1.2
   servingqtyTagXServing quantity1.1.2
   servingtypeTagXUnit of serving quantity (person, piece, etc.)1.1.2
   createdateTag Creating date1.1.2
   createuserTag Creator/Recorder of recipe1.1.2
   createemailTag EMail of creator1.1.2
   changedateTag Date of the most recent change1.1.2
   changeuserTag Person, who made the most recent change1.1.2
   changeemailTag EMail of “changeuser”1.1.2
   timeallqtyTag Total preparation time for the recipe1.1.2
   timeprepqtyTag Preparation time1.1.2
   timecookqtyTag Cooking time1.1.2
   costsTag Cost of the recipe1.1.2
   countryTag Producing country1.1.2
   proteinsTag Quantity of proteins1.1.2
   carbohydratesTag Quantity of carbohydrates1.1.2
   fatTag Quantity of fat1.1.2
   wwpointsTag Weight-Watcher points or something like that1.1.2
   catElementXCategories (recipe grouping) (Sequence)1.1.2
   hintElement Key words for the recipe (Sequence)1.1.2
   sourcelineElement Free format information to the recipe source (Sequence)1.1.2
   cardElement Detailed description of the recipe (e.g. for a restaurant menu) (Sequence)1.1.2
   allergiesElement Allergic substances1.1.2
    allergyTag!Data for an allergic substance (Sequence)1.1.2
    nameTag!Name of the allergic substance1.1.2
    containsTag!Is allergic substance in the recipe1.1.2
   contentElement Information on substances contained in recipe ingredients1.1.2
    typeTag!Type of substance1.1.2
    valueTag!Value/quantity of substance1.1.2
   pictureElement Image of the recipe (Sequence)1.1.2
    fileTag!Path to the image, either local or on the web1.1.2
   picbinElement Image of the recipe, embedded in the XML file (Sequence)1.1.2
    formatTag!Format of the embedded image1.1.2
  customElement Field for additional data1.1.2
   nameTag!Name of the “custom” field1.1.2
   datatypeTag!Data type of the custom field1.1.2
   valueTag!Value of the custom field1.1.2
  partElementXGrouping of an ingredient unit (Sequence)1.1.2
   titleTagXTitle of the ingredient unit1.1.2
   ingredientElementXIngredient (root of each ingredient) (Sequence)1.1.2
    qtyTagXRequired quanity of ingredient1.1.2
    unitTagXUnit of the ingredient1.1.2
    itemTagXName of the ingredient1.1.2
    inoteElement Additional information, explanations to the ingredient in plain text (Sequence)1.1.2
    blsTag The ingredients BLS-Code (BLS – Bundeslebensmittelschlüssel)1.1.2
    gramTag Approximite value in grams for units which are not directly convertible1.1.2
    shopTag Flag, include in shopping list1.1.2
    calcTag Flag, ingredient should be considered in the nutrional calculation1.1.2
    ridlinkTag RID to a recipe which is used as an ingredient1.1.2
    preparationElement Preparation instructions for this particular ingredient1.1.2
  preparationElementXPreparation/Recipe instructions1.1.2
   textElementXPreparation instructions as a block of text1.1.2
   stepElementXPrepartion instructions as individual steps (Sequence)1.1.2
  remarkElement Remarks of a user/cook1.1.2
   userTag The name of the person making the remark1.1.2
   lineTag The remark1.1.2
 menuElement The root of a menu1.1.2
  titleTag!Name of the menu1.1.2
  dateTag Date the menue was served or planned to serve1.1.3
  yieldTag Number of persons the menu was prepared for1.1.2
  frontpageElement Text for the front page of the menucard (Sequence)1.1.3
   datatypeTag Datatype of the content, if "rtf" is used, repeat also with plain "text"1.1.3
  backpageElement Text for the back page of the menucard (Sequence)1.1.3
   datatypeTag Datatype of the content, if "rtf" is used, repeat also with plain "text"1.1.3
  mcustomElement Field for additional data1.1.2
   nameTag Name of the “mcustom” field1.1.2
   datatypeTag Data type of the “mcustom” field1.1.2
   valueTag Value of the “mcustom” field1.1.2
  mrecipeElement Recipe of a menu1.1.2
   titleTag Title of the recipe menu item1.1.2
   ridTag “rid” – recipe identifier of the recipe menu item1.1.2
   amountTag Quantity for the recipe menu item (in the unit of the recipe)1.1.2
   personsTag Quantity of the menu item (always in the unit “person”)1.1.2
   descElement Additional information to the recipe menu item1.1.2