首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL 1.1中属性路径的筛选器

SPARQL 1.1中属性路径的筛选器
EN

Stack Overflow用户
提问于 2016-05-10 15:54:29
回答 1查看 271关注 0票数 2

有什么方法可以过滤类似于

代码语言:javascript
复制
select ?x ?y  where {?x <http://relationship.com/wasRevisionOf>+ ?y }";

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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值出现。

以下是数据集:

代码语言:javascript
复制
<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> .
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 16:32:14

选择?x ?y其中{x http://relationship.com/wasRevisionOf+ ?y } 我们如何过滤查询,以便用等于另一个结果中的?y值的?x值删除所有结果。

如果一行中的?x值是另一行中的?y值,则表示在wasRevisionOf属性上,存在X是某个三元组的对象。您可以简单地过滤掉这些:

代码语言:javascript
复制
select ?x ?y  where {
  ?x <http://relationship.com/wasRevisionOf>+ ?y
  filter not exists {
    ?something <http://relationship.com/wasRevisionOf> ?x
  }
}

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37143473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档