sparql:如何避免访问主题
我正在尝试编写SPARQL查询来查找不同的对象 以下是数据集:sparql:如何避免访问主题,sparql,Sparql,我正在尝试编写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/perso
<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 .
}
选择distinct?n其中{
a?b。
b?c?d。
d?e?n。
}
从数据集中,“?d”是,这是访问的主题。我想跳过访问的主题,这样“?d”为空,因此“?n”也为空 这里有几个问题需要解决: 从数据集中,“?d”是,这是访问的主题 这是因为RDF图是一个循环。SPARQL查询的第一位是:
<https://permid.org/1-36436064275> ?a ?b .
?d ?e ?n .
由于前面的模式已将?b
绑定到1-34414203048
,因此?c
(hasTenureInOrganization
)和?d
(1-36436064275
)只有一个选项。然后,查询的第三位是:
<https://permid.org/1-36436064275> ?a ?b .
?d ?e ?n .
?d
已经被前面的模式绑定,因此有一个选项用于?e
(rdf:type
)和?n
(1-36436064275
)
我想跳过访问的主题,这样“?d”为空,因此“?n”为空
也空了
SPARQL不是这样工作的。SPARQL仅在整个模式有结果时返回查询结果。如果?n
没有值,查询将返回空结果
话虽如此,如果您想确保?d
永远不等于您开始查询时使用的主题,您可以简单地添加一个过滤条件:
FILTER (?d != <https://permid.org/1-36436064275>)
过滤器(?d!=)
但是,正如我在评论中所说的,我认为你可能需要重新思考一下你的数据模型,并考虑你的查询的目的。p> 这里有几个问题需要解决: 从数据集中,“?d”是,这是访问的主题 这是因为RDF图是一个循环。SPARQL查询的第一位是:
<https://permid.org/1-36436064275> ?a ?b .
?d ?e ?n .
由于前面的模式已将?b
绑定到1-34414203048
,因此?c
(hasTenureInOrganization
)和?d
(1-36436064275
)只有一个选项。然后,查询的第三位是:
<https://permid.org/1-36436064275> ?a ?b .
?d ?e ?n .
?d
已经被前面的模式绑定,因此有一个选项用于?e
(rdf:type
)和?n
(1-36436064275
)
我想跳过访问的主题,这样“?d”为空,因此“?n”为空
也空了
SPARQL不是这样工作的。SPARQL仅在整个模式有结果时返回查询结果。如果?n
没有值,查询将返回空结果
话虽如此,如果您想确保?d
永远不等于您开始查询时使用的主题,您可以简单地添加一个过滤条件:
FILTER (?d != <https://permid.org/1-36436064275>)
过滤器(?d!=)
但是,正如我在评论中所说的,我认为你可能需要重新思考一下你的数据模型,并考虑你的查询的目的。p> 您的rdf数据看起来很奇怪,您的图表中有一个奇怪的循环:资源a有一个类型B,但B(显然)是一个在组织中有任期的人,这又是一个类型a。那么,如果
1-36436064275
是一个组织,而1-34414203048
是一个人,那么这个组织怎么可能是一种人呢?这听起来是错误的。还有一个提示:从你如何表达你的问题,我推断你正在把这当作某种图形遍历问题来处理。我建议你不要“仅仅”考虑图表,而是考虑图表中所包含的知识。考虑一下您的查询的目的是什么,根据您试图从数据中获取的知识(例如,检索“有任期的人”而不是“不同的对象”、“访问的节点”和“跟随的边”)。您的rdf数据看起来很奇怪,您的图中有一个奇怪的循环:资源a有一个类型B,但B是(显然)一个在一个组织中有任期的人,又是一个。那么,如果1-36436064275
是一个组织,而1-34414203048
是一个人,那么这个组织怎么可能是一种人呢?这听起来是错误的。另外一个提示:从你对问题的措辞来看,我推断你是在把它当作某种图表来处理的通用问题。我建议您不要“仅仅”考虑图表,而是考虑图表中捕获的知识。考虑您的查询目的是什么,即您试图从数据中获取的知识(例如,检索“拥有任期的人”而不是“不同的对象”的查询),“访问的节点”和“跟随的边”)。