选择以递归方式链接到一个主题的所有内容

时间:2016-03-01 00:33:41

标签: recursion sparql rdf rdfs

所以,我想选择以特定方式递归链接到主题的所有内容。我知道sparql AF​​AIK中没有递归,所以我希望还有其他方法可以解决这个问题。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ir: <http://itemrelation.com/ir#>
SELECT ?item
WHERE { ?item a ir:Item .
    { ir:MainItem ir:RelatedTo ?item }
    UNION { ?item ir:RelatedTo ir:MainItem } }

这应该得到项目ir的所有项目:MainItem具有关系“ir:RelatedTo”to,以及与项目ir:MainItem具有关系“ir:RelatedTo”的所有项目。

但这不是我想要的,我想以与ir:MainItem相关的方式获取当前所选项目以及与当前所选项目相关的所有项目。不仅如此,我还希望以相同方式与这些项目相关的项目等......

所以,问题是,我如何以所描述的方式获得与ir:MainItem“递归相关”的所有项目?

1 个答案:

答案 0 :(得分:7)

SPARQL 1.1 property paths可行,{{3}}如下:

PREFIX ir: <http://itemrelation.com/ir#>

SELECT ?item WHERE {
    ir:MainItem (ir:RelatedTo|^ir:RelatedTo)+ ?item.
    ?item a ir:Item.
}

ir:MainItem开始,查询以正向或反向递归遍历ir:RelatedTo谓词,选择已连接的项并将其过滤为ir:Item类型。