我有一个维基百科 URL 的列表,例如
"https://en.wikipedia.org/wiki/Peninsular_War"
"https://en.wikipedia.org/wiki/Napoleon_I_of_France"
等
有些直接重定向到其他页面,例如
https://en.wikipedia.org/wiki/Napoleon_I_of_France
直接重定向到https://en.wikipedia.org/wiki/Napoleon
我想对维基数据使用以下SPARQL查询来获取相应的维基数据实体:
prefix schema: <http://schema.org/>
SELECT ?url ?item WHERE {
VALUES ?url {
<https://en.wikipedia.org/wiki/Peninsular_War>
<https://en.wikipedia.org/wiki/Napoleon_I_of_France>}
?url schema:about ?item.
}
但是,由于 Napoleon URL 的重定向,此查询无法将 URL 与 Napoleons 的维基数据条目相关联。有什么办法可以解决这个问题吗?
Wikidata 不处理维基百科的重定向(特殊情况除外),所以我认为您必须通过 API 预处理您的 URL 来解决可能的重定向。
在您的示例中,您可以使用以下查询:https://en.wikipedia.org/w/api.php?action=query&titles=Napoleon_I_of_France&redirects
这给了你绑定
{
"from": "Napoleon I of France",
"to": "Napoleon"
}
但是,在这种情况下,我会直接使用 API 而不是 SPARQL 来检索维基数据项的 ID。
例如查询: https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects&titles=Napoleon_I_of_France 返回所需的 ID
Q517
.
注意
titles
参数接受多个标题!
Q152499
和Q517
。
这可以大大减少查询的数量,大约是
ceil(N/2048)
,其中 N
是标题的字符总数,2048
是单个 URL 中允许的标准最大字符数。