SPARQL 如何根据对象的主题选择不同的查询?
How to choose a different query based on the subject of an object in SPARQL?
假设我有以下数据
subject = david
predicate = knows
object1 = Amy
object2 = Brian
subject = Amy
predicate = gender
object = female
subject = Brian
predicate = gender
object = male
现在我想找到 david 认识的所有人,但根据他们的性别执行不同的查询,因此伪代码看起来像这样:
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 语句只能打印出信息,不能用于决定执行什么查询。
如果有人知道如何实现上述目标,我将不胜感激。
在这种情况下,您可以这样做:
select ?something where {
:David :knows ?person
optional {
?person :gender "female" .
#-- more query
}
optional {
?person :gender "male" .
#-- more query
}
}
两个可选部分都是可选的,只有性别匹配的才能匹配,所以本质上是一个条件查询。请注意,如果您有 :person :gender "male", "female"
这样的数据,您将同时执行这两项操作,如果您没有提供性别,则两者都不会执行。
假设我有以下数据
subject = david
predicate = knows
object1 = Amy
object2 = Brian
subject = Amy
predicate = gender
object = female
subject = Brian
predicate = gender
object = male
现在我想找到 david 认识的所有人,但根据他们的性别执行不同的查询,因此伪代码看起来像这样:
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 语句只能打印出信息,不能用于决定执行什么查询。
如果有人知道如何实现上述目标,我将不胜感激。
在这种情况下,您可以这样做:
select ?something where {
:David :knows ?person
optional {
?person :gender "female" .
#-- more query
}
optional {
?person :gender "male" .
#-- more query
}
}
两个可选部分都是可选的,只有性别匹配的才能匹配,所以本质上是一个条件查询。请注意,如果您有 :person :gender "male", "female"
这样的数据,您将同时执行这两项操作,如果您没有提供性别,则两者都不会执行。