4

我使用 KMDb 个人 ID 从 wikidata 数据库中检索信息。结果是带有三个 IMDB 代码的三行。如果我查看女演员 wikidata 网页(https://www.wikidata.org/wiki/Q7496795),我可以看到其中只有一个有参考。

我怎样才能只选择这个项目?是否可以将引用显示为 sparql 查询的输出?

非常感谢

PREFIX wikibase: <http://wikiba.se/ontology#>
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#>
PREFIX p:        <http://www.wikidata.org/prop/>
PREFIX v:        <http://www.wikidata.org/prop/statement/>
PREFIX pr: <http://www.wikidata.org/prop/reference/>

SELECT ?wikidata ?imdb ?Q ?prop ?value
       WHERE {
   ?wikidata wdt:P345  ?imdb .
   ?wikidata wdt:P31   wd:Q5 .
    ?wikidata wdt:P1649 "00003964" . # KMDb person ID
}
LIMIT 10
4

1 回答 1

8

Wikidata 中的引用使用该属性来表示有关语句prov:wasDerivedFrom的出处信息。在您的情况下,摆脱没有值的引用(值节点也是一个语句)的一种方法是为此添加一个三元组模式:

SELECT ?wikidata ?imdb ?Q ?prop ?value
WHERE
{
  ?wikidata p:P345 ?statement. 
            ?statement ps:P345 ?imdb; 
                       prov:wasDerivedFrom ?ref .
  ?wikidata wdt:P31 wd:Q5.
  ?wikidata wdt:P1649 "00003964". # KMDb person ID
}
LIMIT 10

但是您根本不需要为语句添加变量。正如@WikidataFacts 所建议的,如果对象p:P345直接是空白节点的描述会更有效:

SELECT ?wikidata ?imdb ?Q ?prop ?value
WHERE
{
  ?wikidata p:P345 [ ps:P345 ?imdb; prov:wasDerivedFrom ?ref ].
  ?wikidata wdt:P31 wd:Q5.
  ?wikidata wdt:P1649 "00003964". # KMDb person ID
}
LIMIT 10

还有更多选项,例如使用显式空白节点,或仅过滤具有至少一个值的节点。

于 2016-05-28T06:01:16.607 回答