检索所有相邻节点,其中节点是特定类型,并且至少有一个节点不是特定三元组的主题

  • 本文关键字:节点 有一个 三元组 类型 检索 sparql
  • 更新时间 :
  • 英文 :


我有一个SPARQL查询,旨在检索与另一个特定类的实例相邻的特定类的所有实例。例如:

SELECT ?origin ?dependent WHERE {
?origin a :type1 . 
?origin ?somePredicate ?dependent. 
?dependent a :type2 .
}

假设上述查询的结果如下所示:

?origin    ?dependent
node1      node3
node1      node4
node2      node5
node2      node6

因此,在这种情况下,有两个指定类型的节点同时连接到node1node2。现在,我想将结果限制为那些?dependent结果,其中这两个节点中至少有一个不是特定三元组的主题,但在只有一个节点具有三元组的情况下仍然返回这两个节点。

假设图中存在以下三元组:

node4 :isSubjectOf :thisTriple .
node5 :isSubjectOf :thisTriple .
node6 :isSubjectOf :thisTriple .

让我们假设node3是节点 3-6 中唯一没有这个特定三元组的节点。现在,我想编写一个查询以使我的结果集如下所示:

?origin    ?dependent
node1      node3
node1      node4

我希望我把这个问题的措辞说得足够好,以便被理解。有没有一些方便有效的SPARQL技术来完成这样的事情?如果可能的话,宁愿避免FILTER

这就是我对数据的设想:

@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 .

这是一个查询,可以获取您所要求的内容。 您可以在同一主语和同一宾语之间创建不同的三重模式,只要对绑定它们的谓词使用不同的变量名称即可。

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    |
+--------+-----------+

相关内容

最新更新