找到两个项目之间最精确的常见超类

时间:2017-12-26 15:17:47

标签: sparql wikidata

我想在几个维基数据实体之间找到第一个常见的超类。

我们选择bridgecemetery。什么是他们“最小的”共同超类?

  • 桥梁是“建筑结构”的子类。
  • 墓地是“宗教场所”的子类,是“建筑结构”的子类。

--->他们最专业的共同课是“建筑结构”。

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". }

}

问题:它返回两个项目之间的所有公共类,而不仅仅是第一个。我怎么能过滤答案才能得到我想要的东西?

1 个答案:

答案 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". } 
    }

Try it.