persNamer 1.2:VIAF番号ひとつで、典拠ファイル九つ

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-deteligny-cではなくpers-teligny-cになります。旧来の形で運用が固まっているプロジェクトには--keep-particleがあり、これで元に戻ります。そもそも名前に頼りたくないという方には、--id-format viafでpers-viaf-314802260という形もご用意しました。
こまごました整備
スクリプトはパッケージとして生まれ変わり、persnamerコマンドが付きました。uv tool installかpipxなら一行で入りますし、入れずに一度だけ試すならuvxで済みます。テストは26本、記録済みのVIAF応答に対して走るので、ネットワークは要りません。CIではPython 3.9から3.13までを順に回し、出力はTEI P5に照らして検証しています。ライセンスは変わらずApache 2.0です。
相変わらずできないのは、その人がどこで生まれ、何を生業にしていたかを答えることです。VIAFのクラスターRDFには、場所も職業も載っていません。載っているのは、そこからリンクされたBnFやGNDのレコードのほう。そしてその番号は、もうお手元にあります。
コードとドキュメントはGitHubでご覧いただけます。
