SPARQL Wikidata - 如何组合两个查询以检索对象信息

时间:2017-05-16 11:30:49

标签: select properties label sparql wikidata

我有一个问题,我在一个例子中解释:

我想从三元组 Berlin中检索对象 Germany - capital - object

必须使用标签,因为这些是我程序中的输入。

以下查询返回 propertyLabel capital

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wikibase: <http://wikiba.se/ontology#>
prefix bd: <http://www.bigdata.com/rdf#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?propertyLabel WHERE {
    ?property a wikibase:Property .
    ?property rdfs:label "capital"@en
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" .} 
}

使用标签 Germany URI P36 (capital)进行查询后,我会返回所需的信息Berlin

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wikibase: <http://wikiba.se/ontology#>
prefix bd: <http://www.bigdata.com/rdf#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?objectLabel WHERE {
    ?subject wdt:P36 ?object . 
    ?subject rdfs:label "Germany"@en .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" .} 
}

但我想将P36用作标签。我尝试了两种选择或联盟的各种方式,但我得到了数千个结果或没有。查询应该如下所示(虽然这个不起作用):

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wikibase: <http://wikiba.se/ontology#>
prefix bd: <http://www.bigdata.com/rdf#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?objectLabel WHERE {
    ?subject ?property ?object . 
    ?subject rdfs:label "Germany"@en .
    ?property a wikibase:Property .
    ?property rdfs:label "capital"@en
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" .} 
}

上面提到的查询必须返回Berlin而不是其他内容。提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题是你的属性查找标签&#34; capital&#34;返回A但实例数据使用http://www.wikidata.org/entity/P36。解决方法可能是:

http://www.wikidata.org/prop/direct/P36