为什么这个Wikidata SPARQL查询只对列表中的第一个元素有效? [英] Why does this Wikidata SPARQL query only work for the first element in a list?
本文介绍了为什么这个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/' ) ) .
}
这实际上使用了p:
和ps:
命名空间。
另请参阅using ranks in SPARQL上的维基数据维基中的此小节。
这篇关于为什么这个Wikidata SPARQL查询只对列表中的第一个元素有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文