SPARQL递归查询求助:泰式炒粉相关欧洲美食查询
SPARQL查询实现:泰式炒粉相关欧洲食物匹配
完整查询代码
SELECT DISTINCT ?food (COALESCE(CONCAT(?foodLabel, " – ", ?foodDescription), ?foodLabel) AS ?foodInfo) (GROUP_CONCAT(DISTINCT ?sharedIngredientLabel; SEPARATOR="; ") AS ?commonIngredients) (GROUP_CONCAT(DISTINCT ?europeanCuisineLabel; SEPARATOR="; ") AS ?cuisines) WHERE { # 递归获取泰式炒粉的所有层级配料 wd:Q730298 wdt:P527* ?padThaiIngredient. # 递归获取欧洲菜系及其所有子类 wd:Q579316 wdt:P279* ?europeanCuisine. # 匹配有共同递归配料的欧洲菜系食物 ?food wdt:P527* ?padThaiIngredient; wdt:P361 ?europeanCuisine. # 获取英文标签和描述 OPTIONAL { ?food rdfs:label ?foodLabel FILTER(LANG(?foodLabel) = "en") } OPTIONAL { ?food schema:description ?foodDescription FILTER(LANG(?foodDescription) = "en") } OPTIONAL { ?padThaiIngredient rdfs:label ?sharedIngredientLabel FILTER(LANG(?sharedIngredientLabel) = "en") } OPTIONAL { ?europeanCuisine rdfs:label ?europeanCuisineLabel FILTER(LANG(?europeanCuisineLabel) = "en") } } GROUP BY ?food ?foodLabel ?foodDescription ORDER BY ?foodLabel
关键逻辑说明
- 递归配料获取:使用
wdt:P527*实现多步递归,覆盖泰式炒粉的直接配料及配料的配料等所有层级 - 欧洲菜系范围:通过
wdt:P279*递归获取欧洲菜系的所有子类,确保包含所有分支菜系 - 食物匹配:
?food wdt:P527* ?padThaiIngredient确保食物的递归配料中存在与泰式炒粉的共同配料 - 结果格式化:
- 用
COALESCE处理描述缺失的情况,生成统一的“标签 – 描述”格式 - 用
GROUP_CONCAT将多个共同配料、所属菜系合并为分号分隔的字符串 DISTINCT避免重复条目,保证结果简洁
- 用
内容的提问来源于stack exchange,提问作者Klaudyna Niedzin
相关产品推荐
相关产品推荐

