首页 > 解决方案 > 如何获取维基百科页面可用的语言数量?(SPARQL 查询)

问题描述

我正在尝试列出 1980 年以来的意大利书籍列表,以及其原始 Wikipedia 页面已被翻译成的 Wikipedia 页面数量,例如,我想拥有:

Book, number
The name of the Rose, 5

其中 5 是玫瑰的名字在维基百科中被翻译成的语言数量,例如有一个英语维基页面、一个荷兰语页面、一个西班牙语页面、一个法语页面、一个希腊语页面。

这是到目前为止的查询:

SELECT ?item ?label 
WHERE
{
  VALUES ?type {wd:Q571 wd:Q7725634}  # book or literary work
  ?item wdt:P31 ?type .
  ?item wdt:P577 ?date FILTER (?date > "1980-01-01T00:00:00Z"^^xsd:dateTime) . #dal 1980
  ?item rdfs:label ?label filter (lang(?label) = "it")
  ?item wdt:P495 wd:Q38 .


}

我得到了书籍清单,但找不到合适的财产。

标签: sparqlwikipediawikipedia-apiwikidata

解决方案


你真的在你的例子中得到了玫瑰的名字吗?因为它的发布日期设置为1980(这是= 1980-01-01出于我们的目的),所以我不得不将您的查询更改为>=比较。

然后,使用评论中提到的COUNT()andGROUP BY可以得到你想要的。但是,如果您真的只需要站点链接的数量,那么有一个捷径可能会很有用。添加它是因为该数字通常用作衡量项目受欢迎程度的良好指标,并且使用预先计算的数字比获取所有链接、分组和计数要有效得多。

SELECT ?book ?bookLabel ?sitelinks ?date WHERE {
  VALUES ?type { wd:Q571 wd:Q47461344 wd:Q7725634 }
  ?book wdt:P31 ?type;
        wdt:P577 ?date;
        wdt:P495 wd:Q38;
        wikibase:sitelinks ?sitelinks.
  FILTER((?date >= "1980-01-01T00:00:00Z"^^xsd:dateTime) && (?date < "1981-01-01T00:00:00Z"^^xsd:dateTime))
  SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". }
}

询问

请注意,这些值可能与带有 group 和 count 的版本略有不同,因为此处还包括commons或等站点。wikiquote


推荐阅读