我想在几个维基数据实体之间找到第一个常见的超类。
我们选择bridge和cemetery。什么是他们“最小的”共同超类?
--->他们最专业的共同课是“建筑结构”。
This Sparql query接近解决方案:
SELECT ?classe ?classeLabel WHERE {
wd:Q12280 wdt:P279* ?classe .
FILTER EXISTS { wd:Q39614 wdt:P279* ?classe .}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
问题:它返回两个项目之间的所有公共类,而不仅仅是第一个。我怎么能过滤答案才能得到我想要的东西?
答案 0 :(得分:0)
如果其他人感兴趣这个问题,那么我最终会使用SPAQL查询来获取两个以上项目的最少公共子项。这是评论中的@AKSW回复与that previous question on SO的回答之间的混合。
SELECT ?lcs ?lcsLabel WHERE {
?lcs ^wdt:P279* wd:Q32815, wd:Q34627, wd:Q16970, wd:Q16560 .
filter not exists {
?sublcs ^wdt:P279* wd:Q32815, wd:Q34627, wd:Q16970, wd:Q16560 ;
wdt:P279 ?lcs .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}