Sparql将列表合并为一行';s结果

Sparql将列表合并为一行';s结果,sparql,Sparql,我已经查看了组\u CONCAT,但它没有达到我想要的效果 假设我有以下数据: _:autos325 rdf:first "john"; rdf:rest _:autos326. _:autos326 rdf:first "d"; rdf:rest _:autos327. _:autos327 rdf:first "rockefeller"; rdf:rest rdf:nil. <http://foo.com/ABC>

我已经查看了
组\u CONCAT
,但它没有达到我想要的效果

假设我有以下数据:

_:autos325 rdf:first "john";
           rdf:rest _:autos326.
_:autos326 rdf:first "d";
           rdf:rest _:autos327.
_:autos327 rdf:first "rockefeller";
           rdf:rest rdf:nil.
<http://foo.com/ABC> <http://prop/name> _:autos325

如何连接
?foo
结果,以便将整个名称填充到一行中,而不是分散在三个结果行中

我用一个简单的案例解决了这个问题,但没有用复杂的查询,因为我必须开始在
分组中包含其他变量。正确的方法是对受试者进行分组,然后使用分组

是的,我是SPARQL的新手:-)

选择s(组名称(不同的分隔符=“,”)作为名称)
在哪里。
?o rdf:rest*/rdf:first?foo.}
分组

问题是您在
?foo
上分组。将其更改为:

GROUP BY ?s
它应该会起作用


聚合运算符(如
计数
组_CONCAT
等)始终对解决方案组进行操作。组由
GROUP by
子句定义(如果不存在,则整个解决方案计为一个大组)。因此,让
按?s
分组基本上是说:“将
?s
的每个值的名称连接起来”。但是,如果您还将
?foo
添加到
组BY
,您实际上是在说:“将
?s
?foo
的每个值组合的名称连接起来”。当然,这会再次为
?foo
的每个值生成一个单独的行,实际上没有任何内容被连接起来

“它做不到我想要的”为什么不?展示你的尝试。我在问题的主体部分陈述了我的尝试。我尝试了GROUP_CONCAT、GROUP BY等,但结果仍然在多行上。您是否有解决方案或只是评论我应该展示我尝试的内容请包括您尝试GROUP_CONCAT的SPARQL查询。我的观点是,
GROUP_CONCAT
通常应该是这个问题的解决方案,因此如果这不符合您的要求,您可能会遇到罕见的情况,或者在尝试时出错。但我们不知道你做了什么,因为你没有展示。好吧,我用我的尝试更新了它。谢谢,这是可行的,但是如果我在查询中有其他三元组并尝试选择它们,我会得到一个错误,说选择值不在GROUPBY中。如果我按?s分组,如何在使用group_CONCAT的同时选择其他变量?这不是你问题的一部分,实际上是另一种情况。我建议您发布一个后续问题,以更详细地概述该案例。
select ?s  (group_concat(distinct ?foo;separator=", ") as ?names)
WHERE { ?s <http://prop/name> ?o .
                        ?o rdf:rest*/rdf:first ?foo . }
GROUP BY ?s ?foo
SELECT ?s  (GROUP_CONCAT(DISTINCT ?foo;separator=", ") AS ?names)
WHERE { ?s <http://prop/name> ?o .
        ?o rdf:rest*/rdf:first ?foo . }
GROUP BY ?s 
GROUP BY ?s