joe*_*oel 1 sparql limit offset
以下SPARQL查询仅提取2500个带有演员和电影的记录我不知道为何限制为2500:
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
SELECT ?id ?filmTitle ?actorName WHERE {
SERVICE <http://data.linkedmdb.org/sparql> {
?film a movie:film ;
movie:filmid ?id ;
dcterms:title ?filmTitle ;
movie:actor [ a movie:actor ;
movie:actor_name ?actorName ].
}
}
Run Code Online (Sandbox Code Playgroud)
查询来自问题的答案:使用SPARQL查询链接的电影数据库(LMDB)
什么是a关键字是什么意思?方括号[]代表什么?
我知道a关键字是替代品rdf:type,我在没有actor的情况下重写了一部分SPARQL查询.但我仍然无法弄清楚方括号[]的含义.
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?film ?id ?filmTitle WHERE {
#VALUES ?filmTitle { "The Matrix" }
SERVICE <http://data.linkedmdb.org/sparql> {
?film rdf:type movie:film.
?film movie:filmid ?id.
?film rdfs:label ?filmTitle.
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的回复,但代码错过了一些电影演员.例如,电影"A Bridge Too Far"有18个演员,但此查询的结果只有2个
PREFIX dcterms: <purl.org/dc/terms/>;
PREFIX movie: <data.linkedmdb.org/resource/movie/>;
SELECT ?id ?filmTitle ?actorName
WHERE {
SERVICE <data.linkedmdb.org/sparql>;
{
?film a movie:film ;
movie:filmid ?id ;
dcterms:title ?filmTitle ;
movie:actor [ a movie:actor ;
movie:actor_name ?actorName ].
}
} ORDER BY ASC(?filmTitle)
Run Code Online (Sandbox Code Playgroud)
我编辑的代码,仍然给出2个演员而不是18个演员的相同结果
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?film ?id ?filmTitle ?actorName WHERE {
#VALUES ?filmTitle { "The Matrix" }
SERVICE <http://data.linkedmdb.org/sparql> {
?film rdf:type movie:film.
?film movie:filmid ?id.
?film rdfs:label ?filmTitle.
?film movie:actor ?actorID.
?actorID movie:actor_name ?actorName.
}
}
ORDER BY ASC(?filmTitle)
Run Code Online (Sandbox Code Playgroud)
方括号在SPARQL 1.1查询语言中描述.特别参见4.1.4空节点的语法
4.1.4空节点的语法
图形模式中的空白节点充当变量,而不是对要查询的数据中的特定空白节点的引用.
空白节点由标签形式表示,例如
"\_:abc",或缩写形式"[]".可以使用在查询语法中仅在一个位置使用的空白节点来指示[].将使用唯一的空白节点来形成三重模式.空白节点标签是"_:abc"针对标签为"abc"的空白节点编写的.相同的空白节点标签不能在同一查询中的两个不同的基本图形模式中使用.该
[:p :v]构建体可以以三重模式使用.它创建一个空白节点标签,用作所有包含的谓词 - 对象对的主题.创建的空白节点还可以用于主题和对象位置中的其他三重模式.以下两种形式
Run Code Online (Sandbox Code Playgroud)[ :p "v" ] . [] :p "v" .分配一个唯一的空白节点标签(这里是"b57"),相当于写:
Run Code Online (Sandbox Code Playgroud)_:b57 :p "v" .该分配的空白节点标签可以用作其他三重模式的主题或对象.例如,作为主题:
Run Code Online (Sandbox Code Playgroud)[ :p "v" ] :q "w" .这相当于两个三元组:
Run Code Online (Sandbox Code Playgroud)_:b57 :p "v" . _:b57 :q "w" .并作为一个对象:
Run Code Online (Sandbox Code Playgroud):x :q [ :p "v" ] .这相当于两个三元组:
Run Code Online (Sandbox Code Playgroud):x :q _:b57 . _:b57 :p "v" .
a 是简写 rdf:type关键字是什么意思?方括号[]代表什么?
我知道a关键字是rdf:type的替代品
除此之外没有更多的话要说.您可以使用a而不是rdf:type:
4.2.4 rdf:类型
关键字
"a"可以用作三重模式中的谓词,并且是IRI的替代http://www.w3.org/1999/02/22-rdf-syntax-ns#type.此关键字区分大小写.Run Code Online (Sandbox Code Playgroud)?x a :Class1 . [ a :appClass ] :p "v" .语法糖是:
Run Code Online (Sandbox Code Playgroud)?x rdf:type :Class1 . _:b0 rdf:type :appClass . _:b0 :p "v" .
LinkedMDB端点对查询结果施加了一些奇怪的限制.过去还有其他一些问题和答案,包括:
如果你需要得到一些超出返回值的默认范围的特定结果,你可能想要包括a order by然后a limit.即便如此,这个端点有一些奇怪的行为,对于特定的问题,你可能最好直接联系他们; 其中一些奇怪的事情并不表示您的查询有问题,但只是端点问题.
方括号表示SPARQL中的空白节点,请参阅:http://www.w3.org/TR/sparql11-query/#QSynBlankNodes
这就像使用一个新变量.所以代替:
?film movie:actor [ a movie:actor ;
movie:actor_name ?actorName ].
Run Code Online (Sandbox Code Playgroud)
你可以写:
?film movie:actor ?actor .
?actor a movie:actor .
?actor movie:actor_name ?actorName .
Run Code Online (Sandbox Code Playgroud)
where ?actor是一个在其他地方没有使用的新变量.对于不同的b节点(不同的括号对),它将是不同的变量.
至于极限,我不知道.服务器当前已关闭,因此无法检查.这可能是他们配置的一些限制.
无论如何,要检索所有结果,您应该使用SPARQL LIMIT和OFFSET对结果进行"分页" .
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |