Sparql “恢复”;“原件”;秩序

Sparql “恢复”;“原件”;秩序,sparql,wikidata,Sparql,Wikidata,我正在尝试从wikidata恢复电影的演员名单。 我对Dr.No.的sparql查询如下: SELECT ?actor ?actorLabel WHERE { ?movie wdt:P161 ?actor . SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } FILTER(?movie = wd:Q102754) } LIMIT 1000 我可以尝试一下,但结果不是我想要的顺序。它给出了“肖恩·康纳

我正在尝试从wikidata恢复电影的演员名单。 我对Dr.No.的sparql查询如下:

SELECT ?actor ?actorLabel WHERE {
  ?movie wdt:P161 ?actor .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  FILTER(?movie = wd:Q102754)
}
LIMIT 1000
我可以尝试一下,但结果不是我想要的顺序。它给出了“肖恩·康纳利”、“泽纳·马歇尔”、“乌苏拉·安德鲁斯”


数据库中的数据按要求的顺序排列,正如您可以从演员名单中看到的那样(肖恩·康纳利、乌苏拉·安德鲁斯、约瑟夫·怀斯曼)。通常情况下,cast列表是按计费顺序给出的,我希望恢复该列表。

SPARQL使用
order by
提供结果排序,请参阅

示例中的顺序是基于语句引用的数量。以下是一个非优化版本,可满足您的要求:

SELECT?actor?actor标签在哪里{
?电影p:P161?声明。
?声明ps:P161?参与者。
可选{语句prov:wasDerivedFrom?ref.}
服务wikibase:标签{bd:serviceParam wikibase:语言“en”。}
过滤器(?电影=wd:Q102754)
}
组员?电影?演员?演员?演员标签
按DESC(count(?ref))ASC(?actorLabel)排序
限制1000

SPARQL通过使用
orderby
对结果进行排序,请参见

示例中的顺序是基于语句引用的数量。以下是一个非优化版本,可满足您的要求:

SELECT?actor?actor标签在哪里{
?电影p:P161?声明。
?声明ps:P161?参与者。
可选{语句prov:wasDerivedFrom?ref.}
服务wikibase:标签{bd:serviceParam wikibase:语言“en”。}
过滤器(?电影=wd:Q102754)
}
组员?电影?演员?演员?演员标签
按DESC(count(?ref))ASC(?actorLabel)排序
限制1000

是的,这可以让我按字母顺序排列参与者-但我希望他们按重要性排序-这大致就是他们在原始数据中出现的顺序。您如何知道结果是按“重要性”排序的?这是一种什么样的衡量标准?诚然,“重要性”有点模糊——但在维基百科中,演员的出场顺序(或多或少)是按照他们在电影中的出场顺序来确定的。一般来说,电影中的明星排在第一位,联袂主演排在第二位,依此类推到“车站里匆匆忙忙的人”。我猜这是演员和经纪人非常关心的事情。它在应用中很重要。按引用计数排序很好,在很多情况下是一个很好的代理。但这不是我想要的。谢谢您的建议。@SQLHacks在您在问题中链接到的页面上,它们似乎是按引用排序的。如果那不是你想要的,那你想要什么?通常,RDF三元组不会对事物进行排序。看到三个三元组“x hasActor A.x hasActor B.x hasActor C”与“x hasActor B.x hasActor C.x hasActor A”相同。除非wikidata有一些额外的信息,否则您必须定义自己的顺序。是的,这可以让我按字母顺序排列参与者-但我希望他们按重要性排序-这大致就是他们在原始数据中出现的顺序。您如何知道结果是按“重要性”排序的?这是一种什么样的衡量标准?诚然,“重要性”有点模糊——但在维基百科中,演员的出场顺序(或多或少)是按照他们在电影中的出场顺序来确定的。一般来说,电影中的明星排在第一位,联袂主演排在第二位,依此类推到“车站里匆匆忙忙的人”。我猜这是演员和经纪人非常关心的事情。它在应用中很重要。按引用计数排序很好,在很多情况下是一个很好的代理。但这不是我想要的。谢谢您的建议。@SQLHacks在您在问题中链接到的页面上,它们似乎是按引用排序的。如果那不是你想要的,那你想要什么?通常,RDF三元组不会对事物进行排序。看到三个三元组“x hasActor A.x hasActor B.x hasActor C”与“x hasActor B.x hasActor C.x hasActor A”相同。除非wikidata有一些额外的信息,否则您必须定义自己的顺序。