[英]sparql: how to avoid visited subject
并且我正在尝试编写SPARQL查询来查找不同的对象。
这是数据集:
<https://permid.org/1-36436064275> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://permid.org/1-34414203048> .
<https://permid.org/1-34414203048> <http://permid.org/ontology/person/hasTenureInOrganization> <https://permid.org/1-36436064275> .
我的sparql查询是这样的:
select distinct ?n where {
<https://permid.org/1-36436064275> ?a ?b .
?b ?c ?d .
?d ?e ?n .
}
在数据集中,“?d”是https://permid.org/1-36436064275 ,它是被访问的主题。 我想跳过访问的主题,因此“?d”为空,因此“?n”也为空。
这里有几件事要解决:
在数据集中,“?d”是https://permid.org/1-36436064275 ,它是被访问的主题。
发生这种情况是因为您的RDF图是一个循环。 您的SPARQL查询的第一位是:
<https://permid.org/1-36436064275> ?a ?b .
这将?a
绑定到rdf:type
,并将?b
1-34414203048
到1-34414203048
。 查询模式的第二部分是:
?b ?c ?d .
由于?b
已通过以前的模式绑定到1-34414203048
,所以?c
( hasTenureInOrganization
)和?d
( 1-36436064275
)只有一个选项。 然后查询的第三位是:
?d ?e ?n .
?d
已被先前的模式绑定,因此?e
(再次为rdf:type
)和?n
(再次为1-36436064275
)具有一个选项。
我想跳过访问的主题,因此“?d”为空,因此“?n”也为空。
这不是SPARQL的工作方式。 如果整个模式都有结果,则SPARQL仅返回查询结果。 如果?n
没有值,查询将返回空结果。
话虽如此,如果您想确保?d
永远不等于您开始查询的主题,则可以简单地添加一个FILTER条件:
FILTER (?d != <https://permid.org/1-36436064275>)
但是,就像我在评论中所说的那样,我认为您可能需要重新考虑一下数据模型,并考虑一下查询的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.