Rdf 在jena sparql中使用Distinct?

Rdf 在jena sparql中使用Distinct?,rdf,sparql,jena,Rdf,Sparql,Jena,我试图编写一个SPARQL查询,但没有得到正确的结果。我想在?x上获得每种类型的一个答案,并且?x的值不重复 我原以为DISTINCT关键字可以做到这一点,但在我的数据上没有,以下是我的查询: SELECT DISTINCT ?x ?ax ?bx ?cx WHERE { ?a <SUB:> ?x . ?a <DATE:> ?ax . ?a <SENDERNAME:> ?bx . ?a <MESSAGEID:> ?cx.

我试图编写一个SPARQL查询,但没有得到正确的结果。我想在
?x
上获得每种类型的一个答案,并且
?x
的值不重复

我原以为
DISTINCT
关键字可以做到这一点,但在我的数据上没有,以下是我的查询:

SELECT DISTINCT ?x ?ax ?bx ?cx 
WHERE 
{ 
  ?a <SUB:> ?x .
  ?a <DATE:> ?ax .
  ?a <SENDERNAME:> ?bx .
  ?a <MESSAGEID:> ?cx. 
  ?a <REFERENCES:> ?z .
  FILTER regex(?z,'<','i')
} 
LIMIT 30 OFFSET 0
选择不同的?x?ax?bx?cx
哪里
{ 
a?x。
一把斧头。
?a?bx。
a?cx。
a?z。

SPARQL中的FILTER regex(?z,
DISTINCT
应用于行而不是变量,因此,如果行作为一个整体是不同的,则为一行中的一列或多列获取重复值是完全有效的

实现目标的典型方法是使用
GROUP BY
子句按特定变量对解决方案进行分组(在您的例子中是
?x
),然后使用
SAMPLE()
聚合来提取您感兴趣的其他列的样本值,例如

SELECT ?x (SAMPLE(?ax) AS ?date) (SAMPLE(?bx) AS ?sender) (SAMPLE(?cx) AS ?messageID)
WHERE 
{ 
  ?a <SUB:> ?x .
  ?a <DATE:> ?ax .
  ?a <SENDERNAME:> ?bx .
  ?a <MESSAGEID:> ?cx. 
  ?a <REFERENCES:> ?z .
  FILTER regex(?z,'<','i')
}
GROUP BY ?x
LIMIT 30 OFFSET 0
选择x(样本(?ax)作为日期)(样本(?bx)作为发送方)(样本(?cx)作为消息ID)
哪里
{ 
a?x。
一把斧头。
?a?bx。
a?cx。
a?z。
过滤正则表达式(?z,'