首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL UNION -结果集不完整

SPARQL UNION -结果集不完整
EN

Stack Overflow用户
提问于 2010-05-05 05:16:38
回答 2查看 1.3K关注 0票数 1

我有两个问题:

问题1:

代码语言:javascript
复制
SELECT DISTINCT ?o COUNT(?o)  
WHERE 
{ ?s1 ?somep1 <predicate_one-uri>. ?s1 ?p ?o}

问题2:

代码语言:javascript
复制
SELECT DISTINCT ?o COUNT(?o)  
WHERE 
{?s2 ?somep2 <predicate_two-uri>.?s2 ?p ?o.}

我需要将这两个集合合并,根据我的理解,下面的查询应该给出我想要的集合:

代码语言:javascript
复制
SELECT DISTINCT ?o COUNT(?o)  
WHERE 
{
 { ?s1 ?somep1 <predicate_one-uri>.?s1 ?p1 ?o}
  UNION 
 {?s2 ?somep2 <predicate_two-uri>.?s2 ?p2 ?o.}
}

问题是查询1的某些结果不在联合集中,查询2的某些结果也不在联合集中。联合不能正常工作,因为它没有合并查询1和查询2的所有结果。请建议sparql查询的正确结构以获得所需的结果集。

但是,如果我执行以下查询(只需删除COUNT函数):

代码语言:javascript
复制
SELECT DISTINCT ?o
WHERE 
{
{ ?s1 ?somep1 <predicate_one-uri>.?s1 ?p ?o}
 UNION {?s2 ?somep2 <predicate_two-uri>.?s2 ?p ?o.}
}

我得到了适当的结果集。

EN

回答 2

Stack Overflow用户

发布于 2010-06-07 04:34:36

我认为如果您删除DISTINCT,并将GROUP BY ?o添加到查询的末尾,它将会起作用。

DISTINCT实际上只是用于删除重复项。它不是用来分组和计数的。

票数 2
EN

Stack Overflow用户

发布于 2010-05-05 21:04:49

这里不完全确定,但有一个理论可能是完全错误的

您的查询让我有点困惑,因为它似乎暗示了一些分组,因为至少在理论上,如果没有显式的GROUP BY,SPARQL引擎不应该让您在同一查询中同时选择变量和该变量的聚合。因此,结果可能取决于您使用的SPARQL引擎/triplestore?

如果是隐式分组,那么您可能不会获得预期的结果,因为分组会将联合两端的结果分组在一起。例如,假设查询1给出10个结果,查询2给出5个结果,那么您可以从联合中获得的最大结果数是15,但可能会更少,因为分组可能会将联合的两个方面的结果组合在一起。为了避免这种情况,您应该在查询的两端使用完全不同的变量名,例如:

代码语言:javascript
复制
SELECT * WHERE { {?s ?p ?o} UNION {?x ?y ?z}}

这将为您提供一个结果表,该表具有如下模式:

代码语言:javascript
复制
 ?s | ?p | ?o | ?x | ?y | ?z
-----------------------------
  a |  b |  c |    |    |
    |    |    |  a |  b |  c

如果您能提供有关执行查询的环境的更多详细信息,例如Triplestore、SPARQL引擎、API/库等,那么我/其他人可能会提供更好的答案

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

https://stackoverflow.com/questions/2769041

复制
相关文章

相似问题

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