【问题标题】:Filter for property path in SPARQL 1.1SPARQL 1.1 中的属性路径过滤器
【发布时间】:2016-05-10 15:54:29
【问题描述】:

有没有办法过滤像

这样的查询
select ?x ?y  where {?x <http://relationship.com/wasRevisionOf>+ ?y }";

提供的数据集具有以下输出:

http://article.com/2-3 http://article.com/2-2
http://article.com/2-3 http://article.com/2-1
http://article.com/2-4 http://article.com/2-3
http://article.com/2-4 http://article.com/2-2
http://article.com/2-4 http://article.com/2-1
http://article.com/2-2 http://article.com/2-1
http://article.com/1-3 http://article.com/1-2
http://article.com/1-3 http://article.com/1-1
http://article.com/1-2 http://article.com/1-1

我们如何过滤查询,以便我们删除所有 ?x 值等于另一个结果中的 ?y 值的结果。这样,我们将得到

http://article.com/2-4 http://article.com/2-3
http://article.com/2-4 http://article.com/2-2
http://article.com/2-4 http://article.com/2-1

因为所有其他结果的 ?x 值作为 ?y 值出现在另一个结果中。

这是数据集:

<http://article.com/1-3> <http://relationship.com/wasGeneratedBy> <http://edit.com/comment1-2> .
<http://article.com/1-3> <http://relationship.com/wasRevisionOf> <http://article.com/1-2> .
<http://edit.com/comment1-2> <http://relationship.com/used> <http://article.com/1-2> .
<http://edit.com/comment1-2> <http://relationship.com/wasAssociatedWith> <http://editor.com/user1-1> .

<http://article.com/1-2> <http://relationship.com/wasGeneratedBy> <http://edit.com/comment1-1> .
<http://article.com/1-2> <http://relationship.com/wasRevisionOf> <http://article.com/1-1> .
<http://edit.com/comment1-1> <http://relationship.com/used> <http://article.com/1-1> .
<http://edit.com/comment1-1> <http://relationship.com/wasAssociatedWith> <http://editor.com/user1-1> .

<http://article.com/2-4> <http://relationship.com/wasGeneratedBy> <http://edit.com/comment2-3> .
<http://article.com/2-4> <http://relationship.com/wasRevisionOf> <http://article.com/2-3> .
<http://edit.com/comment2-3> <http://relationship.com/used> <http://article.com/2-3> .
<http://edit.com/comment2-3> <http://relationship.com/wasAssociatedWith> <http://editor.com/user2-3> .

<http://article.com/2-3> <http://relationship.com/wasGeneratedBy> <http://edit.com/comment2-2> .
<http://article.com/2-3> <http://relationship.com/wasRevisionOf> <http://article.com/2-2> .
<http://edit.com/comment2-2> <http://relationship.com/used> <http://article.com/2-2> .
<http://edit.com/comment2-2> <http://relationship.com/wasAssociatedWith> <http://editor.com/user2-2> .

<http://article.com/2-2> <http://relationship.com/wasGeneratedBy> <http://edit.com/comment2-1> .
<http://article.com/2-2> <http://relationship.com/wasRevisionOf> <http://article.com/2-1> .
<http://edit.com/comment2-1> <http://relationship.com/used> <http://article.com/2-1> .
<http://edit.com/comment2-1> <http://relationship.com/wasAssociatedWith> <http://editor.com/user2-1> .

【问题讨论】:

    标签: sparql rdf semantic-web triplestore propertypath


    【解决方案1】:
    select ?x ?y  where {?x <http://relationship.com/wasRevisionOf>+ ?y }
    

    我们如何过滤查询,以便我们删除所有结果 一个 ?x 值等于另一个结果中的一个 ?y 值。

    如果某一行中的 ?x 值是另一行中的 ?y 值,则意味着存在 ?x 是 wasRevisionOf 属性上某个三元组的对象。您可以简单地将它们过滤掉:

    select ?x ?y  where {
      ?x <http://relationship.com/wasRevisionOf>+ ?y
      filter not exists {
        ?something <http://relationship.com/wasRevisionOf> ?x
      }
    }
    

    这确保 ?x 的每个值都是链的“开始”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多