首页 > 解决方案 > 使用自动分配的空白节点和具体数据

问题描述

我正在尝试查询使用 RDF 物化词汇的数据集,如下所示:

myprefix:statement1 rdf:subject myprefix:object1 .
myprefix:statement1 rdf:predicate myprefix:isrelatedto .
myprefix:statement1 rdf:object myprefix:object2 .

myprefix:statement2 rdf:subject myprefix:object2 .
myprefix:statement2 rdf:predicate myprefix:isrelatedto .
myprefix:statement2 rdf:object myprefix:object3 .

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix myprefix: <mydomain#>
select *
from <mydomain>
where {
 [ rdf:subject ?first ; rdf:predicate myprefix:isrelatedto ; rdf:object _:1 ] .
 [ rdf:subject _:1 ; rdf:predicate myprefix:isrelatedto ; rdf:object ?second ] .
}

Result:
 __________________ __________________
| first            | second           |
|__________________|__________________|
| myprefix:object1 | myprefix:object2 |
|__________________|__________________|

我可以用 [ ] 构造以某种方式替换标记的空白节点 _:1 吗?

编辑:应该解释问题的原因是,在实际用例中,我有一个更复杂的查询,需要获取可变数量的这样的属性(查询是动态生成的)。所以我想要做的是摆脱带标签的节点,这样我就不必动态生成唯一的标签。

标签: sparqlblank-nodesreification

解决方案


[ ]当最多有一个引用时有效。

在这里,我们有:

... rdf:object _:1

... rdf:subject _:1

所以两个对当前写入的空白节点的引用。

如果您可以修改查询的其余部分,则有可能。意图是否更清晰是您必须做出判断的事情。

因为在部分:

[ rdf:subject _:1 ; ....]

没有将外部[ ]空白节点用于任何内容,因此可能会rdf:object/^rdf:subject按照评论中的建议使用。

意图是否更清晰是您必须做出判断的事情。


推荐阅读