我正在尝试获取以下列表:
A人,A的出生地,B人,B的出生地
出生地是城市。
人A和人B之间的关系是人A“影响”人B。到目前为止,我的代码如下:
SELECT ?person ?birthplace ?influenced ?birthplace2
WHERE {
?person a <http://dbpedia.org/ontology/Person> .
?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?person dbpedia2:placeOfBirth ?birthplace2 .
?influenced a <http://dbpedia.org/ontology/Person>.
?country rdf:type dbpedia-owl:Country .
FILTER (str(?birthplace2) = str(?country))
FILTER (str(?birthplace) = str(?country))
}
目前,我在做乡村旅行,因为那只是行之有效的。
目前,这只是给我两列具有相同的出生地。它没有显示出受影响人的出生地。
理想情况下,我还要每个出生城市的纬度和经度,例如:
人A,A的出生地,纬度,长,人B,人B的出生地,纬度,长
但这可能要问的太多了。抱歉,我是SPARQL的新手。
最佳答案
在您的查询中,您有:
?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?person dbpedia2:placeOfBirth ?birthplace2 .
表示
?person
出生于?birthplace
和?birthplace2
中。我想你的意思是:?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?influenced dbpedia2:placeOfBirth ?birthplace2 .
至于获取每个城市的经纬度,现在dbpedia处于关闭状态,因此我无法查看城市资源以查看它们如何映射到地理坐标。但是,一旦备份了dbpedia,就可以执行SPARQL描述查询:
describe <http://dbpedia.org/... rest of resource URI>
看看你得到了什么。这将告诉您需要使用哪些谓词来提取位置。请注意,如果缺少纬度/经度信息,则除非在SPARQL
optional
子句中放置查询模式的一部分以选择位置,否则不会在结果中看到该城市。更新
好的,DbPedia现在已备份。我相信这就是您想要的:
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT DISTINCT ?person1 ?birthplace1 ?person2 ?birthplace2
?lat1 ?long1 ?lat2 ?long2
WHERE
{
?person1 a dbpedia-owl:Person ;
dbpedia-owl:birthPlace ?birthplace1 ;
dbpedia-owl:influenced ?person2 .
?person2 dbpedia-owl:birthPlace ?birthplace2 .
optional {
?birthplace1 geo:lat ?lat1 .
?birthplace1 geo:long ?long1 .
?birthplace2 geo:lat ?lat2 .
?birthplace2 geo:long ?long2 .
}
}
更新2
该查询适用于dbpedia/iSparql(这是perma-link):
更新3
仅限于城市:
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT DISTINCT ?person1 ?birthplace1 ?person2 ?birthplace2
?lat1 ?long1 ?lat2 ?long2
WHERE
{
?person1 a dbpedia-owl:Person ;
dbpedia-owl:birthPlace ?birthplace1 ;
dbpedia-owl:influenced ?person2 .
?person2 dbpedia-owl:birthPlace ?birthplace2 .
?birthplace1 a dbpedia-owl:City .
?birthplace2 a dbpedia-owl:City .
optional {
?birthplace1 geo:lat ?lat1 .
?birthplace1 geo:long ?long1 .
?birthplace2 geo:lat ?lat2 .
?birthplace2 geo:long ?long2 .
}
}
关于sparql - 查询dbpedia,询问SPARQL中两个类别的出生地,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11356954/