Sparql 查询Wikidata中是否存在名称的最简单方法?
我正在尝试创建最简单的查询来检查Wikidata中是否存在名称。例如,我只是想看看Wikidata中是否有一个共同的名字“Jack Smith” 按照中的示例查询,我创建了以下SPARQL查询():Sparql 查询Wikidata中是否存在名称的最简单方法?,sparql,wikidata,Sparql,Wikidata,我正在尝试创建最简单的查询来检查Wikidata中是否存在名称。例如,我只是想看看Wikidata中是否有一个共同的名字“Jack Smith” 按照中的示例查询,我创建了以下SPARQL查询(): 选择不同的?项目?项目标签?项目描述,其中{ ?项目?标签“Jack Smith”。 ?文章模式:关于?项目。 ?文章模式:语言“en”。 ?文章模式:isPartOf。 服务wikibase:标签{bd:serviceParam wikibase:语言“en”。} }限制10 但是,它返回零结果
选择不同的?项目?项目标签?项目描述,其中{
?项目?标签“Jack Smith”。
?文章模式:关于?项目。
?文章模式:语言“en”。
?文章模式:isPartOf。
服务wikibase:标签{bd:serviceParam wikibase:语言“en”。}
}限制10
但是,它返回零结果
另一方面,如果我通过维基数据搜索网页搜索“杰克·史密斯”,我会找到很多叫“杰克·史密斯”的人
SPARQL接口的行为不一致。当我运行SPARQL搜索“亚伯拉罕·林肯”(Abraham Lincoln)()时,我正确地找到了美国总统的名字
我的具体问题是:
谢谢。查询返回的结果为零,因为没有Jack Smith的英文文章,而且是Wikipedia.org的一部分 SPARQL查询主体中的每一行都是限制搜索的一种方式,而不仅仅是添加新变量的方式 看看这个查询:
SELECT ?person ?dateOfDeath
WHERE {
?person a :Person .
?person :date_of_death ?dateOfDeath .
}
这将只返回有死亡日期的人,即已死亡的人,以及日期。
如果您想要返回人员,或者选择返回他们的死亡日期,即如果他们仍然活着,您不想要日期,但您确实想要此人,请使用以下命令:
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'
查询返回的结果为零,因为没有Jack Smith,因为有一篇英文文章是关于他的,并且是Wikipedia.org的一部分 SPARQL查询主体中的每一行都是限制搜索的一种方式,而不仅仅是添加新变量的方式 看看这个查询:
SELECT ?person ?dateOfDeath
WHERE {
?person a :Person .
?person :date_of_death ?dateOfDeath .
}
这将只返回有死亡日期的人,即已死亡的人,以及日期。
如果您想要返回人员,或者选择返回他们的死亡日期,即如果他们仍然活着,您不想要日期,但您确实想要此人,请使用以下命令:
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'
您不应该使用像
rdfs:label
这样的特定属性来检查是否存在同名的人吗?文本往往有一个语言标签:SELECT distinct?item?itemlab?itemsdescription其中{item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.?文章模式:about?item.?文章模式:inLanguage“en”?文章模式:isPartOf.SERVICE wikibase:label{bd:serviceParam wikibase:language“en”}限制10
或者如果你只是想知道是否有这样一个条目也有维基百科页面:问哪里{?item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.?文章模式:about?item.?文章模式:inLanguage“en”?文章模式:isPartOf.}
或者只是问一下{?item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.}
您不应该使用像rdfs:label
这样的特定属性来检查是否存在这样一个名字的人吗?而文本往往有一个语言标记:选择不同的?item?itemLabel?itemDescription其中{?item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.?文章模式:关于?项。?文章模式:inLanguage“en”.?文章模式:isPartOf.SERVICE wikibase:label{bd:serviceParam wikibase:language“en”}}限制10
或者如果您只想知道是否有这样一个条目也有Wikipedia页面:询问位置{?item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.?文章模式:about?item。?文章模式:inLanguage“en.?文章模式:isPartOf.}
或仅仅询问{?item rdfs:label | foaf:name | skos:altLabel“Jack Smith”@en.}