如何在sparql中组合两列?

如何在sparql中组合两列?,sparql,jena,protege,gruff,Sparql,Jena,Protege,Gruff,嗨,我有这样的结果输出: ?name ?o ?x ------------ ABCD xyz ghh PQR xyz hij ?name ?papers -------------- ABCD (xyz, ghh, hij) 如何将?o和?x列合并到一个名为papers的列中? 我需要输出如下: ?name ?o ?x ------------ ABCD xyz ghh PQR xyz hij ?name ?papers -------------- ABCD (xyz,

嗨,我有这样的结果输出:

?name ?o ?x
------------
ABCD  xyz ghh
PQR   xyz hij
?name ?papers
--------------
ABCD  (xyz, ghh, hij)
如何将?o和?x列合并到一个名为papers的列中? 我需要输出如下:

?name ?o ?x
------------
ABCD  xyz ghh
PQR   xyz hij
?name ?papers
--------------
ABCD  (xyz, ghh, hij)
请注意,PQR和ABCD仅替换为ABCD。ABCD和PQR具有称为mbox_sha1sum的相同属性

以上两个都是例子。我需要他们像这样:

这是当前sparql查询:

PREFIX xmlns: <http://xmlns.com/foaf/0.1/> 
PREFIX ontoware: <http://swrc.ontoware.org/ontology#>
SELECT DISTINCT ?name ?x ?o
WHERE { 
 ?s xmlns:mbox_sha1sum ?hash.
 ?s xmlns:made ?o.
 ?s xmlns:name ?name.
 ?o ontoware:year "2009".
 ?r xmlns:mbox_sha1sum ?hash.
 ?r xmlns:made ?x.
 ?x ontoware:year "2008".
}
前缀xmlns:
前缀ontoware:
选择不同的?名称?x?o
何处{
s xmlns:mbox_sha1sum?散列。
?s xmlns:制造?o。
?s xmlns:name?name。
o ontoware:2009年。
r xmlns:mbox_sha1sum?散列。
?r xmlns:made?x。
?x ontoware:2008年。
}
我需要基本上将?o和?x合并到一个名为?papers的专栏中
如果有帮助的话,s和r有不同的IRI

您可以通过组合分组和聚合来实现这一点,如下所示:

PREFIX xmlns: <http://xmlns.com/foaf/0.1/> 
PREFIX ontoware: <http://swrc.ontoware.org/ontology#>
SELECT (SAMPLE(?name) AS ?GroupName) (GROUP_CONCAT(CONCAT(?x, ", ", ?o) ; SEPARATOR = ", ") AS ?Papers)
WHERE 
{ 
  ?s xmlns:mbox_sha1sum ?hash.
  ?s xmlns:made ?o.
  ?s xmlns:name ?name.
  ?o ontoware:year "2009".
  ?r xmlns:mbox_sha1sum ?hash.
  ?r xmlns:made ?x.
  ?x ontoware:year "2008".
} GROUP BY ?hash

消除重复的纸质条目是可能的,但可能会使您的查询更加复杂。通过在Java中对
?Papers
值进行后处理,可以更容易地消除重复项。

链接重复项的可能重复项正好回答了这个问题。它的大部分答案描述了如何进行连接。最后一段讨论了使用
group\u by(distinct?var;…)
删除重复结果的问题。重复项很容易消除:
group\u concat(distinct?x;…)
。这多少产生了我想要的答案。谢谢@RobV。像你说的那样,消除重复项是很困难的。在组_concat中使用distinct会产生错误。我将等待,看看是否有人给我一个答案,并在纸上列出不同的清单,或将此标记为答案。感谢againg=)@PrasanaVenkatRamesh你能澄清一下你遇到了什么样的错误吗?在的答案显示了
group_by(distinct…
的工作原理…@PrasanaVenkatRamesh在重新阅读您的问题时,我想我可能第一次误读了一些内容…