如何显示不同的一对学生?

How to display distinct pair of students?

如果我的图表中有这样的关系,我如何显示不同的学生对:

:ST1 :read :BOOK1,:BOOK2,:BOOK3.
:ST2 :read :BOOK1,:BOOK2.
:ST3 :read :BOOK2.

在我的 select 中,我有这样的东西:

SELECT DISTINCT ?x ?book ?y
{
   ?x :read ?book.
   ?book ^:read ?y.
   FILTER(?x != ?y).
}

但是对于我的图表数据,输出将是:

 :ST1 :BOOK1 :ST2
 :ST2 :BOOK1 :ST1 ... etc

我只想显示 :ST1 :BOOK1 :ST2 关系。

你的问题是你把 DISTINCT 放在它不能应用于一个变量的地方,只有当你显示多个时,你可以这样做:

SELECT (SAMPLE(?x) as ?xx) ?book (SAMPLE(?y) as ?yy)
 {
   ?y :read ?book.
   ?book ^:read ?x.
   FILTER(?x != ?y).
}
GROUP BY ?book

输出:

:ST1 :BOOK1 :ST2