persNamer 1.2: یک شمارهٔ VIAF، نُه فایل مستندات

persNamer اولش چیزی بیش از یک ابزارک دمدستی نبود: شمارهٔ VIAF میدادید، یک مدخل <person> به قالب TEI میگرفتید و برچسب <persName> را هم که برای نشانهگذاری متن لازم داشتید. همین و بس؛ مدخلی هم که میساخت لاغر بود: یک نام، دو تاریخ، یک شناسه. نسخهٔ 1.2 که امروز منتشر شد همچنان همان یک کار را میکند، منتها این بار مدخلی میسازد که نگه داشتنش بیرزد.
مدخل شخص حالا چه دارد
از نام شروع کنیم. در خوشهٔ VIAF هر کتابخانهٔ مشارک نامی از خودش دارد، و persNamer قدیم بیهیچ حسابی اولین برچسبی را برمیداشت که جلوی دستش بود. ولتر (Voltaire) را میخواستید، « فولتير، » تحویل میگرفتید — یعنی صورت عربی نام بهجای لاتین، با ویرگولی که دنبالش جا مانده بود — و از آن طرف یک xml:id خالی هم روی دستتان میماند. حالا ابزار صورتهای نام را در کل خوشه میشمارد و آن را نگه میدارد که رکوردهای مبدأ بر سرش همداستاناند؛ باقی صورتها، از پربسامد به کمبسامد، به شکل <persName type="variant"> پشت سرش میآیند. تاریخها بهنجار میشوند (1572-08-00 میشود 1572-08) و دو بار ثبت میشوند: یک بار بهصورت متن، یک بار در صفت @when، که هر پردازشی که از تاریخ سر دربیاورد در عمل همین دومی را میخواند. جنسیت و توصیفها هم، هر جا VIAF در اختیار بگذارد، میآیند.
و اما آنچه بیش از همه چشمبهراهش بودم: هر شناسهای که VIAF، چه از راه schema:sameAs و چه از راه شناسههای منابع خودش، به شخص گره زده باشد، حالا در یک <idno> جداگانه مینشیند — BnF، GND، کتابخانهٔ کنگره، SUDOC، Wikidata، ISNI، BNE، LIBRIS، NDL. یک شماره میدهید، نُه فهرست میگیرید. برای فهرست اشخاص (personography) فرق میان سیاههای از نامها و گرهی در تار دادههای مستند درست همینجاست.
<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 را یکجا میگیرد، میان هر دو درخواست به احترام VIAF نفسی تازه میکند، هرچه را گرفته در حافظهٔ نهان نگه میدارد تا دوباره سراغش نرود، و اگر --merge بدهید مدخلهای تازه را یکراست توی <listPerson> فایل TEI موجودتان مینشاند. کسانی که از قبل در فایل هستند از روی شمارهٔ VIAF شناخته میشوند و xml:id قبلیشان سر جایش میماند؛ شناسههای تازه با محتوای فایل سنجیده میشوند و اگر با شناسهای موجود دربیفتند پسوندی (-2، -3) به دمشان میچسبد؛ در آخر تورفتگی کل فایل از نو مرتب میشود — البته نه پیش از آنکه یک نسخهٔ .bak کنار گذاشته شده باشد.
persnamer --merge edition.xml 314802260 36925746
یک تغییر هم هست که بد نیست بدانید: حرف اضافهٔ پیش از نام خانوادگی (de) دیگر بهطور پیشفرض وارد شناسه نمیشود؛ شارل دو تلینی (Charles de Téligny) حالا pers-teligny-c است، نه pers-deteligny-c سابق. اگر پروژهتان به صورت قدیم خو گرفته، --keep-particle همان را برمیگرداند؛ و اگر اصلاً دلتان نمیخواهد شناسه به نام تکیه کند، --id-format viaf برایتان pers-viaf-314802260 میسازد.
خانهتکانی
اسکریپت دیگر اسکریپت نیست؛ بستهای است تمامعیار با فرمان persnamer، که با یک خط از راه uv tool install یا pipx نصب میشود، و اگر فقط میخواهید امتحانش کنید، uvx بینصب یک بار اجرایش میکند و میرود. بیستوشش آزمون هوایش را دارند که همه روی پاسخهای ضبطشدهٔ VIAF اجرا میشوند — پس مجموعهٔ آزمون به شبکه هیچ نیازی ندارد؛ CI همینها را روی Python از 3.9 تا 3.13 تکرار میکند و خروجی هم در برابر TEI P5 اعتبارسنجی میشود. مجوز مثل قبل Apache 2.0 است.
آنچه هنوز از دستش برنمیآید این است که بگوید فلانی کجا زاده شده یا نانش را از کجا درمیآورده: RDF خوشههای VIAF نه جایی دارد و نه پیشهای. رکوردهای BnF و GND که به آن پیوند خوردهاند اما هر دو را دارند — و شمارهشان حالا دست شماست.
کد و مستندات در GitHub.
