所以,我想选择以特定方式递归链接到主题的所有内容。我知道sparql AFAIK中没有递归,所以我希望还有其他方法可以解决这个问题。
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“递归相关”的所有项目?
答案 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
类型。