我有两个问题:
问题1:
SELECT DISTINCT ?o COUNT(?o)
WHERE
{ ?s1 ?somep1 <predicate_one-uri>. ?s1 ?p ?o}问题2:
SELECT DISTINCT ?o COUNT(?o)
WHERE
{?s2 ?somep2 <predicate_two-uri>.?s2 ?p ?o.}我需要将这两个集合合并,根据我的理解,下面的查询应该给出我想要的集合:
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函数):
SELECT DISTINCT ?o
WHERE
{
{ ?s1 ?somep1 <predicate_one-uri>.?s1 ?p ?o}
UNION {?s2 ?somep2 <predicate_two-uri>.?s2 ?p ?o.}
}我得到了适当的结果集。
发布于 2010-06-07 04:34:36
我认为如果您删除DISTINCT,并将GROUP BY ?o添加到查询的末尾,它将会起作用。
DISTINCT实际上只是用于删除重复项。它不是用来分组和计数的。
发布于 2010-05-05 21:04:49
这里不完全确定,但有一个理论可能是完全错误的
您的查询让我有点困惑,因为它似乎暗示了一些分组,因为至少在理论上,如果没有显式的GROUP BY,SPARQL引擎不应该让您在同一查询中同时选择变量和该变量的聚合。因此,结果可能取决于您使用的SPARQL引擎/triplestore?
如果是隐式分组,那么您可能不会获得预期的结果,因为分组会将联合两端的结果分组在一起。例如,假设查询1给出10个结果,查询2给出5个结果,那么您可以从联合中获得的最大结果数是15,但可能会更少,因为分组可能会将联合的两个方面的结果组合在一起。为了避免这种情况,您应该在查询的两端使用完全不同的变量名,例如:
SELECT * WHERE { {?s ?p ?o} UNION {?x ?y ?z}}这将为您提供一个结果表,该表具有如下模式:
?s | ?p | ?o | ?x | ?y | ?z
-----------------------------
a | b | c | | |
| | | a | b | c如果您能提供有关执行查询的环境的更多详细信息,例如Triplestore、SPARQL引擎、API/库等,那么我/其他人可能会提供更好的答案
https://stackoverflow.com/questions/2769041
复制相似问题