已知:hasFriend为对称关系,如何用SPARQL SELECT返回完整关系结果?
用SPARQL SELECT返回完整的对称好友关系
已知:hasFriend是对称关系,但数据集里没完全按规则编码,要实现类似Construct语句的效果,用SELECT返回所有完整的好友关系,可以通过以下方式:
基础方案:返回所有正向+反向关系
直接用UNION合并原关系和反向关系,再用DISTINCT去重(避免数据中已存在双向关系时重复输出):
SELECT DISTINCT ?person ?friend WHERE { { ?person :hasFriend ?friend } UNION { ?friend :hasFriend ?person } }
可选优化:每对好友仅返回一次
如果希望每对好友只以固定顺序出现一次(比如避免同时输出(A,B)和(B,A)),可以添加过滤条件让两个变量按字典序排序:
SELECT DISTINCT ?person ?friend WHERE { { ?person :hasFriend ?friend } UNION { ?friend :hasFriend ?person } FILTER (?person < ?friend) }
如果不需要去重,去掉DISTINCT即可,这样返回的结果会和Construct生成的三元组完全对应,包含所有正向和反向的好友关系条目。
内容的提问来源于stack exchange,提问作者safex
相关产品推荐
相关产品推荐

