2014-09-13 96 views
0

我们可以使用SPARQL查询从DBpedia中获取美国地点列表吗?我已经尝试了以下查询,但它(按设计)仅提供英文摘要。我想要美国地方的名字。我怎样才能做到这一点?Sparql查询到DBpedia

SELECT ?abstract 
FROM NAMED <http://dbpedia.org> 
WHERE { <http://dbpedia.org/resource/Lists_of_populated_places_in_the_United_States> <http://dbpedia.org/ontology/abstract> ?abstract. 
FILTER langMatches(lang(?abstract), 'en') } 
+0

你浏览过的http://dbpedia.org/page/Lists_of_populated_places_in_the_United_States的数据?它并不包含你想要的东西。你需要找到一种不同的方式来制定你的查询。 – 2014-09-13 03:28:18

回答

2

通常情况下最简单的方法是迭代地编写一些这些查询,随着数据的发展一起探索数据。例如,在这种情况下,你可以这样开始:

select ?place where { 
    ?place a dbpedia-owl:PopulatedPlace 
} 
limit 100 

SPARQL results

这不仅仅是在美国这样的地方,但你可以浏览结果,直到你找到一个。然后你可以检查它,看看你如何识别这些地方。在这种情况下,您可能会发现Furnace,西弗吉尼亚州,并且请注意,它的值为dbpedia:United_States财产dbpedia-owl:国家。因此,我们可以细化查询:

select ?place where { 
    ?place a dbpedia-owl:PopulatedPlace ; 
     dbpedia-owl:country dbpedia:United_States 
} 
limit 100 

SPARQL results

这看上去好多,但是你说你想要的地方,而不是确定他们实际虹膜的名字。基于你的过滤器,它看起来像你只是想要英文名字。然后,我们进一步细化:

select ?label where { 
    ?place a dbpedia-owl:PopulatedPlace ; 
     dbpedia-owl:country dbpedia:United_States ; 
     rdfs:label ?label 
    filter langMatches(lang(?label), 'en') 
} 
limit 100 

SPARQL results

这些名称是语言标记文字。如果你只想要弦形部分,你可以做的是,在可变投影:

select (str(?label) as ?strLabel) where { 
    ?place a dbpedia-owl:PopulatedPlace ; 
     dbpedia-owl:country dbpedia:United_States ; 
     rdfs:label ?label 
    filter langMatches(lang(?label), 'en') 
} 
limit 100 

SPARQL results

+0

我真的很感谢这样一个详细的解释,这就是我正在寻找.... – user2022416 2014-09-13 07:37:35

+0

我还有一个问题,如果我需要在Java中添加它,我只是需要将SPARQL端点添加到它吗? – user2022416 2014-09-13 16:45:01