可选回退SPARQL模式的替代方案?

可选回退SPARQL模式的替代方案?,sparql,Sparql,我需要为目标集中的每个资源检索一个映像,以优先级顺序测试多个非独占谓词 我使用的是一种标准的可选回退模式 select ?r ?i where { ?r a dbo:Automobile . optional { ?r <http://dbpedia.org/ontology/thumbnail> ?i } optional { ?r <http://xmlns.com/foaf/0.1/depiction> ?i } optional

我需要为目标集中的每个资源检索一个映像,以优先级顺序测试多个非独占谓词

我使用的是一种标准的可选回退模式

select ?r ?i where {

    ?r a dbo:Automobile .

    optional { ?r <http://dbpedia.org/ontology/thumbnail> ?i }
    optional { ?r <http://xmlns.com/foaf/0.1/depiction> ?i }
    optional { ?r <http://xmlns.com/foaf/0.1/logo> ?i }
    optional { ?r <http://schema.org/image> ?i }

}

但这种方法在某些后端变得很麻烦:有人知道任何简单/有效的替代方法吗?

我认为您只需要过滤谓词。类似这样的事情可能会有所帮助:

prefix schema:<http://schema.org/>
prefix foaf:<http://xmlns.com/foaf/0.1/>
prefix dbpedia-owl:<http://dbpedia.org/ontology/>
select distinct ?r ?i
where {
?r a dbpedia-owl:Automobile .
?r ?p ?i.
values ?p { foaf:logo foaf:depiction dbpedia-owl:thumbnail schema:image}
} 

从阿耳特弥斯的原著来看,这里的问题是谓词的顺序。因此,我们可以使用以下值,而不是简单的值:

values (?p ?pref) { 
  (dbpedia-owl:thumbnail 1)
  (foaf:depiction 2)
  (foaf:logo 3)
  (schema:image 4)
}
现在我们可以按顺序选择:

prefix schema:<http://schema.org/>
prefix foaf:<http://xmlns.com/foaf/0.1/>
prefix dbpedia-owl:<http://dbpedia.org/ontology/>
select distinct ?r ?i
where {
    ?r a dbpedia-owl:Automobile .
    ?r ?p ?i.
    values (?p ?pref) { 
      (dbpedia-owl:thumbnail 1)
      (foaf:depiction 2)
      (foaf:logo 3)
      (schema:image 4)
    }
}
order by ?r ?pref
这几乎给了我们所需要的。然后我们只需要按?r分组,然后选择?pref最大的行


不幸的是,这在SPARQL中并不简单。

选项有什么问题?重复使用?我

一种不同的方法是获取每个备选方案并选择第一组

select ?r ?i where {

    ?r a dbo:Automobile .
    optional { ?r <http://dbpedia.org/ontology/thumbnail> ?i1 }
    optional { ?r <http://xmlns.com/foaf/0.1/depiction> ?i2 }
    optional { ?r <http://xmlns.com/foaf/0.1/logo> ?i3 }
    optional { ?r <http://schema.org/image> ?i4 }
    BIND(COALESCE(?i1,?i2,?i3,?i4) AS ?i)
}

我只需要检索第一个匹配图像谓词的对象。编辑问题以澄清查询要求。不管怎样,谢谢。你能告诉我什么是麻烦的吗?你的问题听起来好像你需要一个替代者,但现在我不确定。所以你只需要那根短发?那么剩下的可选点是什么呢?我明白-A'B想要一个缩略图(如果有的话),或者一个描述(如果有的话),否则。。。因此每次都使用?i。这可能会很棘手,因为有一个顺序,即尊重缩略图>描述>。。。。嗯,你看到了吗?这里发布的大多数答案似乎都是那些旧方法的变体。唉,是的。我正在寻找一个解决方案,是我合理的轻量级和ii跨不同的后端移植,而无需调整。不幸的是,当dbo:Automobile被复杂的、真实的模式所取代时,使用或不使用coalesce的可选回退模式的两种变体往往会引发一系列后端特定的查询执行错误。我希望能有新的东西出现-好吧,正如你所展示的例子,它几乎等同于已经回答的问题。如果您的实际问题存在差异,那么它们很重要,我认为您必须将它们包括在这里才能得到不同的答案。@JeenBroekstra CONSTRUCT+后期处理的可能重复听起来很有可能这并不难,但您确实需要在子查询中进行图像选择。您几乎已经重新发明了来自的答案。此外,您的地址答案还提供了更多选项。@AndyS请参见我上面的评论