如何根据 SPARQL 中对象的主题选择不同的查询?

Posted

技术标签:

【中文标题】如何根据 SPARQL 中对象的主题选择不同的查询?【英文标题】:How to choose a different query based on the subject of an object in SPARQL? 【发布时间】:2016-12-21 14:14:57 【问题描述】:

假设我有以下数据

subject = david
predicate = knows
object1 = Amy
object2 = Brian

subject = Amy
predicate = gender
object = female

subject = Brian
predicate = gender
object = male

现在我想找到大卫认识的所有人,但会根据他们的性别执行不同的查询,所以伪代码看起来像这样:

SELECT ?something
WHERE

david rdf:knows ?person

if?person rdf:gender "female" 
 do this query
else if ?person rdf:gender "male"
do this query 

据我所见,SPARQL if 语句只能打印出信息,不能用于决定要执行的查询。

如果有人知道如何实现上述目标,我将不胜感激。

【问题讨论】:

【参考方案1】:

在这种情况下,您可以执行以下操作:

select ?something where 
   :David :knows ?person

   optional 
     ?person :gender "female" .
     #-- more query
   
   optional 
     ?person :gender "male" .
     #-- more query
   

这两个可选部分都是可选的,只有匹配性别的部分才能匹配,所以本质上是一个条件查询。请注意,如果您有:person :gender "male", "female" 之类的数据,您将同时执行这两项操作,如果您没有提供性别,您将不会执行任何操作。

【讨论】:

以上是关于如何根据 SPARQL 中对象的主题选择不同的查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何优化我的递归 SPARQL 查询?

SPARQL 选择查询在 JENA 中返回意外结果

如何递归扩展 SPARQL 构造查询中的空白节点?

语句部分匹配的 SPARQL 查询(包含)

如何迭代引用虚拟图的 SPARQL 查询?

如何将 Sparql 查询结果存储到数组中?