SPARQL如何查询相同主体记录并将对应值合并为逗号分隔格式
SPARQL 同主体多客体合并查询调整方案
你可以使用GROUP BY分组搭配GROUP_CONCAT聚合函数实现需求,调整后的查询语句如下:
SELECT ?person (GROUP_CONCAT(?friend; separator=", ") AS ?friendsList) WHERE { ?person <http://www.example.com/hasFriend> ?friend. } GROUP BY ?person
语句说明
- 用
GROUP BY ?person将同一个主体的所有查询结果归入同一组 GROUP_CONCAT函数会把同组内的所有?friend值拼接,separator参数指定用逗号加空格作为分隔符,最终拼接结果别名设置为?friendsList- 如果需要过滤掉重复的朋友值,可修改为
GROUP_CONCAT(DISTINCT ?friend; separator=", ")
如果需要输出和示例完全一致的整行拼接文本,可以进一步调整查询:
SELECT (CONCAT(?personName, " hasFriend ", GROUP_CONCAT(?friendName; separator=", ")) AS ?result) WHERE { ?person <http://www.example.com/hasFriend> ?friend. # 如果你的person、friend存储为URI,需要获取名称标签,可根据实际数据的名称谓词调整下面两行 # ?person <http://www.example.com/name> ?personName. # ?friend <http://www.example.com/name> ?friendName. # 如果person、friend直接存储为Alex、A这类字面量,直接绑定即可 BIND(?person AS ?personName) BIND(?friend AS ?friendName) } GROUP BY ?person ?personName
GROUP_CONCAT是SPARQL 1.1的标准聚合函数,Apache Jena、Virtuoso、GraphDB等主流SPARQL引擎都原生支持。
内容的提问来源于stack exchange,提问作者Ian Kurtis
相关产品推荐
相关产品推荐

