Sparql使用过滤器并选择invidual

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

我想检索演员演的所有电影。我不确定如何指定我想要结果的演员(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 = "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有这个特定类型,那么就给我这些相关的值”。