可选后备SPARQL模式的替代方案?

时间:2015-04-29 11:20:09

标签: sparql

我需要为目标集中的每个资源检索单个图像,使用优先级顺序测试多个非独占谓词。

currently使用标准的可选后备模式

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 }

}

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

3 个答案:

答案 0 :(得分:3)

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

另一种方法是获取每个替代方案并选择第一组。

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)
}

答案 1 :(得分:0)

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

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}
} 

答案 2 :(得分:0)

来自Artemis原创的高尔夫球场,问题在于谓词的排序。因此,我们可以使用以下内容而不是简单的值:

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中并不简单。