我目前正在尝试获取演员所扮演的电影(我想要他们的URI)。当我探索linkedmdb时,我看到“是”演员“of”,但我不能在我的SPARQL查询中使用它。它是一些特殊的命名空间还是什么?或者它是在OWL本体中?我现在使用的查询是:
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?actorName ?filmName WHERE{
<http://data.linkedmdb.org/resource/actor/30947> movie:actor_name ?actorName .
<http://data.linkedmdb.org/resource/actor/30947> movie:performance ?film .
?film movie:performance_film ?filmName .
}
此代码仅返回标题,我想要电影的整个URI。
答案 0 :(得分:3)
说那个
o x
是说数据包含三重
的常用方法s p o
所以看到了
actor32 是 movie89
的演员
表示数据包含
movie89演员actor32
我会说属性 actor 命名不佳。它更像是 features 或 hasActor ,但是RDF是通过数据库的映射生成的,所以我想一些名称是自动生成的,并且它们可以'一切都很棒。无论如何,这意味着像下面这样的查询会找到<http://data.linkedmdb.org/resource/actor/30947>
所做的所有电影及其标题。
SELECT ?movie ?movieTitle WHERE{
?movie movie:actor <http://data.linkedmdb.org/resource/actor/30947> .
?movie dc:title ?movieTitle .
}
除此之外,您可以使用;
继续predicate object list来略微缩短此查询,这样您就不必重复主题?movie
:< / p>
SELECT ?movie ?movieTitle WHERE{
?movie movie:actor <http://data.linkedmdb.org/resource/actor/30947> ;
dc:title ?movieTitle .
}
Notation3 (N3): A readable RDF syntax,它非常像Turtle, the Terse RDF Triple Language(实际上,Turtle是N3的一个子集),但其中包含了更多的句法结构,实际上允许“is-of”方式写三元组。 谓词的语法生成是:
predicate
expression
"<="
"="
"=>"
"@a"
"@has" expression
"@is" expression "@of"
这意味着在N3中,你可以,例如。使用
枚举类的一些实例ex:Planet @is rdf:type @of
:Mercury, :Venus, :Earth, :Mars, :Jupiter, :Saturn, :Uranus, :Neptune .
而不是必须
:Mercury rdf:type ex:Planet .
:Venus rdf:type ex:Planet .
:Earth rdf:type ex:Planet .
:Mars rdf:type ex:Planet .
:Jupiter rdf:type ex:Planet .
:Saturn rdf:type ex:Planet .
:Uranus rdf:type ex:Planet .
:Neptune rdf:type ex:Planet .
不幸的是,许多声称支持N3的工具实际上只支持Turtle,并且不接受第一种形式。但是,你正在使用实际支持N3的东西,你可以写
<http://data.linkedmdb.org/resource/actor/30947> @is movie:actor @of ?movie .
?movie dc:title ?movieTitle .
可悲的是,SPARQL Syntax for Triple Patterns不支持@is — @of
,因此您无法在查询中执行此操作。