2015-04-29 27 views
2

我需要为目标集中的每个资源检索单个图像,并使用优先级顺序测试多个非独占谓词。可选的备用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 { ?r <http://xmlns.com/foaf/0.1/logo> ?i } 
    optional { ?r <http://schema.org/image> ?i } 

} 

行一个标准的可选备用模式,但这种做法是谈到了将一些后台麻烦currently:是任何人都知道任何简单的/有效的替代方案吗?

+2

你见过[SPARQL(1.1)]的优先模式(http://answers.semanticweb.com/questions/20682/preference-patterns-for-sparql-11)吗?这里发布的大多数答案似乎都适用于那些较旧的方法。 –

+0

唉,是的。我正在寻找一种解决方案,它是i)合理轻量级的,并且ii)可以跨不同的后端进行移植,而无需调整。不幸的是,当“?a dbo:Automobile”被复杂的实际模式所取代时,可选后备模式(无论是否使用合并)的两种变体倾向于引发一系列特定于后端的查询执行错误。我希望在SO上有新的东西;-) –

+0

那么,你已经证明它的例子与已经得到解答的问题非常相似。如果您的实际问题存在差异,那么它们很重要,我想您将不得不在这里包含它们以获得不同的答案。 –

回答

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

我只需要检索第一个匹配图像的对象谓词。编辑问题以澄清查询要求。不管怎么说,还是要谢谢你。 –

+0

你能提一下麻烦吗?你的问题听起来像你需要更换,但现在我不确定。所以你只需要thubmail?那么剩下的可选要点是什么? – Artemis

+0

我明白 - A'B想要一个缩略图,如果存在的话,否则描述如果存在,否则...等等。因此,每次使用?i。这可能是棘手的,因为有一个要遵守的命令(缩略图>描述> ...)。嗯。 – user205512

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

+0

这并不困难,但你确实需要在子查询中进行图像选择。你已经几乎彻底改变了[来自这里]的答案(http://answers.semanticweb.com/questions/20682/preference-patterns-for-sparql-11/20696)。 –

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

此外,您的答案[this answers.semanticweb.com问题](http://answers.semanticweb。com/questions/20682/preference-patterns-for-sparql-11)地址提供了更多选项。 –

+0

@AndyS在上面看到我的评论 –