假设我们有三元组
a1 blah <http://foo.com/f>
a1 pt c1
c1 pt d1
我将如何构造一个SPARQL查询来选择a1
orc1
或or d1
?我需要能够遍历一个blah
或多个pt
谓词。
因此a1可以是以下三元组的一部分:a1 blah <http://foo.com/f>
但我不知道如何指定其不是a1而是通过另一个路径在另一个方向上连接到a1的对象的情况。但是我还需要使用blah保留路径,因为那是a1或f1通过以下方式连接到对象的原因:
这是我如何使其工作的方式,但它并不漂亮:
select * from
{
# other sparql stuff before it
{ ?s blah <http://foo.com/f>
?s pt+ <c1> }
UNION
{ <c1> blah <http://foo.com/f> }
}
我可以将“ c1”更改为“ a1”或“ d1”,并且上面的sparql仍然有效
AKSW的评论完全正确,您需要使用序列,而不是替代方案。根据您的示例,听起来您实际上想要的是通过零个或一次出现的“ blah”,然后是零次或更多次出现的“ pt”,将对象连接到特定对象。
如果要对可以使用IRI引用指定的特定谓词p和q进行此操作,则只需
?x p?/q* ?y
在*继q表示零或更多,和?跟随p表示零或一。
但是,如果您事先不知道特定的IRI,例如,您想使用变量,例如:
?x (?p)?/(?q)* ?y
那么您可能会不走运。SPARQL属性路径不支持变量。您可以使用诸如s |!s之类的属性路径获取通配符,因为每个URI要么是s,要么不是,但是没有将可重复变量放入属性路径的规定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句