SPARQL属性路径,第一部分是唯一的,路径在之后重复

SPARQL属性路径,第一部分是唯一的,路径在之后重复,sparql,Sparql,假设我们有三个 a1 blah <http://foo.com/f> a1 pt c1 c1 pt d1 我可以将“c1”更改为“a1”或“d1”,并且上面的sparql仍然有效完全正确,您需要使用序列,而不是替代项。根据您的示例,听起来您实际上希望通过“blah”的零次或一次出现以及“pt”的零次或多次出现来连接到特定对象的主题 如果您想对特定的谓词p和q执行此操作,您可以使用IRI引用指定这些谓词,那么 ?x p?/q* ?y *后面的*表示零或多,而后面的?表

假设我们有三个

a1  blah <http://foo.com/f>
a1  pt   c1
c1  pt   d1
我可以将“c1”更改为“a1”或“d1”,并且上面的sparql仍然有效

完全正确,您需要使用序列,而不是替代项。根据您的示例,听起来您实际上希望通过“blah”的零次或一次出现以及“pt”的零次或多次出现来连接到特定对象的主题

如果您想对特定的谓词pq执行此操作,您可以使用IRI引用指定这些谓词,那么

?x p?/q* ?y
*后面的*表示零或多,而后面的表示零或一

但是,如果您事先不知道特定的虹膜,例如,您希望使用变量,例如:

?x (?p)?/(?q)* ?y

那你可能就不走运了。SPARQL属性路径不支持变量。您可以在属性路径中使用类似s |的通配符!s,因为每个URI要么是s,要么不是,但没有将可重复变量放入属性路径的规定。

您需要序列运算符
/
,而不是可选运算符
|
。您想要特定的谓词blah和pt,还是想要任何序列“这个谓词,然后重复这个谓词“?它不必是特定的预关联。我试图得到任何一个由这些谓词连接的主语。“blah”谓词只能将主语连接到宾语,但“pt”谓词可以将项目N连接起来。我将尝试序列运算符并让您知道。@AriesOnTheCusp您在评论中所说的话听起来好像您确实想要一个替代选项,而不是序列。您的标题说“第一部分是唯一的,路径在后面重复”,但您的注释说“由这些谓词中的任何一个连接”。你到底想要哪个:(“x p y”或“x q*y”)或(“x p z”,然后是“z q*y”)?@AriesOnTheCusp根据你的评论重新阅读你的例子,我认为你想要一个形式为
p?/q*
的路径,上面写着“零或一个p,然后是零或多个q”。我更新了我的答案。我更新了描述。对不起,如果我描述得不好。基本上,有一条路径将一个IRIs连接到foo.com/f,但我不知道如何从多个方向连接路径
?x (?p)?/(?q)* ?y