Sparql 使用过滤器选择个人
Sparql use filter with selecting invidual
我想检索演员出演的所有电影。我不确定如何指定我想要结果的演员(个人)。下面的代码 returns 为空 table.
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")
}
OWL 个体由 IRI 标识,因此,您必须在查询中使用完整或带前缀的 IRI,而不是字符串文字:
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 = <http://imdb.com/movie.owl#Actor_1>)
}
更新
正如@Joshua Taylor 正确指出的那样,如果支持 SPARQL 1.1,您应该使用 VALUES
功能,与 FILTER
:
相比,这可能更符合这里的预期
PREFIX f: <http://imdb.com/movie.owl#>
SELECT ?title
WHERE {
VALUES ?actor { f:Actor_1 }
?movie a f:Movie ;
f:Title ?title .
?actor a f:Actor ;
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 .
}
此查询不仅更短,而且当 运行 针对更大的数据集时会有更好的性能。
当然,如果您声明了前缀,则不需要整个 URI:
SELECT DISTINCT ?title
WHERE {
?movie a f:Movie .
?movie f:Title ?title .
?actor a f:Actor .
f:Actor_1 f:playsIn ?movie .
}
我想检索演员出演的所有电影。我不确定如何指定我想要结果的演员(个人)。下面的代码 returns 为空 table.
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")
}
OWL 个体由 IRI 标识,因此,您必须在查询中使用完整或带前缀的 IRI,而不是字符串文字:
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 = <http://imdb.com/movie.owl#Actor_1>)
}
更新
正如@Joshua Taylor 正确指出的那样,如果支持 SPARQL 1.1,您应该使用 VALUES
功能,与 FILTER
:
PREFIX f: <http://imdb.com/movie.owl#>
SELECT ?title
WHERE {
VALUES ?actor { f:Actor_1 }
?movie a f:Movie ;
f:Title ?title .
?actor a f:Actor ;
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 .
}
此查询不仅更短,而且当 运行 针对更大的数据集时会有更好的性能。
当然,如果您声明了前缀,则不需要整个 URI:
SELECT DISTINCT ?title
WHERE {
?movie a f:Movie .
?movie f:Title ?title .
?actor a f:Actor .
f:Actor_1 f:playsIn ?movie .
}