我正在尝试使用带有dbpedia数据集的Sqarql来获取抽象。 当我在Virtuoso上运行以下查询时,
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "London"@en }
}
LIMIT 10
我得到了结果,但如果我修改名称说'Gokarna'这是一个南印度旅游景点,我没有得到任何数据。但是我确实在dbpedia for Gokarna(http://dbpedia.org/page/Gokarna,_India)上看到了资源页面。我究竟做错了什么?我需要获得近800个印度地方的类似数据。
答案 0 :(得分:3)
当您使用values
时,您只会获得与您的字符串完全匹配的内容。对于Gokarna,这适用于@ de,@ it,@ fr,但不适用于@en,因为标签不同,正如您在上一个答案中所看到的那样。
我建议使用contains
,而不是values
:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
FILTER langMatches(lang(?name),"en")
FILTER CONTAINS (?name, "Gokarna" )
}
LIMIT 10
答案 1 :(得分:2)
我不是使用Sqarql的经验,但我可以在您的代码中看到并使用dbpedia库检查... 它不仅仅是Gokarna。它是“Gokarna,_India”。
这应该有用..
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ rdfs:label ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna,_India"@en }
}
LIMIT 10
答案 2 :(得分:2)
如果您浏览一下您链接到的印度Gokarna的DBpedia页面,您会注意到它的rdfs:label
是“Gokarna,India”。但它的foaf:name
只是“Gokarna”。这意味着您应该将查询修改为:
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE {
[ foaf:name ?name
; dbpedia-owl:abstract ?abstract
] .
FILTER langMatches(lang(?abstract),"en")
VALUES ?name { "Gokarna"@en }
}
LIMIT 10
虽然这也会让其他Gokarnas回归:Gokarna,尼泊尔,Gokarna,孟加拉国和Gokarna(电影)。如果你想删除这些,你必须找出另一个过滤器(可能是dbo:country dbr:India
)。