如何形成引用多个资源的SPARQL查询

时间:2013-05-26 09:54:14

标签: sparql wikipedia dbpedia

我的问题是my first question about SPARQL here的后续跟进。

我对山对象的SPARQL查询结果是here

从这些结果我选择了某个object resource。 现在,我希望获得此选定Mountain对象的“是dbpedia-owl:highestPlace of ”记录的值。

这座山是最高的山脉的名称。

正如我所说,这是复杂的。不仅因为我不知道所需的语法,而且我在这里得到两个对象。

我需要记录#2而不是1.我知道1也是相关的,但有时它不遵循相同的模式。有时记录似乎是YAGO类型,这可能完全是误导。为了安全起见,我只想在类型不匹配时丢弃这些记录。

如何构建我的SPARQL查询以获取这些“是dbpedia-owl:highestPlace of ”记录并且还具有类型过滤功能?

2 个答案:

答案 0 :(得分:4)

您可以使用此查询,但请注意,示例中的Mont_Blanc_massif同时为dbpedia-owl:Placedbpedia-owl:MountainRange

select * where {
   ?place dbpedia-owl:highestPlace :Mont_Blanc.
   ?place rdf:type dbpedia-owl:MountainRange.
}

run query

评论后修改:过滤
你不想清楚你要过滤什么(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

SPARQL Results

选择具有至少一个描述的英文摘要的山脉(或者图案不匹配)并且其中有一些山脉是山脉最高的地方。如果没有前面问题的部分,如果您只想检索范围最高的山脉,可以使用如下查询:

select * where {
  ?mountain a dbpedia-owl:Mountain .
  ?range a dbpedia-owl:MountainRange ;
         dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10

SPARQL results