SPARQL-查找具有最相似属性的对象

SPARQL-查找具有最相似属性的对象,sparql,rdf,semantic-web,linked-data,Sparql,Rdf,Semantic Web,Linked Data,假设有一个RDF数据库中的人,每个人都有许多三元组来定义此人的朋友(很多人都是'person'x:hasFriend'otherPerson')。我怎样才能找到拥有最相似朋友的人?我是SPARQL的新手,这似乎是一个非常复杂的查询 基本上,结果将是一个从具有最相似的朋友列表的人(到查询中指定的人)开始的人的列表,然后向下到具有最不相似的朋友列表的人的列表 假设我在这个查询中搜索person1,结果如下: person2-300个相同的朋友 person30-245个相同的朋友 person18-

假设有一个RDF数据库中的人,每个人都有许多三元组来定义此人的朋友(很多人都是
'person'x:hasFriend'otherPerson'
)。我怎样才能找到拥有最相似朋友的人?我是SPARQL的新手,这似乎是一个非常复杂的查询

基本上,结果将是一个从具有最相似的朋友列表的人(到查询中指定的人)开始的人的列表,然后向下到具有最不相似的朋友列表的人的列表

假设我在这个查询中搜索
person1
,结果如下:

  • person2
    -300个相同的朋友
  • person30
    -245个相同的朋友
  • person18
    -16个相同的朋友

  • 等等。

    如果你采用我的答案中的方法(这可能被认为是重复的),你会得到如下结果:

    select?otherPerson(将(?friend)计算为?numFriends),其中{
    :人1:有朋友?朋友?--人1有朋友,朋友。
    其他人:有朋友?朋友?--其他人也是。
    }
    按其他人分组——每个其他人一个结果行,
    按desc(?numFriends)#排序——按普通朋友的数量排序。
    
    如果确实需要,可以使用反向属性路径来缩短查询模式:

    select?otherPerson(将(?friend)计算为?numFriends),其中{
    #--有些朋友是两个人的朋友:一个人和另一个人。
    ?friend^:hasFriend:person1,?其他人。
    }
    按其他人分组——每个其他人一个结果行,
    按desc(?numFriends)#排序——按普通朋友的数量排序。
    
    我认为的答案可能会提供一个答案。答案中的最后一个SPARQL查询“[使用]公共属性的数量作为相似性的度量。”Man非常感谢。是的,我试着在谷歌上寻找帮助,但我找不到任何东西,因为我不知道该问什么。@Fabis是的,有些东西并不总是超级难,但如果没有一个词来描述它们,它们可能真的很难搜索。