我正在尝试使用SPARQL语法在dbpedia上运行查询,以查找某个模板的所有页面。似乎没有用,我正在寻找dbpprop:wikiPageUsesTemplate的所有页面。有谁知道如何纠正这个以正确寻找模板?
SELECT ?name ?member_Of ?country ?lat ?lng ?link
WHERE {
?x dbpprop:wikiPageUsesTemplate "dbpedia:Template:Infobox_settlement" .
?x a <http://dbpedia.org/ontology/Settlement> .
?x foaf:name ?name .
?x dbpedia-owl:isPartOf ?member_Of.
?x dbpedia-owl:country ?country.
?x geo:lat ?lat .
?x geo:long ?lng .
?x foaf:isPrimaryTopicOf ?link .
}
LIMIT 2500 OFFSET 0
我也试图仅通过dbprop运行它无济于事。
SELECT * WHERE { ?page dbpprop:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_settlement> . ?page dbpedia:name ?name .}
如果有人试图做类似的事情,也可以通过wiki api,在那里你可以对所有结果进行分类。 http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Infobox_settlement
答案 0 :(得分:2)
至少有两个问题:(i)你需要在地方使用IRI,而不是字符串; (ii)您需要使用DBpedia使用的属性。
在
?x a <http://dbpedia.org/ontology/Settlement> .
和
?x foaf:isPrimaryTopicOf ?link .
您已经证明您知道URI需要使用<
和>
完整编写,或者缩写为前缀。但是,
?x dbpprop:wikiPageUsesTemplate "dbpedia:Template:Infobox_settlement" .
肯定不会去上班。它是合法的SPARQL,因为字符串可以是三元组的对象,但你几乎肯定想要一个IRI。
使用 dbpprop:wikiPageUsesTemplate 的查询不会返回任何结果:
select distinct ?template where {
[] dbpprop:wikiPageUsesTemplate ?template
}
这很容易检查,并且很快确认没有可能可能匹配您的查询的数据。你在哪里找到这家酒店?你见过它用过某个地方吗?我不相信您可以根据信息框模板查询DBpedia。 DBpedia与维基百科不同,即使维基百科API支持它,也不代表DBpedia有对应物。 是 DBpedia Data Set Properties上的一条说明:
http://xx.dbpedia.org/property/wikiPageUsesTemplate(将更改为http://dbpedia.org/ontology/wikiPageUsesTemplate)
但后一个属性似乎也没有在端点上使用。有关详细信息,请参阅my answer至Syntax for Sparql query for pages with specific infobox。