1

我的问题是我在此处关于 SPARQL 的第一个问题的后续问题。

我对 Mountain 对象的 SPARQL 查询结果在此处

从这些结果中,我选择了某个对象资源。现在我想为这个选定的 Mountain 对象获取“ is dbpedia-owl:highestPlace of ”记录的值。

即,该山最高处的山脉的名称。

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

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

如何形成我的 SPARQL 查询以获取这些“是 dbpedia-owl:highestPlace of ”记录并进行类型过滤?

4

2 回答 2

4

您可以使用此查询,但请注意,您的示例中的Mont_Blanc_massif既是 adbpedia-owl:Place又是 adbpedia-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"))
   }
}

这会过滤掉object其 URL 中带有“yago”的结果。

于 2013-05-26T12:59:39.583 回答
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 结果

这会选择具有英语摘要的山脉,这些山脉至少有一个描述(否则模式将不匹配),并且有一些山脉,其中山脉是最高的地方。如果没有前面问题中的部分,如果您只想检索范围内最高位置的山脉,您可以使用如下查询:

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

SPARQL 结果

于 2013-05-26T13:04:08.817 回答