如何将起始资源中的所有S-&>;P-&>O三元组返回到指定的路径深度? [英] How to return all S->P->O triples from a starting resource to a specified path depth?

查看:15
本文介绍了如何将起始资源中的所有S-&>;P-&>O三元组返回到指定的路径深度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是以图形方式表示距离指定资源p:Person_1两个边的深度内的S->P->O关系。我希望将该路径长度内的所有关系作为?s, ?p, ?o从我的查询中返回,以便在我的图形应用程序中进一步处理。

我尝试了下面的第一个查询,它给出了我的第一组?s ?p ?o重复,然后?p2, ?o2, ?p3, ?o3作为结果中的附加列。我想将?p2?p3绑定到?p?o2?o3?o

  SELECT *
    WHERE {
        p:Person_1 ?p ?o .
        BIND("p:Person_1" as ?s)
        OPTIONAL{
            ?o ?p2 ?o2 .
        }
        OPTIONAL{
            ?o2 ?p3 ?o3 .
        }
    }
然后,基于How do I construct get the whole sub graph from a given resource in RDF Graph?,我尝试使用CONSTRUCT返回图形。

PREFIX p: <http://www.example.org/person/> 
PREFIX x: <example.org/foo/>

construct { ?s ?p ?o }
FROM <http://localhost:8890/MYGRAPH>
where { p:Person_1 (x:|!x:)* ?s . 
        ?s ?p ?o . 
}

我正在使用Virtuoso,收到错误:

Virtuoso 37000 Error SP031: SPARQL compiler: Variable ?_::trans_subj_9_3 in T_IN list is not a value from some triple

我可以对第一个查询的结果进行后处理,但我希望了解如何使用SPARQL正确执行此操作,最好是在Virtuoso上。

测试@AKSW的建议后更新: CONSTRUCTSELECT语句都使用建议的模式。

CONSTRUCT { ?s ?p ?o }
FROM <http://localhost:8890/MYGRAPH>
where { p:Person_1 (x:foo|!x:bar)* ?s . 
        ?s ?p ?o . 
} LIMIT 100

和:

SELECT s ?p ?o 
FROM <http://localhost:8890/MYGRAPH>
where { p:Person_1 (x:foo|!x:bar)* ?s . 
        ?s ?p ?o . 
} LIMIT 100
SELECT会产生几个无法使用DISTINCT删除的重复项,这会导致错误,我认为这是由于某些返回值的"数据类型"造成的。

Virtuoso 22023 Error SR066: Unsupported case in CONVERT (DATETIME -> IRI_ID)

似乎有一些SPARQL后期处理是按顺序进行的。

这就把我带到了大部分地方。仍然希望我能找到一个类似Cypher的"跳数"的SPARQL解决方案:

OPTIONAL MATCH path=s-[*1..3]-(o)

Virtuoso

这里有一个在推荐答案中工作的SPARQL查询。注意SPARQL W3C标准不支持此语法,它将在其他三元组存储中失败。

PREFIX p: <http://www.example.org/person/> 
PREFIX x: <example.org/foo/>
# CONSTRUCT {?s ?p ?o}  # If you wish to return the graph
SELECT ?s ?p ?o   # To return the triples
FROM <http://localhost:8890/MYGRAPH>
where { p:Person_1 (x:foo|!x:bar){1,3} ?s  .
  ?s ?p ?o .
}LIMIT 100

另请参阅K.Idehen的维基条目:http://linkedwiki.com/exampleView.php?ex_id=141

感谢@Joshua Taylor在同一领域的建议。

这篇关于如何将起始资源中的所有S-&>;P-&>O三元组返回到指定的路径深度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆