Sparql 检索节点为特定类型且至少有一个不是特定类型主体的所有相邻节点
我有一个SPARQL查询,用于检索与另一个特定类的实例相邻的特定类的所有实例。例如:Sparql 检索节点为特定类型且至少有一个不是特定类型主体的所有相邻节点,sparql,Sparql,我有一个SPARQL查询,用于检索与另一个特定类的实例相邻的特定类的所有实例。例如: SELECT?origin?dependent WHERE{ ?产地a:类型1。 起源?某些谓词?依赖。 ?从属a:类型2。 } 假设上述查询的结果如下所示: ?来源?相关 节点1节点3 节点1节点4 节点2节点5 节点2节点6 因此,在这种情况下,有两个指定类型的节点同时连接到node1和node2。现在,我想将结果限制为那些依赖于?的结果,其中这两个节点中至少有一个不是特定三元组的主体,但在只有一个节点
SELECT?origin?dependent WHERE{
?产地a:类型1。
起源?某些谓词?依赖。
?从属a:类型2。
}
假设上述查询的结果如下所示:
?来源?相关
节点1节点3
节点1节点4
节点2节点5
节点2节点6
因此,在这种情况下,有两个指定类型的节点同时连接到node1
和node2
。现在,我想将结果限制为那些依赖于?的结果,其中这两个节点中至少有一个不是特定三元组的主体,但在只有一个节点具有三元组的情况下仍然返回这两个结果
假设图中存在以下三元组:
node4:issubjtof:thisttriple。
节点5:isSubjectOf:thisTriple。
节点6:isSubjectOf:thisTriple。
让我们假设node3
是节点3-6中唯一没有此特定三元组的节点。现在,我想编写一个查询,使我的结果集如下所示:
?来源?相关
节点1节点3
节点1节点4
我希望我把这个问题说得足够清楚,让人能理解。是否有一些方便而高效的SPARQL技术来完成类似的任务?如果可能的话,我宁愿避免过滤。这就是我对数据的设想:
@prefix ns0: <http://example.com/> .
<http://example.com/node1>
a <http://example.com/type1> ;
ns0:somePredicate ns0:node3, ns0:node4 .
ns0:node2
a ns0:type1 ;
ns0:somePredicate ns0:node5, ns0:node6 .
ns0:node3
a ns0:type2 ;
ns0:isSubjectOf ns0:thisTriple .
ns0:node4 a ns0:type2 .
ns0:node5 a ns0:type2 .
ns0:node6 a ns0:type2 .
这个答案对于我的上一个问题来说非常好。我更新了这个问题,以更好地反映我的实际用例,即仅在没有特定三元组的情况下,而不是在有一个三元组的情况下才包含。我认为您可以使用减号操作,或者使用可怕的过滤器(!bound(?theTrip))
或过滤器不存在来处理这个否定的情况{?主题:isSubjectOf?主题}
我认为这些解决方案不会返回结果集,包括一个依赖于三元组和一元组的情况without@hayfreed如果您提供一个完整的最小数据样本,这样我们就不必自己猜测和创建数据了,这将是一个很好的选择,并且这个数据应该是一个有效的RDF片段,这样我们就可以运行和测试SPARQL查询有很多选项可以解决您的问题。不要忘记,您还可以将联合
放入筛选器NOT EXISTS``中,SPARQL 1.1还提供了
IF-ELSE`feature@StanislavKralin你是对的,现在回想起来,我应该问另一个问题,而不是更新我以前的问题d该问题的解决方案是针对我的申请的,但我还没有想到一个通用的解决方案,该解决方案适合作为一个公认的答案。
PREFIX : <http://example.com/>
SELECT ?origin ?dependent
WHERE
{ ?origin a :type1 ;
?somePredicate ?dependent .
?dependent a :type2 .
?origin ?anyPred ?theSubj .
?theSubj :isSubjectOf ?theTrip
}
+--------+-----------+
| origin | dependent |
+--------+-----------+
| :node1 | :node3 |
| :node1 | :node4 |
+--------+-----------+