首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL中的括号是什么?为什么链接的电影数据库限制为2500条记录?

SPARQL中的括号是什么?为什么链接的电影数据库限制为2500条记录?
EN

Stack Overflow用户
提问于 2014-03-11 05:30:36
回答 2查看 1.7K关注 0票数 2

下面的SPARQL查询只获取了2500条包含演员和电影的记录,我不知道为什么限制为2500条:

代码语言:javascript
复制
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查询的一部分。但是我仍然不能理解方括号[]的意思。

代码语言:javascript
复制
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个

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 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“。

ardf: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。尽管如此,这个端点有一些奇怪的行为,对于特定的问题,您最好直接与他们联系;其中一些奇怪的行为并不表示查询有问题,而只是端点有问题。

票数 7
EN

Stack Overflow用户

发布于 2014-03-11 07:13:27

方括号表示SPARQL中的空节点,请参阅:http://www.w3.org/TR/sparql11-query/#QSynBlankNodes

这就像使用了一个新的变量。因此,不是:

代码语言:javascript
复制
?film movie:actor [ a movie:actor ;
                    movie:actor_name ?actorName ].

你可以这样写:

代码语言:javascript
复制
?film movie:actor ?actor .
?actor a movie:actor .
?actor movie:actor_name ?actorName .

其中,?actor是不在其他任何地方使用的新变量。对于不同的b节点(不同的括号对),它将是不同的变量。

至于限制,我不知道。服务器当前已关闭,因此我无法检查。这可能是他们自己配置的一些限制。

在任何情况下,要检索所有结果,都应该使用SPARQL LIMIT and OFFSET对结果进行“分页”。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22311732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档