loops - 查询中的 SPARQL 'for-loop'

标签 loops nested one-to-many sparql

我有一个简单的 SPARQL 查询:

SELECT DISTINCT ?class1 ?class2
    WHERE {
        ?class1 :child ?attribute1 .
        ?class2 :child ?attribute2 .
        ?attribute1 :objectName ?name1 .
        ?attribute2 :objectName ?name2 .
        FILTER (?name1 = ?name2)
    }

在 RDF 图中,其中一个“类”可以有多个子类。我想要做的是,找到重复的类,其中重复意味着一个类中的所有子级(由 objectName 标识)也都在另一个类中。

它的作用是,返回每个类,其中至少一个子类也存在于另一个类中。

所以我正在寻找某种方式对每个类(class)的所有 child 进行迭代,但我还找不到方法。如果有人能提供帮助,那就太好了。

谢谢

最佳答案

请注意,SPARQL 是一种声明式语言,而不是命令式语言,因此不存在迭代的概念。您可以在 RDF 存储中的 API 中执行此操作,但至少在理论上,用 SPARQL 表达它会更有效。

我认为你需要做的是找到类的所有组合,并减去某些 objectName 不同的组合。

以下内容完全未经测试!

SELECT DISTINCT ?class1 ?class2
WHERE {
   ?class1 :child ?attribute1 .
   ?class2 :child ?attribute2 .
   MINUS {
      ?attribute1 :objectName ?name1 .
      ?attribute2 :objectName ?name2 .
      FILTER (?name1 != ?name2 && ?attribute1 = ?attribute2 )
   }
}

正确的可能性很小:),但它应该会给您一些启发。

关于loops - 查询中的 SPARQL 'for-loop',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17443848/

相关文章:

Javascript 不产生所需的输出

c - 一次又一次初始化时,指针在循环内做了什么?

loops - 如何在一个从索引i和i + 1取值的数组上创建迭代器?

asp.net-mvc-3 - ASP.NET MVC 3 一对多无法更新桥接表

jquery - 我如何使用 jQuery 循环这个 JSON 结果?

javascript - 如何使用 Jquery/Javascript 添加嵌套元素?

python - 在Python中迭代嵌套的有序字典,然后将键(或值)保存到Pandas数据帧

javascript - Node.JS - 在另一个函数中调用预定义函数

php - 一对多搜索查询

hibernate - 这种方法是单向的还是双向的