使用CONSTRUCT
在此LIMIT
查询中发生了一些奇怪的事情。我希望分别获得LIMIT 1
和LIMIT 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
我是否误解LIMIT
CONSTRUCT
,或者Jena API中是否有错误?
答案 0 :(得分:5)
您的问题有点不清楚您的期望和实际情况,但无论如何我都会尝试回答。
LIMIT
适用于查询的WHERE
部分,在specification中有LIMIT
与CONSTRUCT
一起使用的示例,并说明以下内容:
CONSTRUCT模板的输出图只由两个构成 图模式匹配的解决方案
即。它最多需要 两行WHERE
子句并将其提供给CONSTRUCT
模板。
由于模板可能会生成许多三元组,因此实际的最大结果数是限制乘以模板中三重模式的数量。由于模板中的单个模式可能会生成无效的三元组(并且根据specification丢弃这些模式),因此您获得的实际三元组数可能会更低:
如果任何此类实例化生成包含未绑定的三元组 变量或非法的RDF结构,例如主语或文字中的文字 谓词位置,然后该三元组不包括在输出RDF中 图
因此,根据您的描述和规范,Jena的行为是完全正确的。