QLever查询Wikidata子类仅返回QID未返回实体标签求助
QLever查询Wikidata子类时获取标签的问题解决
你的查询仅返回实体QID,核心原因是?name定义在嵌套子查询内部,但子查询只输出了?item,外层SELECT无法获取到?name的取值。同时原查询的结构可以简化,以下是修正后的查询语句:
PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?item ?name WHERE { ?item wdt:P279* wd:Q2424752. ?item rdfs:label ?name. FILTER(LANG(?name) = "zh"). # 可替换为"en"等其他语言,或删除该过滤获取所有语言标签 MINUS { ?item a <http://www.w3.org/ns/lemon/ontolex#LexicalSense> } MINUS { ?item a <http://www.w3.org/ns/lemon/ontolex#LexicalEntry> } MINUS { ?item a <http://www.w3.org/ns/lemon/ontolex#Lexeme> } }
调整说明:
- 移除不必要的嵌套子查询,直接在主查询中关联子类层级和标签属性
- 用
wdt:P279*替代原查询中p:P279/ps:P279/wdt:P279*的写法,wdt前缀的直接属性更适合查询Wikidata的层级关系,QLever对这种写法支持更友好 - 增加语言过滤
FILTER(LANG(?name) = "zh"),避免返回同一实体的多语言标签冗余,可根据需求修改语言代码或删除该过滤 - 保留原有的Lexeme相关实体过滤逻辑,避免返回词汇类无关实体
内容的提问来源于stack exchange,提问作者eespie
相关产品推荐
相关产品推荐

