繁体   English   中英

在耶拿sparql中使用Distinct?

[英]Use of Distinct in jena sparql?

我正在尝试编写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重复值

我怎样才能仅对?x应用ditinct?

SPARQL中的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随机选择一个值。

如果您实际上想做的是拔出不同的主题,然后找到与该主题相关的消息的详细信息,那么您要么必须使用现有查询并在代码中手动进行分组,要么需要进行两个单独的查询-一个用于获取不同的主题,第二个用于每个不同的主题以获取与之关联的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM