如何使Wikidata声明的外部标识符值成为跳转至外部页面的超链接
解决Wikidata外部标识符声明跳转问题
你的问题出在错误使用了wbcreateclaim API的参数——这个接口根本没有url参数,所以你添加的跳转链接不会生效。Wikidata中外部标识符的跳转是通过属性的预设规则实现的,具体处理方式分两种情况:
情况1:使用Wikidata已有的外部标识符属性
像P214(VIAF ID)、P356(DOI)这类官方维护的外部标识符属性,已经内置了格式化URI模板。你只需要传入正确的标识符文本值,Wikidata会自动根据模板生成跳转链接,无需额外配置。
情况2:使用自定义的外部标识符属性
如果是你自己创建的属性,需要先给该属性添加**P1630(格式化URI)**声明,模板格式类似https://your-institution.com/id/$1,其中$1会被你传入的标识符值替换。完成这一步后,创建声明时同样只需要传入标识符文本值即可。
修正后的代码
import json import requests def writeStatement(apiUrl, editToken, subjectQNumber, propertyPNumber, objectIdentifier): parameters = { 'action': 'wbcreateclaim', 'format': 'json', 'entity': subjectQNumber, 'snaktype': 'value', 'bot': '1', 'token': editToken, 'property': propertyPNumber, # 用json.dumps正确生成JSON格式的字符串值,避免手动转义出错 'value': json.dumps(objectIdentifier) } r = requests.post(apiUrl, data=parameters) data = r.json() return data
代码说明
- 移除了无效的
url参数,这个参数对wbcreateclaim接口不起作用 - 使用
json.dumps()生成标准的JSON格式值,避免手动拼接字符串时的转义错误(比如标识符里有引号的情况) - 确保你使用的属性是外部标识符类型(属性的P31为Q18616576),并且已配置好对应的格式化URI模板
内容的提问来源于stack exchange,提问作者James_00
相关产品推荐
相关产品推荐

