下面的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 ].
}
}该查询来自以下问题的答案:Querying the Linked Movie Database (LMDB) with SPARQL
a关键字是什么意思?方括号[]代表什么?
我知道a关键字是rdf:type的替代品,我在没有参与者的情况下重写了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.
}
}谢谢你的回复,但代码遗漏了电影中的一些演员。例如,电影“桥太远”有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) 我编辑过的代码,仍然给出了2个演员的结果,而不是18个
filmlist.rq
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)发布于 2014-03-11 07:31:19
…是一个空白节点
方括号在SPARQL 1.1 Query Language中进行了说明。具体来说,请参见4.1.4 Syntax for Blank Nodes
4.1.4 Syntax for Blank Nodes
图形模式中的空白节点充当变量,而不是对正在查询的数据中特定空白节点的引用。
空白节点由标签形式(如"\_:abc" )或缩写形式"[]"表示。在查询语法中只在一个位置使用的空白节点可以用[]表示。将使用唯一的空白节点来形成三元组模式。对于标签为"abc“的空白节点,空白节点标签写为"_:abc"。在同一查询中,同一空白节点标签不能用于两个不同的基本图形模式。
[:p :v]构造可以在三重模式中使用。它创建一个空白节点标签,用作所有包含的谓语-宾语对的主语。创建的空白节点还可以在主语和宾语位置的进一步三元模式中使用。
以下两种形式
:p "v“。[] :p "v“。
分配一个唯一的空白节点标签(这里是"b57"),相当于这样写:
_:b57 :p "v“。
这个分配的空白节点标签可以用作进一步的三元模式的主语或宾语。例如,作为主题:
:p "v“:q "w”。
这相当于两个三元组:
_:b57 :p "v“。_:b57 :q "w“。
并且作为一个对象:
:x :q :p "v“。
这相当于两个三元组:
:x :q _:b57。_:b57 :p "v“。
a是rdf:type的缩写
a关键字是什么意思?方括号[]代表什么?
我知道a关键字是rdf:type的替代品
除此之外,没有什么可说的了。您可以使用a而不是rdf:type
4.2.4 rdf:type
关键字IRI可以用作三元组模式中的谓词,并且是"a" http://www.w3.org/1999/02/22-rdf-syntax-ns#type的替代。此关键字区分大小写。
?x a:1类。A :appClass :p "v“。
是语法糖,适用于:
?x rdf:类型:Class1。appClass:类型:_:b0。_:b0 :p "v“。
LinkedMDB施加了一些奇怪的限制
LinkedMDB端点对查询结果施加了一些奇怪的限制。其他一些问题和答案在过去也涉及到这一点,包括:
如果您需要获取一些超出默认返回范围的特定结果,则可能需要先包含一个order by,然后再包含一个limit。尽管如此,这个端点有一些奇怪的行为,对于特定的问题,您最好直接与他们联系;其中一些奇怪的行为并不表示查询有问题,而只是端点有问题。
发布于 2014-03-11 07:13:27
方括号表示SPARQL中的空节点,请参阅:http://www.w3.org/TR/sparql11-query/#QSynBlankNodes
这就像使用了一个新的变量。因此,不是:
?film movie:actor [ a movie:actor ;
movie:actor_name ?actorName ].你可以这样写:
?film movie:actor ?actor .
?actor a movie:actor .
?actor movie:actor_name ?actorName .其中,?actor是不在其他任何地方使用的新变量。对于不同的b节点(不同的括号对),它将是不同的变量。
至于限制,我不知道。服务器当前已关闭,因此我无法检查。这可能是他们自己配置的一些限制。
在任何情况下,要检索所有结果,都应该使用SPARQL LIMIT and OFFSET对结果进行“分页”。
https://stackoverflow.com/questions/22311732
复制相似问题