Sparql 两个节点之间任意长度的无向属性路径

Sparql 两个节点之间任意长度的无向属性路径,sparql,rdf,Sparql,Rdf,我想制定一个SPARQL查询,询问节点a和d之间是否存在无向路径 我的数据如下: <a> <p1> <b> <c> <p2> <b> <c> <p3> <d> 这是一个相同数据的小ascii图形 (a) --> (b) <-- (c) --> (d) (a)-->(b)(d) 我尝试了以下查询: ASK WHERE { <a> (<

我想制定一个SPARQL查询,询问节点a和d之间是否存在无向路径

我的数据如下:

<a> <p1> <b>
<c> <p2> <b> 
<c> <p3> <d>

这是一个相同数据的小ascii图形

(a) --> (b) <-- (c) --> (d)
(a)-->(b)(d)
我尝试了以下查询:

ASK   
WHERE {
  <a>  (<>|^<>)* <d> .
}
询问
在哪里{
(|^)*  .
}

当被问到a和d之间是否有无向路径时,如何进行ASK SPARQL查询并返回yes?

数据中没有属性,因此这将不匹配。“任意边”的常见模式是
|,即数据中不存在的属性
p
非p


((|!)|^(|!)*
应该在您的示例中起作用。

您的数据中没有属性
,因此该如何匹配。任何边的通用图案都是
|,即数据中不存在的p的p与否
((|!)| ^(|!)*
可能有效我的理解是,,,和匹配,我是否误解了什么?为什么我要匹配“不是p”,我只想要存在的路径!我在我的示例数据上尝试了这个模式,它很有效。您能否解释一下为什么此路径可以解决我的问题?
不是通配符,而是一个实体,其URI将相对于当前的基本URI进行解析。属性路径没有通配符,但解决方法是使用数据中不存在的URI,然后在两个节点之间始终存在路径,因为必须满足p或not p。这是很明显的,因为谓词的URI不能确定both@AKSW请随意发布答案,我会接受的。干杯