SPARQL查询需求:获取合作最频繁的男女演员对
查询合作最频繁的男女演员对(SPARQL)
需求背景
- 正在构建电影与演员的本体,包含
Movie和Actor类,每个电影实例关联对应的演员 Actor类有对象属性hasGender,用于标记演员性别为Male(男)或Female(女)- 需要编写SPARQL查询,返回男演员、女演员、该对演员合作的电影数量三个值,找出合作最频繁的男女演员对
已尝试的查询(不符合需求)
查询最频繁男演员的语句:
PREFIX ontology: <https://....../> SELECT ?Actor (count (?Movie) as ?MoviesCount) WHERE { ?Movie ontology:hasActor ?Actor. ?Actor ontology:hasGender ?Gender filter regex (str(?Gender), "Male") } Group by ?Actor Order by desc (?MoviesCount)
查询最频繁女演员的语句:
PREFIX ontology: <https://....../> SELECT ?Actor (count (?Movie) as ?MoviesCount) WHERE { ?Movie ontology:hasActor ?Actor. ?Actor ontology:hasGender ?Gender filter regex (str(?Gender), "Female") } Group by ?Actor Order by desc (?MoviesCount)
目标SPARQL查询语句
PREFIX ontology: <https://....../> SELECT ?maleActor ?femaleActor (COUNT(?movie) AS ?collaborationCount) WHERE { # 关联同一部电影中的男女演员 ?movie ontology:hasActor ?maleActor ; ontology:hasActor ?femaleActor . # 限定演员性别 ?maleActor ontology:hasGender ontology:Male . ?femaleActor ontology:hasGender ontology:Female . # 避免重复统计同一对演员(如A&B和B&A视为同一组合) FILTER(STR(?maleActor) < STR(?femaleActor)) } GROUP BY ?maleActor ?femaleActor ORDER BY DESC(?collaborationCount) # 可选:添加LIMIT N返回前N组最频繁的合作对,比如LIMIT 5
说明
- 通过同一
?movie节点关联男女演员,确保两人出现在同一部电影中 - 直接引用本体中的性别实例替代正则匹配,查询更精准高效
FILTER语句用于去重,避免同一对演员被重复统计- 按演员对分组统计合作电影数量,降序排序后最靠前的就是合作最频繁的组合
内容的提问来源于stack exchange,提问作者Haya Akkad
相关产品推荐
相关产品推荐

