3

在这个CONSTRUCT查询中使用LIMIT. 我希望分别收到 和 的 1 个或 2 个解决方案LIMIT 1LIMIT 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

我是否误解LIMITCONSTRUCT,或者 Jena API 中是否存在错误?

4

1 回答 1

6

您的问题对于您的期望和实际得到的有点不清楚,但无论如何我都会尝试回答。

LIMIT应用于查询的一部分WHERE,在规范中有一个使用LIMITwith的示例,CONSTRUCT它说明以下内容:

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

即从子句中最多需要两行并将它们提供给模板。WHERECONSTRUCT

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

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

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

于 2013-08-23T23:30:54.763 回答