Sparql使用过滤器并选择invidual
我想检索演员演的所有电影。我不确定如何指定我想要结果的演员(protege中的个人)。下面的代码返回空表Sparql使用过滤器并选择invidual,sparql,protege,Sparql,Protege,我想检索演员演的所有电影。我不确定如何指定我想要结果的演员(protege中的个人)。下面的代码返回空表 PREFIX f: <http://imdb.com/movie.owl#> SELECT ?title WHERE { ?movie a f:Movie . ?movie f:Title ?title . ?actor a f:Actor . ?actor f:playsIn ?movie . FILTER(?actor = "Acto
PREFIX f: <http://imdb.com/movie.owl#>
SELECT ?title
WHERE {
?movie a f:Movie .
?movie f:Title ?title .
?actor a f:Actor .
?actor f:playsIn ?movie .
FILTER(?actor = "Actor_1")
}
前缀f:
选择?标题
在哪里{
电影甲:电影。
电影f:片名?片名。
演员a f:演员。
演员f:在电影中扮演角色。
过滤器(?actor=“actor\u 1”)
}
OWL个体由IRI标识,因此,您必须在查询中使用完整或带前缀的IRI,而不是字符串文字: 前缀f: 选择?标题 在哪里{ 电影甲:电影。 电影f:片名?片名。 演员a f:演员。 演员f:在电影中扮演角色。 过滤器(?actor=) } 更新 正如@Joshua Taylor正确指出的那样,如果支持SPARQL 1.1,您应该使用
值
功能,与过滤器相比,这可能更符合此处的目的:
前缀f:
选择?标题
在哪里{
值?参与者{f:actor_1}
?电影a f:电影;
f:头衔?头衔。
?演员a f:演员;
f:玩什么?电影。
}
OWL个体由IRI标识,因此,您必须在查询中使用完整或带前缀的IRI,而不是字符串文字:
前缀f:
选择?标题
在哪里{
电影甲:电影。
电影f:片名?片名。
演员a f:演员。
演员f:在电影中扮演角色。
过滤器(?actor=)
}
更新
正如@Joshua Taylor正确指出的那样,如果支持SPARQL 1.1,您应该使用值
功能,与过滤器相比,这可能更符合此处的目的:
前缀f:
选择?标题
在哪里{
值?参与者{f:actor_1}
?电影a f:电影;
f:头衔?头衔。
?演员a f:演员;
f:玩什么?电影。
}
在这种情况下,您不需要过滤器。您可以将个人包含在三重模式中:
PREFIX f: <http://imdb.com/movie.owl#>
SELECT DISTINCT ?title
WHERE {
?movie a f:Movie .
?movie f:Title ?title .
?actor a f:Actor .
<http://imdb.com/movie.owl#Actor_1> f:playsIn ?movie .
}
在这种情况下,您不需要过滤器。您可以将个人包含在三重模式中:
PREFIX f: <http://imdb.com/movie.owl#>
SELECT DISTINCT ?title
WHERE {
?movie a f:Movie .
?movie f:Title ?title .
?actor a f:Actor .
<http://imdb.com/movie.owl#Actor_1> f:playsIn ?movie .
}
1.大多数查询引擎都能够内联替换URI,因此,性能应该无关紧要。现在查询引擎会为您做什么,您忘记为第三个三重模式变量
?actor
设置URI,因此,您当前的查询有一个无用的三重模式选择所有的actor。3.第三种三重模式毫无用处D 4。干杯,这不是同等的。另一个答案抓住了这个意图:“?演员a f:演员。?演员f:播放?电影。过滤器(?actor=@JoshuaTaylor,事实上,我错过了要求f:actor_1
成为f:actor
的三重要求,在这种情况下,正如您所建议的那样,使用值更好。但我仍然认为最好不要使用过滤器。1.大多数查询引擎都能够内联替换URI,因此,性能应该无关紧要。2.现在情况发生了,例如:查询引擎会为您做什么呢?您忘记了为第三个三重模式变量?actor
设置URI,因此,您当前的查询有一个无用的三重模式选择所有参与者。3.第三个三重模式根本没有用。:D 4.干杯。这是不等价的。另一个答案捕获了意图:”?演员a f:演员。?演员f:播放?电影。过滤器(?actor=@JoshuaTaylor,事实上,我错过了要求f:actor_1成为一个f:actor
的三重要求,在这种情况下,正如你所建议的那样,使用值更好。但我仍然认为最好不要使用过滤器。或者,为了提升永远有用的值,因为其目的不是真正的过滤,而是仅仅检索某些特定的值首先是值:values?actor{}?actor a f:actor…
。好的,我也喜欢值
功能。我将来会尝试使用更多SPARQL 1.1功能。@JoshuaTaylor我想知道第三个三元组模式是否真的是必要的,在这里是否有用。我的意思是它是三元组,对查询的其余部分没有帮助。你认为呢?你的意思是?actor af:Actor_1
?是的,因为?Actor的值已经知道,它不会提供任何额外的数据。但是,如果Actor_1没有预期的类型,它将导致查询不返回任何结果,因此它可能有一个目的。查询本质上是“如果Actor_1有这个特定类型,那么就给我这些相关的值”或者,为了提升有用的值,因为其目的并不是真正地过滤,而是首先只检索某些值:values?actor{}?actor a f:actor…
。好的,我也喜欢值
功能。我将来会尝试使用更多SPARQL 1.1功能。@JoshuaTaylor我想知道第三个三元组模式是否真的是必要的,在这里是否有用。我的意思是它是三元组,对查询的其余部分没有帮助。你认为呢?你的意思是?actor af:Actor_1
?是的,因为?Actor的值已经知道,它不会提供任何额外的数据。但是,如果Actor_1没有预期的类型,它将导致查询不返回任何结果,因此它可能有目的。查询本质上是“如果Actor_1有这个特定类型,那么就给我这些相关的值”。