我的问题是my first question about SPARQL here的后续跟进。
我对山对象的SPARQL查询结果是here。
从这些结果我选择了某个object resource。 现在,我希望获得此选定Mountain对象的“是dbpedia-owl:highestPlace of ”记录的值。
即这座山是最高的山脉的名称。
正如我所说,这是复杂的。不仅因为我不知道所需的语法,而且我在这里得到两个对象。
我需要记录#2而不是1.我知道1也是相关的,但有时它不遵循相同的模式。有时记录似乎是YAGO类型,这可能完全是误导。为了安全起见,我只想在类型不匹配时丢弃这些记录。
如何构建我的SPARQL查询以获取这些“是dbpedia-owl:highestPlace of ”记录并且还具有类型过滤功能?
答案 0 :(得分:4)
您可以使用此查询,但请注意,示例中的Mont_Blanc_massif同时为dbpedia-owl:Place
和dbpedia-owl:MountainRange
select * where {
?place dbpedia-owl:highestPlace :Mont_Blanc.
?place rdf:type dbpedia-owl:MountainRange.
}
评论后修改:过滤
你不想清楚你要过滤什么(yago?),从技术上讲你可以过滤这样的例子:
select * where {
?place dbpedia-owl:highestPlace :Mont_Blanc.
?place rdf:type dbpedia-owl:MountainRange.
FILTER NOT EXISTS {
?place ?pred ?obj
Filter (regex(?obj, "yago"))
}
}
这会过滤掉其网址中包含“yago”的object
个结果的结果。
答案 1 :(得分:1)
扩展上一个答案的结果,相应的查询将是
select * where {
?mountain a dbpedia-owl:Mountain ;
dbpedia-owl:abstract ?abstract ;
foaf:depiction ?depiction .
?range a dbpedia-owl:MountainRange ;
dbpedia-owl:highestPlace ?mountain .
FILTER(langMatches(lang(?abstract),"EN"))
}
LIMIT 10
选择具有至少一个描述的英文摘要的山脉(或者图案不匹配)并且其中有一些山脉是山脉最高的地方。如果没有前面问题的部分,如果您只想检索范围最高的山脉,可以使用如下查询:
select * where {
?mountain a dbpedia-owl:Mountain .
?range a dbpedia-owl:MountainRange ;
dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10