为什么这个Wikidata SPARQL查询只对列表中的第一个元素有效? [英] Why does this Wikidata SPARQL query only work for the first element in a list?

查看:17
本文介绍了为什么这个Wikidata SPARQL查询只对列表中的第一个元素有效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试查找Wikidata上是否有连接两个任意实体的属性。这可以很好地工作,除非其中一个实体在另一个实体的列表中。在这种情况下,只有列表中的第一个实体被视为连接到另一个实体。例如:‘Python’和‘Object-Based Language’(在属性‘Instance of’的列表中的第一个)返回属性,但‘Python’和‘Programming Language’不返回属性。

SELECT ?prop
WHERE {
  wd:Q28865 ?prop wd:Q9143.
}

如何使此操作适用于此类列表中的所有实体?

推荐答案

当您对属性使用普通的wdt:命名空间时,您将只获得每个属性的最高级别的语句。维基数据一般有three ranks

  • 首选级别
  • 普通职级
  • 不推荐使用的排名

在您的案例中,基于对象的语言(Q899523)具有首选排名。因此,返回的所有语句都需要具有相同的首选排名。编程语言&Quot;(Q9143)仅具有普通级别,因此不包括在该命名空间中。

如果您想要所有语句,AFAIK,您必须绕道通过如下语句实体:

SELECT *
WHERE {
  wd:Q28865 ?propP ?stmt .
  ?stmt ?propPS wd:Q9143 ;
        wikibase:rank ?rank .
  FILTER( STRSTARTS( STR(?propPS), 'http://www.wikidata.org/prop/statement/' ) ) .
}

Try it

这实际上使用了p:ps:命名空间。

另请参阅using ranks in SPARQL上的维基数据维基中的此小节。

这篇关于为什么这个Wikidata SPARQL查询只对列表中的第一个元素有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆