首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >省略Sparql中的变量会更改结果

省略Sparql中的变量会更改结果
EN

Stack Overflow用户
提问于 2018-12-28 06:09:20
回答 1查看 40关注 0票数 2

我从欧盟理事会投票的公共记录的Sparql endpoint中查询一些数据。

目前,我希望获得记录投票的会话和动作编号,这可以通过以下查询来实现:

代码语言:javascript
复制
PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?act ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 

}
LIMIT 10

请注意,LIMIT 10只是为了在测试查询期间加快执行速度。结果如下:

但是,我必须在select列表中包含?act,否则结果是错误的:

为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-28 06:24:45

结果不是“错误的”,它们都是正确的答案:它们为您提供了匹配查询的所有结果的10个解决方案的子集。

在结果中得到不同解决方案的原因是,当您在SELECT子句中省略?act时,SPARQL端点以不同的方式优化查询执行。它可能会切换到不同的内部索引,并以不同的顺序返回解决方案。如果省略限制,您将看到两个结果是相同的,只是顺序不同。

您可以通过使用ORDER BY子句对查询强制执行特定顺序来解决此问题。例如:

代码语言:javascript
复制
PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?act ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 

}
ORDER BY ?act
LIMIT 10

代码语言:javascript
复制
PREFIX codi: <http://data.consilium.europa.eu/def/codi/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ecv: <http://data.consilium.europa.eu/data/public_voting/rdf/schema/>
PREFIX qb: <http://data.consilium.europa.eu/data/public_voting/qb/dimensionproperty/>

SELECT ?recordedVote ?sessionNumber ?actNumber 
WHERE {
   ?recordedVote a <http://purl.org/linked-data/cube#Observation>.
   ?recordedVote qb:sessionnrnumber ?session.
   ?session skos:prefLabel ?sessionNumber.
   ?recordedVote qb:act ?act.
   ?act skos:prefLabel ?actNumber 
} 
ORDER BY ?act
LIMIT 10

将返回相同的结果(当然,减去一列)。

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

https://stackoverflow.com/questions/53951363

复制
相关文章

相似问题

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