什么是SPARQL支架和为什么链接的电影数据库限于2500条记录?(What are bracket

2019-10-19 12:40发布

以下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 ].
  }
}

查询是从一个问题的答案: 用SPARQL查询链接的电影数据库(LMDB)

什么是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

filmlistrq

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)

Answer 1:

[...]是一个空节点

方括号中描述SPARQL 1.1查询语言 。 特别是,见4.1.4语法空节点

4.1.4语法空节点

在图模式空白节点作为变量,而不是在数据特定空节点的引用被查询。

空白节点由任一标签形式表示,如"\_: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

什么是一个关键字是什么意思? 什么方括号[]代表什么?

我理解的是,一个关键词是RDF的替代品:类型

有没有真的很多比说。 您可以使用a替代的rdf:type

4.2.4 RDF:类型

关键字"a"可被用作在一个三重图案的谓词,并且对于IRI替代http://www.w3.org/1999/02/22-rdf-syntax-ns#type 。 此关键字是区分大小写的。

 ?xa :Class1 . [ a :appClass ] :p "v" . 

是语法糖:

 ?x rdf:type :Class1 . _:b0 rdf:type :appClass . _:b0 :p "v" . 

LinkedMDB强加一些奇怪的限制

该LinkedMDB端点规定了查询结果的一些奇怪的限制。 其他一些问题和答案在过去谈到了这一点,包括:

  • 无法检索与LinkedMDB高的ID与SPARQL电影
  • LinkedMDB SPARQL查询

如果你需要得到的是所返回什么默认范围之外的一些具体的结果,你可能会想包括order by ,然后一个limit 。 即便如此,这个端点有一些奇怪的行为,而对于具体问题,你可能最好关闭直接与他们联系; 一些奇怪的现象,并不表示你的查询问题,但只是一个与端点问题。



Answer 2:

方括号表示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和OFFSET 。



文章来源: What are brackets in SPARQL and why is the linked movie database limited to 2500 records?