我正试图在美国每个州收集战俘。最初的查询是
select distinct ?s ?state
where {
?s a dbpedia-owl:Place; dcterms:subject/skos:broader{,9} ?state .
?state skos:broader category:Buildings_and_structures_in_the_United_States_by_state .
filter contains(str(?state),'_in_') .
filter(!contains(str(?state),'United_States'))
}过滤器部分是查找美国的州(如下所示),这样,我们最终知道每个POI属于什么状态。

该方法不起作用,因为我为一个POI获得了多个状态。举个例子,如果我运行下面的查询来为五角大楼查找美国之州
select distinct ?state
where {
dbpedia:The_Pentagon dcterms:subject/skos:broader{,9} ?state .
?state skos:broader category:Buildings_and_structures_in_the_United_States_by_state .
filter contains(str(?state),'_in_') .
filter(!contains(str(?state),'United_States'))
}这将导致五角大楼进入所有州。我知道这是由于skos:broader{,9},但我如何知道,设置它的最佳水平。有没有更好的方法?
发布于 2015-04-02 21:47:57
我不知道你的问题到底想达到什么目的,我无法理解它们。但根据你的描述,我认为你只需要在他们所处的州旁边有名胜古迹。如果是这样的话,我编写了以下查询。
SELECT distinct ?POI ?state WHERE {
?POI a dbpedia-owl:Place.
?POI dbpedia-owl:location ?location.
?location dbpedia-owl:country ?country.
?location dbpprop:state ?state.
filter(?country =dbpedia:United_States)
}如果你愿意的话,你甚至可以把这个地方描述成一栋建筑,但我不认为POI一定是建筑物。但如果你想把它们命名为建筑物,那么:
SELECT distinct ?POI ?state WHERE {
?POI a dbpedia-owl:Place.
?POI a dbpedia-owl:Building.
?POI dbpedia-owl:location ?location.
?location dbpedia-owl:country ?country.
?location dbpprop:state ?state.
filter(?country =dbpedia:United_States)
}为了显示用例,您可以为五角大楼过滤?POI:
SELECT distinct ?POI ?state WHERE {
?POI a dbpedia-owl:Place.
?POI a dbpedia-owl:Building.
?POI dbpedia-owl:location ?location.
?location dbpedia-owl:country ?country.
?location dbpprop:state ?state.
filter(?country =dbpedia:United_States)
filter(?POI=dbpedia:The_Pentagon)
}https://stackoverflow.com/questions/29414522
复制相似问题