使用带有CONSTRUCT的LIMIT的意外结果

use*_*899 3 sparql

CONSTRUCT使用这个查询会发生一些奇怪的事情LIMIT.我希望收到1级或2的解决方案LIMIT 1,并LIMIT 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
Run Code Online (Sandbox Code Playgroud)

我有没有误解LIMITCONSTRUCT,或者是有耶拿API中的错误?

Rob*_*obV 5

您的问题有点不清楚您的期望和实际情况,但无论如何我都会尝试回答.

LIMIT适用于WHERE一个查询的部分,在说明书中有一种使用的例子LIMITCONSTRUCT,它指出以下:

CONSTRUCT模板的输出图仅由图模式匹配中的两个解决方案组成

即它最多WHERE子句中获取两行并将它们提供给CONSTRUCT模板.

由于模板可能会生成许多三元组,因此实际的最大结果数是限制乘以模板中三重模式的数量.由于模板中的各个模式可能会生成无效的三元组(并且根据规范将其丢弃),因此实际获得的三元组数可能会更低:

如果任何此类实例化生成包含未绑定变量或非法RDF构造的三元组,例如主题或谓词位置中的文字,则该三元组不包含在输出RDF图中

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