查询名称是否存在于维基数据中的最简单方法?

Easiest way to query if a name exists in Wikidata?

我正在尝试创建最简单的查询来检查某个名称是否存在于维基数据中。例如,我只是想看看通用名称 "Jack Smith" 是否在维基数据中。

按照 , I created the following SPARQL query (run it 中的示例查询):

SELECT distinct ?item ?itemLabel ?itemDescription WHERE{  
  ?item ?label "Jack Smith" .  
  ?article schema:about ?item .
  ?article schema:inLanguage "en" .
  ?article schema:isPartOf <https://en.wikipedia.org/>. 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }    
} LIMIT 10

但是,它 returns 结果为零。

另一方面,如果我通过维基数据 搜索网页 搜索 "Jack Smith",我会返回 1200+ results,其中有很多名为 "Jack Smith".

SPARQL 界面的行为不一致。当我 运行 SPARQL 搜索 "Abraham Lincoln" (run it) 时,我正确地取回了那个名字的美国总统的条目。

我的具体问题是:

  1. 为什么我的 SPARQL 查询返回 "Jack Smith" 的零结果?
  2. 最简单的 API 检查维基数据中是否存在姓名(例如 Jack Smith)的调用是什么?它可以是 SPARQL 或其他一些 REST API.

谢谢。

查询 return 的结果为零,因为没有关于 Jack Smith 的英文文章并且是 Wikipedia.org 的一部分。

SPARQL 查询正文中的每一行都是一种限制 搜索的方式,而不仅仅是一种添加新变量的方式。

看看这个查询:

SELECT ?person ?dateOfDeath
WHERE {
?person a :Person .
?person :date_of_death ?dateOfDeath .
}

这只会 return 死亡日期的人,即已经死亡的人,以及日期。 如果你想 return 人,并且 可选地 他们的死亡日期,即如果他们还活着,你不需要约会,但你 想要这个人,然后使用这个:

SELECT ?person ?dateOfDeath
WHERE {
    ?person a :Person .
   OPTIONAL {?person :date_of_death ?dateOfDeath }
    }

关于你的第二个问题,我会尝试这样的事情:

SELECT ?boolean
WHERE{
BIND(EXISTS{?item ?label "Jack Smith"} AS ?boolean)
  }

这当然也可以作为 cURL 请求发出:

curl https://query.wikidata.org/bigdata/namespace/wdq/sparql -X POST --data 'query=SELECT%20%3Fboolean%0AWHERE%7B%0ABIND%28EXISTS%7B%3Fitem%20%3Flabel%20%22Jack%20Smith%22%7D%20AS%20%3Fboolean%29%0A%20%20%7D'