繁体   English   中英

sparql:如何避免访问主题

[英]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-344142030481-34414203048 查询模式的第二部分是:

?b ?c ?d .

由于?b已通过以前的模式绑定到1-34414203048 ,所以?chasTenureInOrganization )和?d1-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM