persNamer 1.2:一个VIAF编号,九份规范档

2026年9月7日·
Clément Godbarge
Clément Godbarge
· 3 分钟阅读时长
post 数字人文

persNamer起初不过是个小方便:喂它一个VIAF编号,它吐出一条TEI的<person>条目,外加一个<persName>标签,拿去标注文本便是。它只会这一件事,而且做出来的条目实在单薄——一个名字、两个日期、一个标识符,仅此而已。今天发布的1.2版,会的仍是这一件事,只是从此做出的条目值得留着了。

一条人物条目如今有些什么

先从姓名说起。VIAF的一个簇里,每家参与图书馆各留一种写法;旧版persNamer只管拿碰到的第一个标签。问它伏尔泰,答的是“فولتير،”——阿拉伯文,末尾的逗号原样保留,xml:id还是空的。1.2版会把整个簇里的写法逐一清点,留下各源记录公认的那一种;其余的作为<persName type="variant">列在后面,常见者居前。日期先行规范化(1572-08-00写作1572-08),再写两遍:一遍是正文,一遍是@when属性——凡是会处理日期的程序,真正读的都是后者。性别与描述,VIAF给了才有。

我最盼着的,是这一处:凡VIAF经schema:sameAs及其自身来源ID链接到的标识符,一律各写一条<idno>——BnF、GND、美国国会图书馆、SUDOC、Wikidata、ISNI、BNE、LIBRIS、NDL。一个编号进,九份目录出。于人物志而言,这便是一纸名单与规范数据之网中一个节点的分别。

<person xml:id="pers-teligny-c">
  <persName>Charles de Téligny</persName>
  <birth when="1535">1535</birth>
  <death when="1572-08-24">1572-08-24</death>
  <sex value="M">M</sex>
  <idno type="VIAF">314802260</idno>
  <idno type="BNF">16133360</idno>
  <idno type="Wikidata">Q1868249</idno>
  <idno type="ISNI">0000000071126808</idno>
</person>

从片段到人物志

只有一个人的时候,把XML打印到终端就够了;可一部校勘版动辄几百人。于是persNamer如今一次可接多个VIAF编号,两次请求之间礼貌地歇一歇,抓回来的内容存入缓存;加上--merge,新条目便直接插进已有TEI文件的<listPerson>。文件里本来就有的记录,按VIAF编号认出,xml:id照旧沿用;新ID先与文件核对,撞上了就加后缀(-2-3);最后整份文件重新缩进——动手之前,先留一份.bak副本。

persnamer --merge edition.xml 314802260 36925746

有一处改动请您留意:姓氏前的介词,默认不再计入ID,于是夏尔·德·泰利尼是pers-teligny-c,而非pers-deteligny-c。项目若已沿用旧格式,--keep-particle可以恢复;若干脆不想依赖姓名,--id-format viaf会给出pers-viaf-314802260

杂务

脚本已经打包成软件包,附带persnamer命令:uv tool installpipx一行装好,或用uvx免安装跑一回。二十六个测试跑在录制好的VIAF响应上,因此无需联网;CI在Python 3.9至3.13上逐版跑过,输出则按TEI P5校验。许可证照旧,Apache 2.0。

它依旧答不上来的,是某人生于何地、以何为业:VIAF的簇RDF既无地点,也无职业。与之链接的BnF与GND记录里倒是有——而它们的编号,如今已在您手中。

代码与文档见GitHub

Clément Godbarge
Authors
数字人文讲师
Clément Godbarge(克莱芒·戈德巴尔热)是圣安德鲁斯大学数字人文讲师。他的研究围绕近代早期欧洲的科学与治国之术展开。在即将出版的新书中,他考察了十六世纪供职于法国和意大利宫廷的医生如何将自己塑造成一种新型的政治专家。他的研究曾获安德鲁·W·梅隆基金会、富布赖特委员会、美国文艺复兴学会和哈佛大学的资助。