【发布时间】:2016-07-09 16:37:46
【问题描述】:
我正在尝试使用 SPARQL 1.1 属性路径构建完整的 RDF 集合。我看到的属性路径示例能够获取 rdf:first 节点,但我还没有看到能够获取整个链的示例,包括 bnodes。查询的关键部分如下所示:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX sc: <http://iiif.io/api/presentation/2#>
CONSTRUCT {?range sc:hasCanvases ?listid .
?listid rdf:first ?canvas .
?listid rdf:rest ?mid .
?mid rdf:rest ?node .
?node rdf:first ?canvas .
?node rdf:rest ?last .
[...]}
WHERE {values ?range {<http://some.uri>}
?range sc:hasCanvases ?listid .
values ?e { rdf:first rdf:rest }
?listid rdf:rest* ?mid .
?mid ?e ?node FILTER (?mid != ?node).
?listid rdf:first ?first .
?node rdf:first ?canvas .
?node rdf:rest ?last .
[...]}
除了 ?listid 节点绑定到属性路径中的每个 rdf:rest ?mid 对象外,它大部分都有效。
jsonld.fromRDF 方法中有一个referencedOnce 约束,这使得这些额外的头部三元组对于使用该库进行列表重建有问题。我尝试了各种子查询、属性路径和过滤器,但我很坚持这一点。可能吗?
【问题讨论】:
-
如果您可以显示您正在使用的完整构造查询,将会有所帮助。目前尚不清楚您要构建什么,因为您忽略了那部分。也不清楚您所说的“头节点”是什么意思;查询中没有
?head... -
感谢您提供此解决方案@JoshuaTaylor 问题出在查询的 CONSTRUCT 部分(为了清楚起见,我现在添加了它)。我只是从这个:
?range sc:hasCanvases ?listid .?listid rdf:first ?canvas .?listid rdf:rest ?mid .更改为这个:?range sc:hasCanvases ?listid .?mid rdf:first ?canvas .?mid rdf:rest ?last .,它可以工作。似乎属性路径的主题迭代地绑定到路径中的每个匹配对象。因此,当在 CONSTRUCT 中引用时,它会显示类似 1-1、1-2、1-3、1-4、1-5 的模式。