在Sparql中省略变量会更改结果

在Sparql中省略变量会更改结果,sparql,Sparql,我在查询欧盟理事会投票公开记录的一些数据 目前,我想获取记录投票的会话和act编号,我可以通过以下查询实现: 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/sch

我在查询欧盟理事会投票公开记录的一些数据

目前,我想获取记录投票的会话和act编号,我可以通过以下查询实现:

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
前缀尾码:
前缀skos:
前缀ecv:
前缀qb:
选择?记录表决?会议编号?法案?行动编号
在哪里{
?记录表决a。
?记录表决qb:会议编号?会议。
?会议skos:预标签?会议编号。
记录表决qb:act?act。
?act skos:预标签?act编号
}
限制10
请注意,
LIMIT 10
仅用于在测试查询期间加速执行。结果如下:

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

为什么会这样?

结果不是“错误”,它们都是正确的答案:它们给出了与查询匹配的所有结果的10个解的子集

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

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

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
前缀尾码:
前缀skos:
前缀ecv:
前缀qb:
选择?记录表决?会议编号?法案?行动编号
在哪里{
?记录表决a。
?记录表决qb:会议编号?会议。
?会议skos:预标签?会议编号。
记录表决qb:act?act。
?act skos:预标签?act编号
}
法令
限制10

前缀尾码:
前缀skos:
前缀ecv:
前缀qb:
选择?记录投票?会议编号?活动编号
在哪里{
?记录表决a。
?记录表决qb:会议编号?会议。
?会议skos:预标签?会议编号。
记录表决qb:act?act。
?act skos:预标签?act编号
} 
法令
限制10

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

非常感谢。:)
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