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

如何形成引用多个资源的SPARQL查询,sparql,wikipedia,dbpedia,Sparql,Wikipedia,Dbpedia,我的问题是后续问题 我对山对象的SPARQL查询结果如下所示 从这些结果中,我选择了一个明确的答案。 现在,我想获取is dbpedia owl的值:所选山对象的最高记录位置 也就是说,这座山是世界上海拔最高的山脉的名称 我认为这很复杂。不仅因为我不知道所需的语法,而且这里还有两个对象 其中一个是地点类型。 另一个是山脉型的——我想要的记录。 我需要上面的记录2,但不是1。我知道1也是相关的,但有时它不遵循相同的模式。有时,这些记录似乎是YAGO类型的,这可能会完全误导。为了安全起见,只要存在类

我的问题是后续问题

我对山对象的SPARQL查询结果如下所示

从这些结果中,我选择了一个明确的答案。 现在,我想获取is dbpedia owl的值:所选山对象的最高记录位置

也就是说,这座山是世界上海拔最高的山脉的名称

我认为这很复杂。不仅因为我不知道所需的语法,而且这里还有两个对象

其中一个是地点类型。 另一个是山脉型的——我想要的记录。 我需要上面的记录2,但不是1。我知道1也是相关的,但有时它不遵循相同的模式。有时,这些记录似乎是YAGO类型的,这可能会完全误导。为了安全起见,只要存在类型不匹配,我就想丢弃这些记录


如何形成SPARQL查询以获取这些是dbpedia owl:highestPlace的记录并进行类型筛选?

您可以使用此查询,但是请注意,在您的示例中,dbpedia owl:Place和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"))
   }
}
select * where {
  ?mountain a dbpedia-owl:Mountain .
  ?range a dbpedia-owl:MountainRange ;
         dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10

这将筛选出URL中包含任何带有“yago”的对象的结果

您可以使用此查询,但是请注意,在您的示例中,dbpedia owl:Place和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"))
   }
}
select * where {
  ?mountain a dbpedia-owl:Mountain .
  ?range a dbpedia-owl:MountainRange ;
         dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10

这将筛选出URL中包含任何带有“yago”的对象的结果

扩展上一个答案的结果,适当的查询将是

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 {
   ?place dbpedia-owl:highestPlace :Mont_Blanc.
   ?place rdf:type dbpedia-owl:MountainRange.
   FILTER NOT EXISTS { 
     ?place ?pred ?obj
     Filter (regex(?obj, "yago"))
   }
}
select * where {
  ?mountain a dbpedia-owl:Mountain .
  ?range a dbpedia-owl:MountainRange ;
         dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10

扩展上一个答案的结果,适当的查询将是

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 {
   ?place dbpedia-owl:highestPlace :Mont_Blanc.
   ?place rdf:type dbpedia-owl:MountainRange.
   FILTER NOT EXISTS { 
     ?place ?pred ?obj
     Filter (regex(?obj, "yago"))
   }
}
select * where {
  ?mountain a dbpedia-owl:Mountain .
  ?range a dbpedia-owl:MountainRange ;
         dbpedia-owl:highestPlace ?mountain .
}
LIMIT 10

目前必须运行,稍后将更新此。实际上,我在获取大多数山峰的范围时遇到了一点问题,需要进一步调查……如果您查看勃朗峰资源,有一个属性名为:is dbpedia owl:highestPlace of,这就是我需要的。它说,勃朗峰是某个范围内的最高峰。我需要那个范围的名称。某种外键。只有当它是山脉类型时,我才需要它,而不是地方或类似的东西。为了解释我之前的评论:我的问题是,在阅读页面时,我看到它是dbpedia owl:highestPlace of dbpedia:Western_Alps…并且一直在用?Mountain dbpedia owl:highestPlace?Range编写我的查询。当然,这是倒退;它必须是?range dbpedia owl:highestPlace?mountain。是的,除了过滤部分之外,它的工作方式与我想要的差不多。看:-这是一个我真正想要的地方,而不是山区。可以吗?@NiravBhatt SPARQL端点目前似乎已关闭,因此我现在无法测试其他查询。因为上面的查询包含模式?range a dbpedia owl:MountainRange,所以返回的所有?range都是dbpedia owl:MountainRanges。此外,MountainRange是NaturalPlace的一个子类,我希望NaturalPlace是Place的一个子类,所以每个MountainRange也是一个Place。如果你不想要位置,你不能有任何山脉。现在必须运行,稍后将更新此。实际上,我在获取大多数山峰的范围时遇到了一点问题,需要进一步调查……如果您查看勃朗峰资源,有一个属性名为:is dbpedia owl:highestPlace of,这就是我需要的。它说,勃朗峰是某个范围内的最高峰。我需要那个范围的名称。某种外键。只有当它是山脉类型时,我才需要它,而不是地方或类似的东西。为了解释我之前的评论:我的问题是,在阅读页面时,我看到它是dbpedia owl:highestPlace of dbpedia:Western_Alps…并且一直在用?Mountain dbpedia owl:highestPlace?Range编写我的查询。当然,这是倒退;它必须是?range dbpedia owl:highestPlace?mountain。是的,除了过滤部分之外,它的工作方式与我想要的差不多。看:-这是一个我真正想要的地方,而不是山区。会吗
完成了吗?@NiravBhatt SPARQL端点目前似乎已关闭,因此我现在无法测试其他查询。因为上面的查询包含模式?range a dbpedia owl:MountainRange,所以返回的所有?range都是dbpedia owl:MountainRanges。此外,MountainRange是NaturalPlace的一个子类,我希望NaturalPlace是Place的一个子类,所以每个MountainRange也是一个Place。如果你不想去任何地方,你就不能有任何山脉。谢谢,但我不想去的不仅仅是雅戈。我想要任何不属于Mountain Range类的内容。第一个查询已经这样做了。它只包含“山脉”类型的结果。不,它包含勃朗峰地块结果。如果你看-这是一个典型的地方。另一方面,如果你看另外三个,例如,它属于山脉类型。我要那三个,还要把勃朗峰和马西夫山赶出去。你到底指的是什么?如果查看rdf:type,它们都是owl:Thing,都是dbpedia owl:Place,dbpedia owl:NaturalPlace,都是dbpedia owl:MountainRange。当你看到我提到的两个链接时,你会发现前者是一个类型为:place的实体,而后者是一个类型为:mountain range的实体。谢谢,但我想避开的不仅仅是Yago。我想要任何不属于Mountain Range类的内容。第一个查询已经这样做了。它只包含“山脉”类型的结果。不,它包含勃朗峰地块结果。如果你看-这是一个典型的地方。另一方面,如果你看另外三个,例如,它属于山脉类型。我要那三个,还要把勃朗峰和马西夫山赶出去。你到底指的是什么?如果查看rdf:type,它们都是owl:Thing,都是dbpedia owl:Place,dbpedia owl:NaturalPlace,都是dbpedia owl:MountainRange。当你看到我提到的两个链接时,你会发现前者是一个类型为place的实体,而后者是一个类型为mountain range的实体。