使用维基数据 SPARQL 从原始 URL 获取重定向的维基百科 URL

问题描述 投票:0回答:1

我有一个维基百科 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 的维基数据条目相关联。有什么办法可以解决这个问题吗?

sparql wikipedia wikipedia-api wikidata
1个回答
0
投票

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
参数接受多个标题!

例如,查询:https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects&titles=Peninsular_War|Napoleon_I_of_France同时返回

Q152499
Q517

这可以大大减少查询的数量,大约是

ceil(N/2048)
,其中
N
是标题的字符总数,
2048
是单个 URL 中允许的标准最大字符数。

© www.soinside.com 2019 - 2024. All rights reserved.