Sparql 使用带有构造的LIMIT时出现意外结果

Sparql 使用带有构造的LIMIT时出现意外结果,sparql,Sparql,使用LIMIT在这个构造查询中发生了一些奇怪的事情。我希望分别为限制1和限制2收到1或2个解决方案,即一个或两个图,但我总是得到两个图,有11或12个三元组 CONSTRUCT { ex:sceneResource skos:related ?newSceneSubject. ?newSceneSubject a lcx:Scene ; dcterms:subject ?type ; lcx:hasTitle

使用
LIMIT
在这个
构造
查询中发生了一些奇怪的事情。我希望分别为
限制1
限制2
收到1或2个解决方案,即一个或两个图,但我总是得到两个图,有11或12个三元组

CONSTRUCT { 
  ex:sceneResource skos:related ?newSceneSubject.
  ?newSceneSubject a lcx:Scene ;
                   dcterms:subject ?type ; 
                   lcx:hasTitle ?title ;
                   lcx:describedBy ?thumbNail ;
                   lcx:motto ?motto ;
                   lcx:freebaseID ?freebaseID
}
WHERE { 
  { ?newSceneSubject a ex:interestType1 }
  UNION
  { ?newSceneSubject a ex:interestType2 } 
  ?newSceneSubject lcx:hasTitle ?title ;
                   a ?type .
                   lcx:freebaseID ?freebaseID .
  OPTIONAL { ?newSceneSubject lcx:motto ?motto  }
  OPTIONAL { ?newSceneSubject lcx:describedBy ?thumbNail }
}
LIMIT 2

我是否误解了
CONSTRUCT
中的
限制
,或者Jena API中存在缺陷?

您的问题对于您期望的内容和实际得到的内容有点不清楚,但我还是会尝试回答

LIMIT
适用于查询的
WHERE
部分,在中有一个将
LIMIT
构造一起使用的示例,它说明了以下内容:

构造模板的输出图形仅由两个图形组成 图模式匹配的求解方法

i、 e.它从
WHERE
子句中最多取两行,并将它们馈送到
构造
模板

由于模板可能会生成多个三元组,因此实际的最大结果数是限制乘以模板中三元组模式的数量。由于模板中的单个模式可能会生成无效的三元组(并且这些三元组会根据被丢弃),因此实际获得的三元组数量可能会更低:

如果任何这样的实例化产生一个包含未绑定 变量或非法的RDF构造,例如subject或 谓词位置,则该三元组不包括在输出RDF中 图表


因此,根据您的描述和规范,Jena的行为完全正确。

谢谢Rob。我会澄清我的忧虑。查询构造{skos:related?newSceneSubject.}其中{newSceneSubject rdf:type}UNION{newSceneSubject rdf:type}UNION{newSceneSubject rdf:type}.“?newSceneSubject rdf:type?type.}LIMIT 3”返回一个单三重图,同一查询(限制为30)返回四个单三重图。也就是说,WHERE部分至少有4个解决方案,但当我设置限制3时,只返回一个。@user2498899完全不可读,请使用“编辑”按钮编辑您的问题并添加其他详细信息。另外,我不明白返回多个图是什么意思,
构造
返回一个RDF图,因此您也应该真正解释问题的这一部分-最好显示预期结果与实际结果