{
  "$schema": "https://sous.pras.ai/schema/v0/domain.schema.json",
  "vocabulary": "core-ingredients",
  "version": "0.7.0",
  "description": "Starter set of common substances. Sous does NOT define a food taxonomy: this is a convenience layer over FoodOn, and any recipe may reference a foodon:, fdc: or gtin: CURIE that is not listed here. Every mapping is resolved by tools/sous_map_terms.py against the live ontology; none are hand-written.",
  "allergen_vocabulary": {
    "values": [
      "gluten",
      "crustacean",
      "egg",
      "fish",
      "peanut",
      "soy",
      "milk",
      "tree_nut",
      "celery",
      "mustard",
      "sesame",
      "sulphite",
      "lupin",
      "mollusc"
    ],
    "basis": "Union of the EU FIC Annex II 14 allergens and the US FALCPA/FASTER 9 major allergens.",
    "note": "Allergens propagate through the operation graph; see docs/spec/SAFETY.md."
  },
  "property_notes": {
    "ap_to_ep": "As-purchased to edible-portion mass yield after standard trimming and peeling. Approximate food-service figures, advisory only; a quantity with an explicit `basis` always wins.",
    "density_g_per_ml": "For volume-to-mass conversion. Present only where a defensible figure exists. Dry solids measured by volume carry large error (a cup of flour varies by 20% with packing) and the validator warns on them.",
    "count_to_mass": "Mass equivalence for count units, with a fractional tolerance. Real produce varies widely: a supermarket 'medium onion' spans roughly 90-135 g against a USDA figure of 130-148 g. Mass is authoritative when both are given."
  },
  "default_state_by_category": {
    "note": "Initial facet values for a substance that declares no default_state of its own. Covers the common case so that adding an ingredient needs no per-item data; substances whose purchased form still requires prep override it.",
    "values": {
      "vegetable": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      },
      "fruit": {
        "affordances": [
          "cuttable"
        ]
      },
      "protein": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      },
      "dairy_egg": {
        "affordances": [
          "cuttable"
        ]
      },
      "grain_starch": {
        "affordances": [
          "cuttable"
        ]
      },
      "legume_nut_seed": {
        "affordances": [
          "cuttable"
        ]
      },
      "herb_spice": {
        "affordances": [
          "cuttable"
        ]
      },
      "fat_oil": {
        "affordances": []
      },
      "condiment_liquid": {
        "affordances": []
      },
      "baking": {
        "affordances": []
      }
    }
  },
  "substances": {
    "onion": {
      "label": "onion",
      "category": "vegetable",
      "ontology_ref": "foodon:03316347",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.89,
      "count_to_mass": {
        "grams": {
          "small": 90,
          "medium": 140,
          "large": 200
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "onion",
      "default_state": {
        "affordances": [
          "peelable"
        ]
      }
    },
    "red_onion": {
      "label": "red onion",
      "category": "vegetable",
      "ontology_ref": "foodon:00003516",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.89,
      "count_to_mass": {
        "grams": {
          "medium": 140
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "red onion",
      "default_state": {
        "affordances": [
          "peelable"
        ]
      }
    },
    "shallot": {
      "label": "shallot",
      "category": "vegetable",
      "ontology_ref": "foodon:00003748",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "medium": 30
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "shallot",
      "default_state": {
        "affordances": [
          "peelable"
        ]
      }
    },
    "scallion": {
      "label": "scallion",
      "category": "vegetable",
      "ontology_ref": "foodon:00003697",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.75,
      "count_to_mass": {
        "grams": {
          "each": 15
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "scallion",
      "aliases": [
        "green onion",
        "green onions",
        "salad onion",
        "spring onion"
      ]
    },
    "leek": {
      "label": "leek",
      "category": "vegetable",
      "ontology_ref": "foodon:00003670",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.52,
      "count_to_mass": {
        "grams": {
          "medium": 120
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "leek"
    },
    "garlic": {
      "label": "garlic",
      "category": "vegetable",
      "mapping_query": "garlic bulb",
      "ontology_ref": "foodon:00003582",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "clove": 4,
          "head": 45
        },
        "tolerance": 0.4
      },
      "mapping_matched_label": "garlic bulb",
      "default_state": {
        "affordances": [
          "peelable"
        ]
      }
    },
    "carrot": {
      "label": "carrot",
      "category": "vegetable",
      "mapping_query": "carrot root (raw)",
      "ontology_ref": "foodon:03301570",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.81,
      "count_to_mass": {
        "grams": {
          "small": 40,
          "medium": 61,
          "large": 90
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "carrot root (raw)",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "celery": {
      "label": "celery",
      "category": "vegetable",
      "ontology_ref": "foodon:03301727",
      "mapping_status": "approximate",
      "allergens": [
        "celery"
      ],
      "ap_to_ep": 0.75,
      "count_to_mass": {
        "grams": {
          "stalk": 40
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "celery stalk (raw)"
    },
    "potato": {
      "label": "potato",
      "category": "vegetable",
      "ontology_ref": "foodon:03315354",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.81,
      "count_to_mass": {
        "grams": {
          "small": 120,
          "medium": 213,
          "large": 300
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "potato",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "sweet_potato": {
      "label": "sweet potato",
      "category": "vegetable",
      "ontology_ref": "foodon:00003445",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.8,
      "count_to_mass": {
        "grams": {
          "medium": 150
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "sweet potato",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "tomato": {
      "label": "tomato",
      "category": "vegetable",
      "ontology_ref": "foodon:03301453",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.91,
      "count_to_mass": {
        "grams": {
          "small": 90,
          "medium": 123,
          "large": 180
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "tomato",
      "default_state": {
        "affordances": [
          "cuttable",
          "destemmable"
        ]
      }
    },
    "cherry_tomato": {
      "label": "cherry tomato",
      "category": "vegetable",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 17
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "10006162 - cherry tomatoes - round (gs1 gpc)",
      "default_state": {
        "affordances": [
          "cuttable",
          "destemmable"
        ]
      }
    },
    "bell_pepper": {
      "label": "bell pepper",
      "category": "vegetable",
      "ontology_ref": "foodon:00003546",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.82,
      "count_to_mass": {
        "grams": {
          "medium": 119
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "bell pepper",
      "default_state": {
        "affordances": [
          "cuttable",
          "deseedable",
          "destemmable"
        ]
      }
    },
    "chili_pepper": {
      "label": "chili pepper",
      "category": "vegetable",
      "ontology_ref": "foodon:00003744",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.85,
      "count_to_mass": {
        "grams": {
          "each": 15
        },
        "tolerance": 0.5
      },
      "mapping_matched_label": "chili pepper",
      "default_state": {
        "affordances": [
          "cuttable",
          "deseedable",
          "destemmable"
        ]
      },
      "specialises": "chili"
    },
    "cucumber": {
      "label": "cucumber",
      "category": "vegetable",
      "ontology_ref": "foodon:00003415",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.95,
      "count_to_mass": {
        "grams": {
          "medium": 200
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "cucumber",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable"
        ]
      }
    },
    "courgette": {
      "label": "zucchini",
      "category": "vegetable",
      "ontology_ref": "foodon:00002448",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.95,
      "count_to_mass": {
        "grams": {
          "medium": 196
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "zucchini food product",
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "aubergine": {
      "label": "eggplant",
      "category": "vegetable",
      "ontology_ref": "foodon:00003618",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.81,
      "count_to_mass": {
        "grams": {
          "medium": 250
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "eggplant",
      "default_state": {
        "affordances": [
          "cuttable",
          "destemmable"
        ]
      }
    },
    "mushroom": {
      "label": "mushroom",
      "category": "vegetable",
      "ontology_ref": "foodon:00003528",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 0.97,
      "count_to_mass": {
        "grams": {
          "each": 18
        },
        "tolerance": 0.4
      },
      "mapping_matched_label": "mushroom fruitbody",
      "mapping_note": "The edible part. Generic; a recipe wanting button mushroom should use foodon:00003462.",
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "broccoli": {
      "label": "broccoli",
      "category": "vegetable",
      "ontology_ref": "foodon:03301713",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.61,
      "count_to_mass": {
        "grams": {
          "head": 300
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "broccoli floret (raw)",
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "cauliflower": {
      "label": "cauliflower",
      "category": "vegetable",
      "ontology_ref": "foodon:03302732",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.55,
      "count_to_mass": {
        "grams": {
          "head": 600
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "cauliflower floret (raw)",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "cabbage": {
      "label": "cabbage",
      "category": "vegetable",
      "ontology_ref": "foodon:00003406",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.8,
      "count_to_mass": {
        "grams": {
          "head": 900
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "cabbage head",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "spinach": {
      "label": "spinach",
      "category": "vegetable",
      "ontology_ref": "foodon:03301716",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.88,
      "mapping_matched_label": "spinach leaf (raw)"
    },
    "kale": {
      "label": "kale",
      "category": "vegetable",
      "ontology_ref": "foodon:00003506",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.6,
      "mapping_matched_label": "kale greens bunch",
      "default_state": {
        "affordances": [
          "cuttable",
          "destemmable"
        ]
      }
    },
    "lettuce": {
      "label": "lettuce",
      "category": "vegetable",
      "ontology_ref": "foodon:00001998",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.74,
      "count_to_mass": {
        "grams": {
          "head": 300
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "lettuce head food product",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "green_bean": {
      "label": "green bean",
      "category": "vegetable",
      "ontology_ref": "foodon:00004236",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.88,
      "mapping_matched_label": "green bean pod (raw)"
    },
    "pea": {
      "label": "pea",
      "category": "vegetable",
      "ontology_ref": "foodon:03301300",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "pea"
    },
    "corn": {
      "label": "sweet corn",
      "category": "vegetable",
      "ontology_ref": "foodon:03301422",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.36,
      "count_to_mass": {
        "grams": {
          "ear": 250
        },
        "tolerance": 0.25
      },
      "mapping_matched_label": "sweet corn kernel (raw)",
      "default_state": {
        "affordances": [
          "huskable"
        ]
      }
    },
    "asparagus": {
      "label": "asparagus",
      "category": "vegetable",
      "ontology_ref": "foodon:03311349",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.53,
      "count_to_mass": {
        "grams": {
          "spear": 16
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "asparagus spear (raw)"
    },
    "brussels_sprout": {
      "label": "brussels sprout",
      "category": "vegetable",
      "ontology_ref": "foodon:03311885",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.76,
      "count_to_mass": {
        "grams": {
          "each": 19
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "brussels sprout"
    },
    "beetroot": {
      "label": "beet",
      "category": "vegetable",
      "ontology_ref": "foodon:03306696",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 0.77,
      "count_to_mass": {
        "grams": {
          "medium": 82
        },
        "tolerance": 0.3
      },
      "mapping_query": "beet root",
      "mapping_matched_label": "beet (raw)",
      "mapping_note": "The generic matcher preferred 'beet leaf'; recipes calling for beetroot mean the root.",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "parsnip": {
      "label": "parsnip",
      "category": "vegetable",
      "ontology_ref": "foodon:00003693",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.8,
      "count_to_mass": {
        "grams": {
          "medium": 130
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "parsnip",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "turnip": {
      "label": "turnip",
      "category": "vegetable",
      "ontology_ref": "foodon:00003447",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.78,
      "count_to_mass": {
        "grams": {
          "medium": 122
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "turnip",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "trimmable"
        ]
      }
    },
    "pumpkin": {
      "label": "pumpkin",
      "category": "vegetable",
      "ontology_ref": "foodon:00003486",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.71,
      "mapping_matched_label": "pumpkin",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "deseedable"
        ]
      }
    },
    "butternut_squash": {
      "label": "butternut squash",
      "category": "vegetable",
      "ontology_ref": "foodon:00005354",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.71,
      "count_to_mass": {
        "grams": {
          "medium": 900
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "butternut squash",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "deseedable"
        ]
      }
    },
    "ginger": {
      "label": "ginger",
      "category": "vegetable",
      "mapping_query": "ginger root",
      "ontology_ref": "foodon:00003717",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.85,
      "mapping_matched_label": "ginger root",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable"
        ]
      }
    },
    "fennel": {
      "label": "fennel",
      "category": "vegetable",
      "ontology_ref": "foodon:00005222",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.72,
      "count_to_mass": {
        "grams": {
          "bulb": 230
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "fennel bulb (raw)"
    },
    "radish": {
      "label": "radish",
      "category": "vegetable",
      "ontology_ref": "foodon:00003431",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.9,
      "count_to_mass": {
        "grams": {
          "each": 9
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "radish"
    },
    "okra": {
      "label": "okra",
      "category": "vegetable",
      "ontology_ref": "foodon:03301828",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.86,
      "mapping_matched_label": "okra (raw)"
    },
    "bok_choy": {
      "label": "bok choy",
      "category": "vegetable",
      "ontology_ref": "foodon:00003895",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.85,
      "mapping_matched_label": "bok choy leaf"
    },
    "olive": {
      "label": "olive",
      "category": "fruit",
      "ontology_ref": "foodon:03317509",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.85,
      "mapping_matched_label": "olive",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "lemon": {
      "label": "lemon",
      "category": "fruit",
      "ontology_ref": "foodon:03315104",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.45,
      "count_to_mass": {
        "grams": {
          "medium": 58
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "lemon",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "juiceable",
          "zestable"
        ]
      }
    },
    "lime": {
      "label": "lime",
      "category": "fruit",
      "ontology_ref": "foodon:00003661",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.42,
      "count_to_mass": {
        "grams": {
          "medium": 44
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "lime",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "juiceable",
          "zestable"
        ]
      }
    },
    "orange": {
      "label": "orange",
      "category": "fruit",
      "ontology_ref": "foodon:03315106",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.68,
      "count_to_mass": {
        "grams": {
          "medium": 131
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "orange",
      "default_state": {
        "affordances": [
          "cuttable",
          "peelable",
          "juiceable",
          "zestable"
        ]
      }
    },
    "apple": {
      "label": "apple",
      "category": "fruit",
      "ontology_ref": "foodon:00002473",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.88,
      "count_to_mass": {
        "grams": {
          "medium": 182
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "apple",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable",
          "peelable"
        ]
      }
    },
    "pear": {
      "label": "pear",
      "category": "fruit",
      "ontology_ref": "foodon:00003041",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.9,
      "count_to_mass": {
        "grams": {
          "medium": 178
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "pear",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable",
          "peelable"
        ]
      }
    },
    "banana": {
      "label": "banana",
      "category": "fruit",
      "ontology_ref": "foodon:00004183",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.65,
      "count_to_mass": {
        "grams": {
          "medium": 118
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "banana",
      "default_state": {
        "affordances": [
          "peelable"
        ]
      }
    },
    "strawberry": {
      "label": "strawberry",
      "category": "fruit",
      "ontology_ref": "foodon:00003443",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.94,
      "count_to_mass": {
        "grams": {
          "each": 12
        },
        "tolerance": 0.4
      },
      "mapping_matched_label": "strawberry"
    },
    "blueberry": {
      "label": "blueberry",
      "category": "fruit",
      "ontology_ref": "foodon:00003541",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "blueberry"
    },
    "raspberry": {
      "label": "raspberry",
      "category": "fruit",
      "ontology_ref": "foodon:00003433",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "raspberry"
    },
    "grape": {
      "label": "grape",
      "category": "fruit",
      "ontology_ref": "foodon:00003417",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "grape"
    },
    "peach": {
      "label": "peach",
      "category": "fruit",
      "ontology_ref": "foodon:03315502",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "medium": 150
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "peach",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "mango": {
      "label": "mango",
      "category": "fruit",
      "ontology_ref": "foodon:00003538",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.69,
      "count_to_mass": {
        "grams": {
          "medium": 200
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "mango",
      "default_state": {
        "affordances": [
          "peelable",
          "corable"
        ]
      }
    },
    "avocado": {
      "label": "avocado",
      "category": "fruit",
      "ontology_ref": "foodon:00003600",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.74,
      "count_to_mass": {
        "grams": {
          "medium": 150
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "avocado",
      "default_state": {
        "affordances": [
          "peelable",
          "corable"
        ]
      }
    },
    "pineapple": {
      "label": "pineapple",
      "category": "fruit",
      "ontology_ref": "foodon:00003459",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.52,
      "mapping_matched_label": "pineapple",
      "default_state": {
        "affordances": [
          "peelable",
          "corable"
        ]
      }
    },
    "coconut": {
      "label": "coconut",
      "category": "fruit",
      "ontology_ref": "foodon:00003449",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.53,
      "mapping_matched_label": "coconut",
      "default_state": {
        "affordances": [
          "shellable"
        ]
      }
    },
    "date": {
      "label": "date",
      "category": "fruit",
      "ontology_ref": "foodon:03304506",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "each": 8
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "date (raw)",
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "raisin": {
      "label": "raisin",
      "category": "fruit",
      "ontology_ref": "foodon:03301283",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "raisin"
    },
    "cranberry": {
      "label": "cranberry",
      "category": "fruit",
      "ontology_ref": "foodon:00003657",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cranberry"
    },
    "beef": {
      "label": "beef",
      "category": "protein",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [],
      "ap_to_ep": 0.9,
      "mapping_exact_only": true,
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "beef_chuck": {
      "label": "beef chuck",
      "category": "protein",
      "ontology_ref": "foodon:02000045",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.85,
      "mapping_matched_label": "beef chuck",
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "beef_steak": {
      "label": "beef steak",
      "category": "protein",
      "ontology_ref": "foodon:00003029",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.95,
      "mapping_matched_label": "beef steak"
    },
    "beef_mince": {
      "label": "ground beef",
      "category": "protein",
      "ontology_ref": "foodon:00001282",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_query": "ground beef",
      "mapping_matched_label": "beef (ground)",
      "mapping_note": "The generic matcher preferred 'ground beef (soy-extended)', which would inject a false soy allergen."
    },
    "pork": {
      "label": "pork",
      "category": "protein",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [],
      "ap_to_ep": 0.9,
      "mapping_exact_only": true,
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "pork_belly": {
      "label": "pork belly",
      "category": "protein",
      "ontology_ref": "foodon:02000281",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.95,
      "mapping_matched_label": "pork belly"
    },
    "bacon": {
      "label": "bacon",
      "category": "protein",
      "ontology_ref": "foodon:03301955",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "rasher": 25
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "bacon (raw)"
    },
    "sausage": {
      "label": "sausage",
      "category": "protein",
      "ontology_ref": "foodon:03315904",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 75
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "meat sausage"
    },
    "ham": {
      "label": "ham",
      "category": "protein",
      "ontology_ref": "foodon:00005591",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "ham"
    },
    "lamb": {
      "label": "lamb",
      "category": "protein",
      "ontology_ref": "foodon:03411669",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.88,
      "mapping_exact_only": true,
      "mapping_matched_label": "lamb",
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "chicken": {
      "label": "chicken",
      "category": "protein",
      "ontology_ref": "foodon:03411457",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.68,
      "count_to_mass": {
        "grams": {
          "whole": 1500
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "chicken",
      "default_state": {
        "affordances": [
          "cuttable",
          "deboneable",
          "skinnable"
        ]
      }
    },
    "chicken_breast": {
      "label": "chicken breast",
      "category": "protein",
      "ontology_ref": "foodon:00002703",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.95,
      "count_to_mass": {
        "grams": {
          "each": 175
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "chicken breast"
    },
    "chicken_thigh": {
      "label": "chicken thigh",
      "category": "protein",
      "ontology_ref": "foodon:02020219",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.85,
      "count_to_mass": {
        "grams": {
          "each": 90
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "chicken thigh"
    },
    "turkey": {
      "label": "turkey",
      "category": "protein",
      "ontology_ref": "foodon:02020418",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.68,
      "mapping_matched_label": "turkey",
      "default_state": {
        "affordances": [
          "cuttable",
          "deboneable",
          "skinnable"
        ]
      }
    },
    "duck": {
      "label": "duck",
      "category": "protein",
      "ontology_ref": "foodon:03411316",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.65,
      "mapping_matched_label": "duck",
      "default_state": {
        "affordances": [
          "cuttable",
          "deboneable",
          "skinnable"
        ]
      }
    },
    "salmon": {
      "label": "salmon",
      "category": "protein",
      "ontology_ref": "foodon:00003473",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 0.85,
      "count_to_mass": {
        "grams": {
          "fillet": 170
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "salmon",
      "default_state": {
        "affordances": [
          "cuttable",
          "skinnable",
          "deboneable"
        ]
      }
    },
    "cod": {
      "label": "cod",
      "category": "protein",
      "ontology_ref": "foodon:03411423",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 0.85,
      "count_to_mass": {
        "grams": {
          "fillet": 150
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "cod",
      "default_state": {
        "affordances": [
          "cuttable",
          "skinnable",
          "deboneable"
        ]
      }
    },
    "tuna": {
      "label": "tuna",
      "category": "protein",
      "ontology_ref": "foodon:03411269",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 0.9,
      "mapping_matched_label": "tuna",
      "default_state": {
        "affordances": [
          "cuttable",
          "skinnable"
        ]
      }
    },
    "anchovy": {
      "label": "anchovy",
      "category": "protein",
      "ontology_ref": "foodon:03316282",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "fillet": 4
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "anchovy"
    },
    "prawn": {
      "label": "shrimp",
      "category": "protein",
      "ontology_ref": "foodon:03411237",
      "mapping_status": "resolved",
      "allergens": [
        "crustacean"
      ],
      "ap_to_ep": 0.62,
      "count_to_mass": {
        "grams": {
          "each": 12
        },
        "tolerance": 0.4
      },
      "mapping_matched_label": "shrimp",
      "default_state": {
        "affordances": [
          "shellable",
          "deveinable"
        ]
      }
    },
    "crab": {
      "label": "crab",
      "category": "protein",
      "ontology_ref": "foodon:02021446",
      "mapping_status": "resolved",
      "allergens": [
        "crustacean"
      ],
      "ap_to_ep": 0.3,
      "mapping_matched_label": "crab",
      "default_state": {
        "affordances": [
          "shellable"
        ]
      }
    },
    "mussel": {
      "label": "mussel",
      "category": "protein",
      "ontology_ref": "foodon:03411223",
      "mapping_status": "resolved",
      "allergens": [
        "mollusc"
      ],
      "ap_to_ep": 0.3,
      "count_to_mass": {
        "grams": {
          "each": 12
        },
        "tolerance": 0.35
      },
      "mapping_matched_label": "mussel",
      "default_state": {
        "affordances": [
          "shellable",
          "trimmable"
        ]
      }
    },
    "squid": {
      "label": "squid",
      "category": "protein",
      "ontology_ref": "foodon:00002273",
      "mapping_status": "curated",
      "allergens": [
        "mollusc"
      ],
      "ap_to_ep": 0.75,
      "mapping_matched_label": "squid food product",
      "default_state": {
        "affordances": [
          "cuttable",
          "guttable"
        ]
      }
    },
    "tofu": {
      "label": "tofu",
      "category": "protein",
      "ontology_ref": "foodon:00004697",
      "mapping_status": "resolved",
      "allergens": [
        "soy"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "tofu"
    },
    "tempeh": {
      "label": "tempeh",
      "category": "protein",
      "ontology_ref": "foodon:03304999",
      "mapping_status": "resolved",
      "allergens": [
        "soy"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "tempeh"
    },
    "egg": {
      "label": "chicken egg",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03316061",
      "mapping_status": "resolved",
      "allergens": [
        "egg"
      ],
      "ap_to_ep": 0.88,
      "count_to_mass": {
        "grams": {
          "medium": 50,
          "large": 57
        },
        "tolerance": 0.15
      },
      "mapping_matched_label": "chicken egg",
      "default_state": {
        "affordances": [
          "shellable"
        ]
      }
    },
    "egg_yolk": {
      "label": "egg yolk",
      "category": "dairy_egg",
      "ontology_ref": "uberon:0007378",
      "mapping_status": "resolved",
      "allergens": [
        "egg"
      ],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 18
        },
        "tolerance": 0.2
      },
      "mapping_matched_label": "egg yolk"
    },
    "egg_white": {
      "label": "egg white",
      "category": "dairy_egg",
      "ontology_ref": "foodon:02020155",
      "mapping_status": "resolved",
      "allergens": [
        "egg"
      ],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 33
        },
        "tolerance": 0.2
      },
      "mapping_query": "chicken egg white",
      "mapping_matched_label": "chicken egg white"
    },
    "milk": {
      "label": "milk",
      "category": "dairy_egg",
      "ontology_ref": "uberon:0001913",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.03,
      "mapping_matched_label": "milk"
    },
    "cream": {
      "label": "cream",
      "category": "dairy_egg",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_matched_label": "cream product analog (us cfr)"
    },
    "sour_cream": {
      "label": "sour cream",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03302515",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_matched_label": "sour cream"
    },
    "yoghurt": {
      "label": "yogurt",
      "category": "dairy_egg",
      "ontology_ref": "foodon:00001014",
      "mapping_status": "approximate",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.03,
      "mapping_matched_label": "yogurt food product"
    },
    "butter": {
      "label": "butter",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03310351",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.911,
      "count_to_mass": {
        "grams": {
          "stick_us": 113
        },
        "tolerance": 0.05
      },
      "mapping_matched_label": "butter",
      "aliases": [
        "salted butter",
        "sweet butter",
        "unsalted butter"
      ]
    },
    "cheddar": {
      "label": "cheddar cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03302458",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cheddar cheese",
      "specialises": "cheese"
    },
    "parmesan": {
      "label": "parmesan cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:00003247",
      "mapping_status": "approximate",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "parmesan cheese food product",
      "specialises": "cheese"
    },
    "mozzarella": {
      "label": "mozzarella cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03303578",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "mozzarella cheese",
      "specialises": "cheese"
    },
    "feta": {
      "label": "feta cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03307280",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "feta cheese",
      "specialises": "cheese"
    },
    "cream_cheese": {
      "label": "cream cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03301889",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cream cheese",
      "specialises": "cheese",
      "aliases": [
        "soft cheese"
      ]
    },
    "ricotta": {
      "label": "ricotta cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03302908",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "ricotta cheese",
      "specialises": "cheese"
    },
    "flour_ap": {
      "label": "all-purpose flour",
      "category": "grain_starch",
      "mapping_query": "wheat flour",
      "ontology_ref": "foodon:00001210",
      "mapping_status": "approximate",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.528,
      "mapping_matched_label": "wheat flour food product",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      },
      "specialises": "flour",
      "aliases": [
        "all purpose flour",
        "ap flour",
        "plain flour"
      ]
    },
    "flour_bread": {
      "label": "bread flour",
      "category": "grain_starch",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.54,
      "mapping_matched_label": "white bread flour",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      },
      "specialises": "flour"
    },
    "flour_wholemeal": {
      "label": "whole wheat flour",
      "category": "grain_starch",
      "ontology_ref": "foodon:03302340",
      "mapping_status": "resolved",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.5,
      "mapping_matched_label": "whole wheat flour",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      },
      "specialises": "flour"
    },
    "cornflour": {
      "label": "cornstarch",
      "category": "grain_starch",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.507,
      "mapping_query": "cornstarch",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      },
      "aliases": [
        "corn flour",
        "corn starch",
        "cornstarch"
      ]
    },
    "rice_white": {
      "label": "white rice",
      "category": "grain_starch",
      "ontology_ref": "foodon:00003787",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.78,
      "mapping_matched_label": "white rice",
      "specialises": "rice"
    },
    "rice_brown": {
      "label": "brown rice",
      "category": "grain_starch",
      "ontology_ref": "foodon:00004679",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.775,
      "mapping_matched_label": "brown rice kernel (raw)",
      "specialises": "rice"
    },
    "pasta_dry": {
      "label": "dry pasta",
      "category": "grain_starch",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true
    },
    "bread": {
      "label": "bread",
      "category": "grain_starch",
      "ontology_ref": "foodon:03000288",
      "mapping_status": "resolved",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "slice": 30
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "bread"
    },
    "breadcrumb": {
      "label": "bread crumb",
      "category": "grain_starch",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.45,
      "mapping_exact_only": true,
      "mapping_query": "bread crumb"
    },
    "oat": {
      "label": "oat",
      "category": "grain_starch",
      "ontology_ref": "foodon:00003429",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.38,
      "mapping_matched_label": "oat"
    },
    "couscous": {
      "label": "couscous",
      "category": "grain_starch",
      "ontology_ref": "foodon:00005532",
      "mapping_status": "resolved",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "couscous"
    },
    "quinoa": {
      "label": "quinoa",
      "category": "grain_starch",
      "ontology_ref": "foodon:00001192",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.74,
      "mapping_matched_label": "quinoa food product"
    },
    "barley": {
      "label": "barley",
      "category": "grain_starch",
      "ontology_ref": "foodon:00003108",
      "mapping_status": "approximate",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "barley seed (raw)"
    },
    "polenta": {
      "label": "polenta",
      "category": "grain_starch",
      "ontology_ref": "foodon:03317508",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "polenta"
    },
    "tortilla": {
      "label": "tortilla",
      "category": "grain_starch",
      "ontology_ref": "foodon:03307668",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 35
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "tortilla"
    },
    "noodle": {
      "label": "noodle",
      "category": "grain_starch",
      "ontology_ref": "foodon:03306944",
      "mapping_status": "resolved",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "noodle"
    },
    "semolina": {
      "label": "semolina",
      "category": "grain_starch",
      "ontology_ref": "foodon:00004513",
      "mapping_status": "approximate",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "semolina flour (durum wheat)",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      }
    },
    "lentil": {
      "label": "lentil",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03310641",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.8,
      "mapping_matched_label": "lentil",
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "chickpea": {
      "label": "chickpea",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03306811",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.8,
      "mapping_matched_label": "chickpea",
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "black_bean": {
      "label": "black bean",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00002889",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.78,
      "mapping_matched_label": "black turtle bean",
      "mapping_note": "'Black bean' in recipes means the turtle bean, not the black gram.",
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "kidney_bean": {
      "label": "kidney bean",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00002761",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.78,
      "mapping_matched_label": "kidney bean",
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "white_bean": {
      "label": "white bean",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03301232",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.78,
      "mapping_matched_label": "white bean",
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "peanut": {
      "label": "peanut",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00003206",
      "mapping_status": "resolved",
      "allergens": [
        "peanut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "peanut"
    },
    "almond": {
      "label": "almond",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00003523",
      "mapping_status": "resolved",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "almond"
    },
    "walnut": {
      "label": "walnut",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03301364",
      "mapping_status": "resolved",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "walnut"
    },
    "cashew": {
      "label": "cashew",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03301357",
      "mapping_status": "approximate",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cashew nut (raw)"
    },
    "pistachio": {
      "label": "pistachio",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03301825",
      "mapping_status": "approximate",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "pistachio nut (raw)"
    },
    "pecan": {
      "label": "pecan",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00003699",
      "mapping_status": "resolved",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "pecan"
    },
    "hazelnut": {
      "label": "hazelnut",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00002933",
      "mapping_status": "resolved",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "hazelnut"
    },
    "pine_nut": {
      "label": "pine nut",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03309360",
      "mapping_status": "approximate",
      "allergens": [
        "tree_nut"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "pine nut kernel (raw)"
    },
    "sesame_seed": {
      "label": "sesame seed",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:03310306",
      "mapping_status": "resolved",
      "allergens": [
        "sesame"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "sesame seed"
    },
    "sunflower_seed": {
      "label": "sunflower seed",
      "category": "legume_nut_seed",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true
    },
    "pumpkin_seed": {
      "label": "pumpkin seed",
      "category": "legume_nut_seed",
      "ontology_ref": "foodon:00004886",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "pumpkin seed"
    },
    "basil": {
      "label": "basil",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003044",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.7,
      "mapping_matched_label": "basil food product"
    },
    "parsley": {
      "label": "parsley",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002942",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.76,
      "mapping_matched_label": "parsley leaf"
    },
    "coriander_leaf": {
      "label": "cilantro",
      "category": "herb_spice",
      "ontology_ref": "foodon:03000029",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 0.76,
      "mapping_query": "coriander leaf",
      "mapping_matched_label": "coriander leaf",
      "specialises": "coriander",
      "aliases": [
        "cilantro",
        "coriander leaves",
        "fresh coriander"
      ]
    },
    "thyme": {
      "label": "thyme",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002312",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.55,
      "mapping_matched_label": "thyme food product"
    },
    "rosemary": {
      "label": "rosemary",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002212",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.55,
      "mapping_matched_label": "rosemary food product"
    },
    "oregano": {
      "label": "oregano",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002073",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.6,
      "mapping_matched_label": "oregano food product"
    },
    "sage": {
      "label": "sage",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002217",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.6,
      "mapping_matched_label": "sage food product"
    },
    "mint": {
      "label": "mint",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002432",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.7,
      "mapping_matched_label": "mint food product"
    },
    "dill": {
      "label": "dill",
      "category": "herb_spice",
      "ontology_ref": "foodon:00001811",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.7,
      "mapping_matched_label": "dill food product"
    },
    "chive": {
      "label": "chive",
      "category": "herb_spice",
      "ontology_ref": "foodon:03311167",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 0.9,
      "mapping_matched_label": "chive leaf (raw)"
    },
    "bay_leaf": {
      "label": "bay leaf",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003802",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "each": 0.2
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "bay leaf"
    },
    "black_pepper": {
      "label": "black pepper",
      "category": "herb_spice",
      "ontology_ref": "foodon:00001650",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "black pepper food product",
      "specialises": "pepper",
      "aliases": [
        "black peppercorns",
        "freshly ground pepper",
        "ground black pepper",
        "peppercorn"
      ]
    },
    "salt": {
      "label": "salt",
      "category": "herb_spice",
      "mapping_query": "sodium chloride",
      "ontology_ref": "foodon:00002250",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.217,
      "mapping_matched_label": "sodium chloride food material"
    },
    "cumin": {
      "label": "cumin",
      "category": "herb_spice",
      "ontology_ref": "foodon:03311872",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cumin food product",
      "aliases": [
        "cumin seed",
        "cumin seeds",
        "ground cumin",
        "jeera"
      ]
    },
    "coriander_seed": {
      "label": "coriander seed",
      "category": "herb_spice",
      "ontology_ref": "foodon:03000032",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "coriander seed",
      "specialises": "coriander",
      "aliases": [
        "coriander powder",
        "ground coriander"
      ]
    },
    "paprika": {
      "label": "paprika",
      "category": "herb_spice",
      "ontology_ref": "foodon:03301223",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "paprika (ground)"
    },
    "turmeric": {
      "label": "turmeric",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002323",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "turmeric food product"
    },
    "cinnamon": {
      "label": "cinnamon",
      "category": "herb_spice",
      "ontology_ref": "foodon:03301175",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cinnamon"
    },
    "nutmeg": {
      "label": "nutmeg",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002061",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "nutmeg food product"
    },
    "clove": {
      "label": "clove",
      "category": "herb_spice",
      "ontology_ref": "foodon:00001745",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "clove food product"
    },
    "cardamom": {
      "label": "cardamom",
      "category": "herb_spice",
      "ontology_ref": "foodon:00001683",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cardamom food product"
    },
    "chili_powder": {
      "label": "chili powder",
      "category": "herb_spice",
      "ontology_ref": "foodon:03302030",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "chili powder"
    },
    "cayenne": {
      "label": "cayenne pepper",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003798",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "cayenne pepper",
      "specialises": "chili"
    },
    "curry_powder": {
      "label": "curry powder",
      "category": "herb_spice",
      "ontology_ref": "foodon:03301842",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "curry powder"
    },
    "garam_masala": {
      "label": "garam masala",
      "category": "herb_spice",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "A spice blend, not a single substance. Ontologies model the components; the blend is a local identifier so a recipe can name what a cook actually buys.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_query": "garam masala"
    },
    "mustard_seed": {
      "label": "mustard seed",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003420",
      "mapping_status": "resolved",
      "allergens": [
        "mustard"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "mustard seed",
      "specialises": "mustard"
    },
    "fenugreek": {
      "label": "fenugreek",
      "category": "herb_spice",
      "ontology_ref": "foodon:00001837",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "fenugreek food product"
    },
    "star_anise": {
      "label": "star anise",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003502",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "star anise"
    },
    "saffron": {
      "label": "saffron",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003043",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "saffron food product"
    },
    "vanilla": {
      "label": "vanilla",
      "category": "herb_spice",
      "ontology_ref": "chebi:753175",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "vanilla",
      "mapping_note": "Deliberately unmapped. FoodOn carries `vanilla plant`, `vanilla bean extract` and a shelf of vanilla-FLAVOURED products, and no class for vanilla itself. Anchoring this to the plant or to the extract would claim something the recipe did not say.",
      "aliases": [
        "vanilla bean",
        "vanilla pod",
        "vanilla seeds"
      ]
    },
    "chili_flake": {
      "label": "chili flake",
      "category": "herb_spice",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true
    },
    "fennel_seed": {
      "label": "fennel seed",
      "category": "herb_spice",
      "ontology_ref": "foodon:00004266",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "fennel seed"
    },
    "olive_oil": {
      "label": "olive oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03301826",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.916,
      "mapping_matched_label": "olive oil",
      "specialises": "oil"
    },
    "vegetable_oil": {
      "label": "vegetable oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03305263",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.92,
      "mapping_matched_label": "vegetable oil",
      "specialises": "oil",
      "aliases": [
        "canola or vegetable oil"
      ]
    },
    "sunflower_oil": {
      "label": "sunflower oil",
      "category": "fat_oil",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.92,
      "mapping_exact_only": true
    },
    "sesame_oil": {
      "label": "sesame oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03304152",
      "mapping_status": "resolved",
      "allergens": [
        "sesame"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.92,
      "mapping_matched_label": "sesame oil",
      "mapping_note": "Deliberately NOT a specialisation of the generic `oil`. `specialises` means 'what an unqualified mention could turn out to be', and a recipe that says \"oil\" never means sesame oil -- it is a flavouring, always named. Modelling it as one would push a sesame allergen onto every recipe using plain oil."
    },
    "coconut_oil": {
      "label": "coconut oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03310046",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.924,
      "mapping_matched_label": "coconut oil"
    },
    "lard": {
      "label": "lard",
      "category": "fat_oil",
      "ontology_ref": "foodon:03302051",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.919,
      "mapping_matched_label": "lard"
    },
    "ghee": {
      "label": "ghee",
      "category": "fat_oil",
      "ontology_ref": "foodon:03310185",
      "mapping_status": "resolved",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.911,
      "mapping_matched_label": "ghee"
    },
    "water": {
      "label": "water",
      "category": "condiment_liquid",
      "ontology_ref": "chebi:15377",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_matched_label": "water",
      "mapping_note": "FoodOn has no water class; it imports CHEBI. Cross-ontology CURIEs are valid in Sous."
    },
    "stock_chicken": {
      "label": "chicken stock",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_exact_only": true
    },
    "stock_beef": {
      "label": "beef stock",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_exact_only": true
    },
    "stock_vegetable": {
      "label": "vegetable stock",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03315835",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "vegetable stock"
    },
    "wine_red": {
      "label": "red wine",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03310272",
      "mapping_status": "resolved",
      "allergens": [
        "sulphite"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.99,
      "mapping_matched_label": "red wine"
    },
    "wine_white": {
      "label": "white wine",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03310273",
      "mapping_status": "resolved",
      "allergens": [
        "sulphite"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.99,
      "mapping_matched_label": "white wine"
    },
    "beer": {
      "label": "beer",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.005,
      "mapping_matched_label": "beer or beer-like beverage (eurofir)"
    },
    "vinegar_white": {
      "label": "white vinegar",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.01,
      "mapping_exact_only": true,
      "specialises": "vinegar"
    },
    "vinegar_balsamic": {
      "label": "balsamic vinegar",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:00005503",
      "mapping_status": "resolved",
      "allergens": [
        "sulphite"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.1,
      "mapping_matched_label": "balsamic vinegar",
      "specialises": "vinegar"
    },
    "vinegar_wine": {
      "label": "wine vinegar",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03301228",
      "mapping_status": "resolved",
      "allergens": [
        "sulphite"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.01,
      "mapping_matched_label": "wine vinegar",
      "specialises": "vinegar",
      "aliases": [
        "apple cider vinegar",
        "cider vinegar",
        "red wine vinegar",
        "rice vinegar",
        "white wine vinegar"
      ]
    },
    "soy_sauce": {
      "label": "soy sauce",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:00001235",
      "mapping_status": "approximate",
      "allergens": [
        "soy",
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.15,
      "mapping_matched_label": "soy sauce food product"
    },
    "fish_sauce": {
      "label": "fish sauce",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03317197",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.12,
      "mapping_matched_label": "fish sauce"
    },
    "worcestershire": {
      "label": "worcestershire sauce",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03305003",
      "mapping_status": "resolved",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.1,
      "mapping_matched_label": "worcestershire sauce"
    },
    "mustard_prepared": {
      "label": "prepared mustard",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [
        "mustard"
      ],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_query": "prepared mustard",
      "specialises": "mustard"
    },
    "mayonnaise": {
      "label": "mayonnaise",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03301440",
      "mapping_status": "resolved",
      "allergens": [
        "egg"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.91,
      "mapping_matched_label": "mayonnaise"
    },
    "ketchup": {
      "label": "ketchup",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.14,
      "mapping_matched_label": "tomato ketchup"
    },
    "tomato_paste": {
      "label": "tomato paste",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03301455",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.07,
      "mapping_matched_label": "tomato paste"
    },
    "tomato_canned": {
      "label": "canned tomato",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.03,
      "mapping_exact_only": true,
      "default_state": {
        "affordances": [
          "strainable"
        ]
      }
    },
    "coconut_milk": {
      "label": "coconut milk",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03303084",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_matched_label": "coconut milk"
    },
    "honey": {
      "label": "honey",
      "category": "condiment_liquid",
      "ontology_ref": "chebi:753365",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.42,
      "mapping_exact_only": true,
      "mapping_matched_label": "honey"
    },
    "maple_syrup": {
      "label": "maple syrup",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03301848",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.32,
      "mapping_matched_label": "maple syrup"
    },
    "hot_sauce": {
      "label": "hot sauce",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03304006",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_matched_label": "hot sauce"
    },
    "stock_fish": {
      "label": "fish stock",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No ontology carries this as a generic class. FoodOn models it by variety or by cut -- 'beef steak (raw)', 'mammalian light cream (18%-30%)' -- and a recipe that says the generic has not chosen one. Anchoring it to a variety would be a guess, so it stays local.",
      "allergens": [
        "fish"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 1.0,
      "mapping_exact_only": true
    },
    "sugar_white": {
      "label": "granulated sugar",
      "category": "baking",
      "ontology_ref": "foodon:03301073",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.845,
      "mapping_matched_label": "sugar (granulated)",
      "specialises": "sugar",
      "aliases": [
        "caster sugar",
        "castor sugar",
        "granulated sugar",
        "superfine sugar"
      ]
    },
    "sugar_brown": {
      "label": "brown sugar",
      "category": "baking",
      "ontology_ref": "foodon:03420156",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.93,
      "mapping_matched_label": "brown sugar",
      "specialises": "sugar"
    },
    "sugar_icing": {
      "label": "powdered sugar",
      "category": "baking",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.5,
      "mapping_exact_only": true,
      "default_state": {
        "affordances": [
          "siftable"
        ]
      },
      "specialises": "sugar",
      "aliases": [
        "confectioners sugar",
        "icing sugar",
        "powdered sugar"
      ]
    },
    "baking_powder": {
      "label": "baking powder",
      "category": "baking",
      "ontology_ref": "foodon:03301940",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.9,
      "mapping_matched_label": "baking powder"
    },
    "baking_soda": {
      "label": "baking soda",
      "category": "baking",
      "ontology_ref": "foodon:00002385",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.96,
      "mapping_matched_label": "baking soda"
    },
    "yeast_dry": {
      "label": "dry yeast",
      "category": "baking",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.68,
      "count_to_mass": {
        "grams": {
          "envelope_us": 7
        },
        "tolerance": 0.1
      },
      "mapping_exact_only": true
    },
    "cocoa": {
      "label": "cocoa powder",
      "category": "baking",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.42,
      "mapping_exact_only": true,
      "mapping_query": "cocoa powder",
      "default_state": {
        "affordances": [
          "siftable"
        ]
      }
    },
    "chocolate_dark": {
      "label": "dark chocolate",
      "category": "baking",
      "ontology_ref": "foodon:03303588",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "dark chocolate",
      "specialises": "chocolate"
    },
    "gelatin": {
      "label": "gelatin",
      "category": "baking",
      "ontology_ref": "foodon:03304765",
      "mapping_status": "curated",
      "allergens": [],
      "ap_to_ep": 1.0,
      "count_to_mass": {
        "grams": {
          "sheet": 1.7
        },
        "tolerance": 0.15
      },
      "mapping_matched_label": "gelatin (unflavored)"
    },
    "cornmeal": {
      "label": "cornmeal",
      "category": "baking",
      "ontology_ref": "foodon:03310257",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.6,
      "mapping_matched_label": "cornmeal"
    },
    "asafoetida": {
      "label": "asafoetida",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002936",
      "mapping_status": "curated",
      "mapping_matched_label": "asafoetida",
      "allergens": [
        "gluten"
      ],
      "mapping_note": "Allergen reflects commercially compounded hing, which is cut with wheat flour. Pure resin carries none; an author using pure hing should override this."
    },
    "curry_leaf": {
      "label": "curry leaf",
      "category": "herb_spice",
      "ontology_ref": "foodon:03000122",
      "mapping_status": "curated",
      "mapping_matched_label": "curry leaf",
      "allergens": [],
      "ap_to_ep": 0.9
    },
    "chili_dried": {
      "label": "dried chili pepper",
      "category": "herb_spice",
      "ontology_ref": "foodon:03302554",
      "mapping_status": "curated",
      "mapping_matched_label": "chili pepper (dried)",
      "allergens": [],
      "count_to_mass": {
        "grams": {
          "each": 2
        },
        "tolerance": 0.5
      },
      "specialises": "chili"
    },
    "mustard_seed_black": {
      "label": "black mustard seed",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003420",
      "mapping_status": "curated",
      "mapping_matched_label": "mustard seed",
      "allergens": [
        "mustard"
      ],
      "mapping_note": "Broadened to the parent class on purpose: FoodOn's black-mustard-seed class is an EFSA FoodEx2 coded entry, which the mapper rejects as a classification-scheme code rather than an ingredient term. Recorded as a specialisation so the shared CURIE is visible rather than looking accidental.",
      "specialises": "mustard_seed"
    },
    "onion_peeled": {
      "label": "onion (peeled)",
      "category": "vegetable",
      "derived_from": "onion",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.89,
      "count_to_mass": {
        "grams": {
          "small": 90,
          "medium": 140,
          "large": 200
        },
        "tolerance": 0.3
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "red_onion_peeled": {
      "label": "red onion (peeled)",
      "category": "vegetable",
      "derived_from": "red_onion",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.89,
      "count_to_mass": {
        "grams": {
          "medium": 140
        },
        "tolerance": 0.3
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "shallot_peeled": {
      "label": "shallot (peeled)",
      "category": "vegetable",
      "derived_from": "shallot",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "medium": 30
        },
        "tolerance": 0.35
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "garlic_peeled": {
      "label": "garlic (peeled)",
      "category": "vegetable",
      "derived_from": "garlic",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.87,
      "count_to_mass": {
        "grams": {
          "clove": 4,
          "head": 45
        },
        "tolerance": 0.4
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "banana_peeled": {
      "label": "banana (peeled)",
      "category": "fruit",
      "derived_from": "banana",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.65,
      "count_to_mass": {
        "grams": {
          "medium": 118
        },
        "tolerance": 0.3
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "avocado_peeled": {
      "label": "avocado (peeled)",
      "category": "fruit",
      "derived_from": "avocado",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.74,
      "count_to_mass": {
        "grams": {
          "medium": 150
        },
        "tolerance": 0.3
      },
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "mango_peeled": {
      "label": "mango (peeled)",
      "category": "fruit",
      "derived_from": "mango",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.69,
      "count_to_mass": {
        "grams": {
          "medium": 200
        },
        "tolerance": 0.35
      },
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "pineapple_peeled": {
      "label": "pineapple (peeled)",
      "category": "fruit",
      "derived_from": "pineapple",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.52,
      "default_state": {
        "affordances": [
          "cuttable",
          "corable"
        ]
      }
    },
    "coconut_meat": {
      "label": "coconut meat",
      "category": "fruit",
      "derived_from": "coconut",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": "foodon:00003856",
      "mapping_status": "curated",
      "mapping_matched_label": "coconut meat",
      "allergens": [],
      "ap_to_ep": 0.53,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "corn_husked": {
      "label": "sweet corn (husked)",
      "category": "vegetable",
      "derived_from": "corn",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [],
      "ap_to_ep": 0.36,
      "count_to_mass": {
        "grams": {
          "ear": 250
        },
        "tolerance": 0.25
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "egg_shelled": {
      "label": "chicken egg (shelled)",
      "category": "dairy_egg",
      "derived_from": "egg",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [
        "egg"
      ],
      "ap_to_ep": 0.88,
      "count_to_mass": {
        "grams": {
          "medium": 50,
          "large": 57
        },
        "tolerance": 0.15
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "prawn_peeled": {
      "label": "shrimp (peeled)",
      "category": "protein",
      "derived_from": "prawn",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": "foodon:03308626",
      "mapping_status": "curated",
      "mapping_matched_label": "shrimp (peeled, raw)",
      "allergens": [
        "crustacean"
      ],
      "ap_to_ep": 0.62,
      "count_to_mass": {
        "grams": {
          "each": 12
        },
        "tolerance": 0.4
      },
      "default_state": {
        "affordances": [
          "cuttable",
          "deveinable"
        ]
      }
    },
    "crab_meat": {
      "label": "crab meat",
      "category": "protein",
      "derived_from": "crab",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": "foodon:02021451",
      "mapping_status": "curated",
      "mapping_matched_label": "piece of crab meat (raw)",
      "allergens": [
        "crustacean"
      ],
      "ap_to_ep": 0.3,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "mussel_cleaned": {
      "label": "mussel (cleaned)",
      "category": "protein",
      "derived_from": "mussel",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [
        "mollusc"
      ],
      "ap_to_ep": 0.3,
      "count_to_mass": {
        "grams": {
          "each": 12
        },
        "tolerance": 0.35
      },
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "carrot_peeled": {
      "label": "carrot root (peeled)",
      "category": "vegetable",
      "derived_from": "carrot",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": "foodon:03311673",
      "mapping_status": "curated",
      "mapping_matched_label": "carrot root (peeled)",
      "allergens": [],
      "ap_to_ep": 0.81,
      "count_to_mass": {
        "grams": {
          "small": 40,
          "medium": 61,
          "large": 90
        },
        "tolerance": 0.3
      },
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      }
    },
    "flour_sifted": {
      "label": "flour (sifted)",
      "category": "grain_starch",
      "derived_from": "flour_ap",
      "produced_by": [
        "sift"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form; verified absent. The variant is a Sous-local identifier so a pantry can declare it.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "density_g_per_ml": 0.528,
      "default_state": {
        "affordances": []
      }
    },
    "allspice": {
      "label": "allspice",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002667",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "allspice"
    },
    "apple_peeled": {
      "label": "apple (peeled)",
      "category": "fruit",
      "derived_from": "apple",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": "foodon:00004473",
      "mapping_status": "resolved",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.88,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      },
      "count_to_mass": {
        "grams": {
          "medium": 182
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "apple (peeled)"
    },
    "broth": {
      "label": "broth",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03309462",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_note": "Commercial stock often carries celery, gluten or soy; this generic cannot know, and a specific product should be used where it matters.",
      "aliases": [
        "bouillon",
        "bouillon cube",
        "cooking stock",
        "dehydrated broth",
        "stock",
        "stock cube"
      ],
      "mapping_matched_label": "broth"
    },
    "buttermilk": {
      "label": "buttermilk",
      "category": "dairy_egg",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0
    },
    "canola_oil": {
      "label": "canola oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03302578",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "specialises": "oil",
      "mapping_matched_label": "canola oil"
    },
    "cheese": {
      "label": "cheese",
      "category": "dairy_egg",
      "ontology_ref": "foodon:03000287",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [
        "milk"
      ],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "cheese"
    },
    "chili": {
      "label": "chili",
      "category": "vegetable",
      "ontology_ref": "foodon:00003744",
      "mapping_status": "resolved",
      "mapping_note": "Shares FOODON:00003744 with `chili_pepper`: FoodOn has one class where Sous distinguishes the generic from the fresh form. Recorded rather than papered over.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "aliases": [
        "chile",
        "chiles",
        "chili pepper",
        "chilies",
        "chilli",
        "chillies",
        "hot pepper"
      ],
      "mapping_exact_only": true,
      "mapping_query": "chili pepper",
      "mapping_matched_label": "chili pepper"
    },
    "chili_flakes": {
      "label": "chili flakes",
      "category": "herb_spice",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "specialises": "chili",
      "aliases": [
        "chilli flakes",
        "crushed red pepper",
        "pepper flakes",
        "red pepper flakes"
      ]
    },
    "chili_seeded": {
      "label": "chili (seeded)",
      "category": "vegetable",
      "derived_from": "chili",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 1.0
    },
    "chocolate": {
      "label": "chocolate",
      "category": "baking",
      "ontology_ref": "foodon:03307240",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "aliases": [
        "baking chocolate",
        "chocolate chips",
        "cooking chocolate"
      ],
      "mapping_exact_only": true,
      "mapping_matched_label": "chocolate"
    },
    "coffee": {
      "label": "coffee",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03304930",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "coffee (instant with coffee creamer)"
    },
    "coriander": {
      "label": "coriander",
      "category": "herb_spice",
      "ontology_ref": "foodon:03310370",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "coriander"
    },
    "cucumber_peeled": {
      "label": "cucumber (peeled)",
      "category": "vegetable",
      "derived_from": "cucumber",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": "foodon:03000106",
      "mapping_status": "resolved",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.95,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      },
      "count_to_mass": {
        "grams": {
          "medium": 200
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "cucumber (peeled)"
    },
    "flour": {
      "label": "flour",
      "category": "grain_starch",
      "ontology_ref": "foodon:00004510",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "flour"
    },
    "garlic_powder": {
      "label": "garlic powder",
      "category": "herb_spice",
      "ontology_ref": "foodon:03301844",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "garlic powder"
    },
    "ginger_peeled": {
      "label": "ginger (peeled)",
      "category": "herb_spice",
      "derived_from": "ginger",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.85,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      }
    },
    "lemon_juice": {
      "label": "lemon juice",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03305428",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "derived_from": "lemon",
      "aliases": [
        "fresh lemon juice",
        "juice of a lemon"
      ],
      "mapping_matched_label": "lemon juice"
    },
    "lime_juice": {
      "label": "lime juice",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03306160",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "derived_from": "lime",
      "aliases": [
        "fresh lime juice",
        "juice of a lime"
      ],
      "mapping_matched_label": "lime juice"
    },
    "margarine": {
      "label": "margarine",
      "category": "fat_oil",
      "ontology_ref": "foodon:03301672",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_note": "Dairy-free as normally formulated; some brands contain milk solids, which a specific product would declare.",
      "mapping_matched_label": "margarine"
    },
    "molasses": {
      "label": "molasses",
      "category": "baking",
      "ontology_ref": "foodon:03303166",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "molasses cookie"
    },
    "mustard": {
      "label": "mustard",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:00002052",
      "mapping_status": "curated",
      "mapping_note": "Hand-picked. An exact search for 'mustard' returns only plant classes (brown/white mustard plant); the condiment sense a recipe means is FOODON:00002052.",
      "allergens": [
        "mustard"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "mustard condiment food product"
    },
    "mustard_dijon": {
      "label": "Dijon mustard",
      "category": "condiment_liquid",
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "No clean class found. FoodOn's nearest entries are processed or branded products rather than the ingredient itself; searched and rejected rather than left unexamined.",
      "allergens": [
        "mustard"
      ],
      "ap_to_ep": 1.0,
      "specialises": "mustard",
      "aliases": [
        "dijon"
      ]
    },
    "oil": {
      "label": "oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03310387",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "aliases": [
        "cooking oil",
        "oil and fat"
      ],
      "mapping_exact_only": true,
      "mapping_matched_label": "oil"
    },
    "olive_pitted": {
      "label": "olive (pitted)",
      "category": "vegetable",
      "derived_from": "olive",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": "foodon:03301261",
      "mapping_status": "resolved",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.85,
      "default_state": {
        "affordances": [
          "cuttable"
        ]
      },
      "mapping_matched_label": "olive (pitted)"
    },
    "onion_powder": {
      "label": "onion powder",
      "category": "herb_spice",
      "ontology_ref": "foodon:03301845",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "onion powder"
    },
    "palm_oil": {
      "label": "palm oil",
      "category": "fat_oil",
      "ontology_ref": "foodon:03310232",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "specialises": "oil",
      "mapping_matched_label": "palm oil"
    },
    "pasta": {
      "label": "pasta",
      "category": "grain_starch",
      "ontology_ref": "foodon:03306347",
      "mapping_status": "resolved",
      "allergens": [
        "gluten"
      ],
      "ap_to_ep": 1.0,
      "mapping_note": "Wheat pasta. Gluten-free pasta is a different substance.",
      "mapping_matched_label": "pasta"
    },
    "pepper": {
      "label": "pepper",
      "category": "herb_spice",
      "ontology_ref": "foodon:00003520",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "pepper"
    },
    "potato_peeled": {
      "label": "potato (peeled)",
      "category": "vegetable",
      "derived_from": "potato",
      "produced_by": [
        "peel"
      ],
      "ontology_ref": "foodon:03316165",
      "mapping_status": "resolved",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.81,
      "default_state": {
        "affordances": [
          "cuttable",
          "trimmable"
        ]
      },
      "count_to_mass": {
        "grams": {
          "small": 120,
          "medium": 213,
          "large": 300
        },
        "tolerance": 0.3
      },
      "mapping_matched_label": "potato (peeled)"
    },
    "rice": {
      "label": "rice",
      "category": "grain_starch",
      "ontology_ref": "foodon:00004327",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "rice"
    },
    "shortening": {
      "label": "shortening",
      "category": "fat_oil",
      "ontology_ref": "foodon:03301314",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "shortening"
    },
    "sugar": {
      "label": "sugar",
      "category": "baking",
      "ontology_ref": "foodon:03420108",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "sugar"
    },
    "tahini": {
      "label": "tahini",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:00003855",
      "mapping_status": "resolved",
      "allergens": [
        "sesame"
      ],
      "ap_to_ep": 1.0,
      "mapping_matched_label": "tahini"
    },
    "tomato_seeded": {
      "label": "tomato (seeded)",
      "category": "vegetable",
      "derived_from": "tomato",
      "produced_by": [
        "trim"
      ],
      "ontology_ref": null,
      "mapping_status": "unmapped",
      "mapping_note": "FoodOn has no class for this prepared form. A Sous-local identifier so a pantry can declare it; added in 0.4.0 because a 1500-recipe corpus asked for it repeatedly.",
      "allergens": [],
      "ap_to_ep": 0.91,
      "default_state": {
        "affordances": [
          "cuttable",
          "destemmable"
        ]
      },
      "count_to_mass": {
        "grams": {
          "small": 90,
          "medium": 123,
          "large": 180
        },
        "tolerance": 0.3
      }
    },
    "vanilla_extract": {
      "label": "vanilla extract",
      "category": "baking",
      "ontology_ref": "foodon:03316763",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "aliases": [
        "vanilla essence"
      ],
      "mapping_matched_label": "vanilla extract (concentrated)"
    },
    "vinegar": {
      "label": "vinegar",
      "category": "condiment_liquid",
      "ontology_ref": "foodon:03301705",
      "mapping_status": "resolved",
      "mapping_note": "Generic parent added in 0.4.0. A 1500-recipe corpus named this form far more often than any specific one; the vocabulary had only the varieties. Left unmapped rather than pointed at a FoodOn class for one variety.",
      "allergens": [
        "sulphite"
      ],
      "ap_to_ep": 1.0,
      "mapping_exact_only": true,
      "mapping_matched_label": "vinegar"
    },
    "white_pepper": {
      "label": "white pepper",
      "category": "herb_spice",
      "ontology_ref": "foodon:00002361",
      "mapping_status": "approximate",
      "allergens": [],
      "ap_to_ep": 1.0,
      "specialises": "pepper",
      "mapping_matched_label": "white pepper food product"
    },
    "yeast": {
      "label": "yeast",
      "category": "baking",
      "ontology_ref": "foodon:03411345",
      "mapping_status": "resolved",
      "allergens": [],
      "ap_to_ep": 1.0,
      "aliases": [
        "active dry yeast",
        "dried yeast",
        "fresh yeast",
        "instant yeast"
      ],
      "mapping_matched_label": "yeast"
    }
  },
  "mapping_summary": {
    "resolved_against": "FoodOn via EBI OLS4",
    "resolved_on": "2026-09-05",
    "mapped": 219,
    "unmapped": 41
  }
}
