<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TEI |</title><link>https://clementgodbarge.com/ru/tag/tei/</link><atom:link href="https://clementgodbarge.com/ru/tag/tei/index.xml" rel="self" type="application/rss+xml"/><description>TEI</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ru-ru</language><lastBuildDate>Mon, 07 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>TEI</title><link>https://clementgodbarge.com/ru/tag/tei/</link></image><item><title>persNamer 1.2: один номер VIAF — девять авторитетных файлов</title><link>https://clementgodbarge.com/ru/post/persnamer-1-2/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/post/persnamer-1-2/</guid><description>&lt;p&gt;
задумывался как мелкое удобство: на входе
номер VIAF, на выходе запись &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; в TEI да тег &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, которым
размечают текст. Больше он ничего не умел, и запись выходила тощей — имя,
две даты, один идентификатор. Версия 1.2, вышедшая сегодня, ничему другому
так и не научилась; зато запись стала такой, что её стоит хранить.&lt;/p&gt;
&lt;h2 id="что-теперь-входит-в-запись-о-персоне"&gt;Что теперь входит в запись о персоне&lt;/h2&gt;
&lt;p&gt;Начнём с имени. В кластере VIAF каждая библиотека-участница держит имя
в своей форме, а старый persNamer брал первую, какая попадётся. Спросите
у него Вольтера — и получите «فولتير،»: по-арабски, с запятой на хвосте,
да ещё и с пустым &lt;code&gt;xml:id&lt;/code&gt; в придачу. Версия 1.2 пересчитывает формы по
всему кластеру и оставляет ту, на которой исходные записи сходятся;
остальные идут следом как &lt;code&gt;&amp;lt;persName type=&amp;quot;variant&amp;quot;&amp;gt;&lt;/code&gt;, по убыванию частоты.
Даты приводятся к норме (&lt;code&gt;1572-08-00&lt;/code&gt; становится &lt;code&gt;1572-08&lt;/code&gt;) и пишутся
дважды — текстом и в атрибуте &lt;code&gt;@when&lt;/code&gt;: именно атрибут и прочтёт любая
обработка, которая вообще понимает даты. Пол и описания добавляются, когда
VIAF их отдаёт.&lt;/p&gt;
&lt;p&gt;Но самое желанное для меня — другое: все идентификаторы, на которые VIAF
ссылается через &lt;code&gt;schema:sameAs&lt;/code&gt; и через собственные идентификаторы
источников, теперь выписаны, каждый своим &lt;code&gt;&amp;lt;idno&amp;gt;&lt;/code&gt; — BnF, GND, Библиотека
Конгресса, SUDOC, Wikidata, ISNI, BNE, LIBRIS, NDL. Один номер на входе —
девять каталогов на выходе. Для персонографии это и есть та грань, что
отделяет список имён от узла в сети авторитетных данных.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-teligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persName&amp;gt;&lt;/span&gt;Charles de Téligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;birth&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1535&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;death&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1572-08-24&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;sex&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;M&lt;span class="nt"&gt;&amp;lt;/sex&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;BNF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16133360&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Wikidata&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Q1868249&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ISNI&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0000000071126808&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="от-фрагментов-к-персонографии"&gt;От фрагментов к персонографии&lt;/h2&gt;
&lt;p&gt;Пока персона одна, можно и в терминал XML напечатать. Но в издании их
сотни. Поэтому persNamer теперь берёт сразу несколько номеров VIAF, между
запросами вежливо выдерживает паузу, загруженное складывает в кэш, а с ключом
&lt;code&gt;--merge&lt;/code&gt; сам вставляет новые записи в &lt;code&gt;&amp;lt;listPerson&amp;gt;&lt;/code&gt; готового файла TEI.
Тех, кто в файле уже есть, он узнаёт по номеру VIAF и оставляет им прежний
&lt;code&gt;xml:id&lt;/code&gt;; новые идентификаторы сверяет с файлом и при совпадении добавляет
суффикс (&lt;code&gt;-2&lt;/code&gt;, &lt;code&gt;-3&lt;/code&gt;); под конец заново расставляет отступы — предварительно
сохранив копию &lt;code&gt;.bak&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;persnamer --merge edition.xml &lt;span class="m"&gt;314802260&lt;/span&gt; &lt;span class="m"&gt;36925746&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Одно изменение нужно иметь в виду: частица перед фамилией по умолчанию
в идентификатор больше не входит, так что Шарль де Телиньи теперь
&lt;code&gt;pers-teligny-c&lt;/code&gt;, а не &lt;code&gt;pers-deteligny-c&lt;/code&gt;. Если в вашем проекте уже
прижилась старая форма, &lt;code&gt;--keep-particle&lt;/code&gt; её вернёт; а если не хочется
зависеть от имён вовсе, &lt;code&gt;--id-format viaf&lt;/code&gt; даст &lt;code&gt;pers-viaf-314802260&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="по-хозяйству"&gt;По хозяйству&lt;/h2&gt;
&lt;p&gt;Из скрипта вырос пакет с командой &lt;code&gt;persnamer&lt;/code&gt;: ставится одной строкой —
&lt;code&gt;uv tool install&lt;/code&gt; или &lt;code&gt;pipx&lt;/code&gt;, — а через &lt;code&gt;uvx&lt;/code&gt; можно один раз запустить
и вовсе без установки. Двадцать шесть тестов гоняют его на записанных
ответах VIAF, так что сеть им не нужна; CI прогоняет их на Python от 3.9
до 3.13, а вывод проверяется на соответствие TEI P5. Лицензия прежняя —
Apache 2.0.&lt;/p&gt;
&lt;p&gt;Чего он по-прежнему не скажет — где человек родился и чем зарабатывал на
жизнь: в кластерном RDF VIAF нет ни мест, ни занятий. Зато они есть
в связанных записях BnF и GND, а их номера у вас теперь на руках.&lt;/p&gt;
&lt;p&gt;Код и документация — на
.&lt;/p&gt;</description></item><item><title>tei-mcp v0.3: кодировать в TEI, не переписывая источник</title><link>https://clementgodbarge.com/ru/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;Когда я
, цель была одна: отучить
ИИ-ассистентов галлюцинировать разметку TEI. Заземление на схему решило часть
проблемы: имея прямой, инструментальный доступ к спецификации P5, модели больше
не нужно гадать, что означает элемент и какие атрибуты он принимает. Результат
проходит валидацию.&lt;/p&gt;
&lt;p&gt;Но у галлюцинации в кодировании TEI два лица, и схема ловит лишь одно. Валидация
по спецификации говорит, что &lt;em&gt;разметка&lt;/em&gt; корректна. О &lt;em&gt;тексте&lt;/em&gt;, который эта разметка
обёртывает, она не говорит ничего. А именно там — в самом тексте — живут самые
разрушительные галлюцинации. Сборка по закреплённым отрезкам (span-locked
composition), главная новинка v0.3, придумана специально, чтобы их не допускать.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Содержание&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#галлюцинация-которую-схема-поймать-не-может"&gt;Галлюцинация, которую схема поймать не может&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#сборка-по-закреплённым-отрезкам"&gt;Сборка по закреплённым отрезкам&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#что-это-такое--и-чем-это-не-является"&gt;Что это такое — и чем это не является&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#почему-это-важно-и-за-пределами-tei"&gt;Почему это важно и за пределами TEI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#как-обновиться"&gt;Как обновиться&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="галлюцинация-которую-схема-поймать-не-может"&gt;Галлюцинация, которую схема поймать не может&lt;/h2&gt;
&lt;p&gt;Попросите модель закодировать французское письмо XVI века — и нередко
получите документ TEI безупречного вида. Заголовок заполнен, теги &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;
расставлены правильно, &lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; оформлен как положено. Прогоните его через
&lt;code&gt;validate_document&lt;/code&gt; — он пройдёт.&lt;/p&gt;
&lt;p&gt;А потом сравните основной текст с источником.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt; превратилось в &lt;code&gt;même&lt;/code&gt;. Запятая переехала. &lt;code&gt;luy&lt;/code&gt; тихо осовременили до
&lt;code&gt;lui&lt;/code&gt;. Фразу, которую трудно было разобрать в рукописи, «исправили» во что-то
более гладкое. Ни одного из этих изменений никто не просил. Ни одно не помечено.
Документ валиден по схеме и тихо неверен.&lt;/p&gt;
&lt;p&gt;Для архивного процесса — где закодированный текст становится постоянной записью,
на которую опираются последующие читатели, поисковые индексы и цитаты, — это
самый важный вид сбоя. Кривой тег раздражает. Осовремененное написание, которого
никто не замечает пять лет, — это порча.&lt;/p&gt;
&lt;h2 id="сборка-по-закреплённым-отрезкам"&gt;Сборка по закреплённым отрезкам&lt;/h2&gt;
&lt;p&gt;Новый выпуск (v0.3) содержит механизм предотвращения галлюцинаций, нацеленный
ровно на этот сбой. Цель конструкции — сделать галлюцинации в основном тексте
невозможными по самому устройству, а не просто маловероятными.&lt;/p&gt;
&lt;p&gt;Идея проста: &lt;strong&gt;модель никогда не набирает основной текст&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Вместо этого процесс выглядит так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Модель вызывает &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; и получает исходный простой текст
в виде неизменяемой строки.&lt;/li&gt;
&lt;li&gt;Для каждого тега, который она хочет поставить, она вызывает
&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt;, регистрируя
элемент TEI на диапазоне символов источника.&lt;/li&gt;
&lt;li&gt;Закончив, она вызывает &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;. Сервер переплетает записанные
теги с исходным простым текстом, отрисовывает итоговый TEI и затем проверяет
&lt;em&gt;байт за байтом&lt;/em&gt;, что плоское текстовое содержимое полученного документа
равно источнику.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если байты совпадают, документ возвращается. Если нет — если теги модели
каким-то образом подразумевают основной текст, отличающийся от источника хотя бы
на один символ, — &lt;code&gt;compose()&lt;/code&gt; выбрасывает исключение вместо того, чтобы вернуть
испорченный документ.&lt;/p&gt;
&lt;p&gt;В этом процессе нет пути, на котором модель выдала бы документ TEI с основным
текстом, отличным от источника. Инвариант механический, а не поведенческий.
Вам не нужно верить, что модель не станет галлюцинировать; нужно верить лишь
проверке &lt;code&gt;==&lt;/code&gt; между двумя байтовыми строками.&lt;/p&gt;
&lt;h2 id="что-это-такое--и-чем-это-не-является"&gt;Что это такое — и чем это не является&lt;/h2&gt;
&lt;p&gt;Сборка по закреплённым отрезкам &lt;strong&gt;дополняет&lt;/strong&gt; заземление на схему, а не заменяет
его. Инструменты заземления (&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;,
&lt;code&gt;valid_children&lt;/code&gt; и остальные из первоначальных шестнадцати) помогают модели
выдавать &lt;em&gt;валидный&lt;/em&gt; TEI. Сборка по закреплённым отрезкам гарантирует, что
основной текст внутри этого TEI &lt;em&gt;верен&lt;/em&gt; источнику. Пригодный к внедрению процесс
кодирования должен удовлетворять обеим осям, и теперь обе покрывает один сервер.&lt;/p&gt;
&lt;p&gt;Но и волшебной таблеткой от всего это не назовёшь. &lt;code&gt;compose()&lt;/code&gt; пока не проверяет,
допустимы ли зарегистрированные теги по загруженной ODD-настройке — это следующий
шаг. Записанные теги живут в памяти процесса и не переживают перезапуск. А
исходные файлы должны быть доступны для чтения оттуда, где запущен сервер. Всё
это решаемо; ничто из этого не подрывает основной инвариант.&lt;/p&gt;
&lt;h2 id="почему-это-важно-и-за-пределами-tei"&gt;Почему это важно и за пределами TEI&lt;/h2&gt;
&lt;p&gt;Этот приём обобщается. Всякий раз, когда модель просят аннотировать, преобразовать
или обернуть фрагмент текста — и всякий раз, когда целостность исходного текста
важнее, чем способность модели его «улучшить», — годится решение той же формы.
Не просите модель перепечатывать текст. Просите её выдать инструкции над
текстом, а применять их пусть будет детерминированный сборщик под инвариантом
равенства.&lt;/p&gt;
&lt;p&gt;Для цифровых изданий в частности это меняет то, что можно ответственно поручить
модели. Кодирование вдруг становится задачей, которую можно делегировать, не
сверяя вручную каждый результат с источником. Машина идёт скучным путём;
редактор проверяет разметку, а не орфографию.&lt;/p&gt;
&lt;h2 id="как-обновиться"&gt;Как обновиться&lt;/h2&gt;
&lt;p&gt;Если tei-mcp у вас уже установлен:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или с нуля:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Чтобы пользоваться сборкой по закреплённым отрезкам, укажите серверу каталог
с исходными текстовыми файлами:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Имя каждого файла без расширения становится идентификатором документа
(&lt;code&gt;letter_001.txt&lt;/code&gt; → &lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Исходный код, полная документация и заметки о конструкции инварианта:
&lt;/p&gt;</description></item><item><title>tei-mcp</title><link>https://clementgodbarge.com/ru/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcp-tei-p5-для-ии-агентов"&gt;tei-mcp: TEI P5 для ИИ-агентов&lt;/h2&gt;
&lt;p&gt;tei-mcp —
-сервер с открытым исходным кодом, дающий ИИ-ассистентам для программирования прямой доступ к спецификации
. Вместо того чтобы полагаться на заученные обучающие данные — что часто даёт правдоподобную, но неверную разметку, — ИИ может обращаться к спецификации в реальном времени.&lt;/p&gt;
&lt;h2 id="возможности"&gt;Возможности&lt;/h2&gt;
&lt;p&gt;Сервер разбирает TEI P5 ODD и предоставляет 16 инструментов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Поиск&lt;/strong&gt; любого элемента, класса, макроса или модуля по имени без учёта регистра и с подсказками при опечатках&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разрешение атрибутов&lt;/strong&gt; по всей иерархии классов TEI (локальные + унаследованные)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Развёртывание моделей содержимого&lt;/strong&gt; в структурированные деревья с разрешением классов и макросов&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Проверка вложенности&lt;/strong&gt; — прямая связь «родитель — потомок» или рекурсивная достижимость с отслеживанием пути&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Валидация документов&lt;/strong&gt; по TEI P5: модели содержимого, атрибуты, закрытые списки значений, целостность ссылок и предупреждения об устаревших элементах&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Валидация отдельных элементов&lt;/strong&gt; для пошагового редактирования&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Загрузка ODD-настроек&lt;/strong&gt;, ограничивающих схему подмножеством, принятым в проекте&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Поиск по регулярным выражениям&lt;/strong&gt; среди всех типов сущностей&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="установка"&gt;Установка&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или запустите напрямую:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="использование"&gt;Использование&lt;/h2&gt;
&lt;p&gt;Добавьте в любой MCP-совместимый клиент (Claude, Cursor, Windsurf и т. д.):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Исходный код и документация — в
.&lt;/p&gt;</description></item><item><title>tei-mcp: TEI P5 для ИИ-агентов</title><link>https://clementgodbarge.com/ru/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/post/tei-mcp/</guid><description>&lt;p&gt;Если вы когда-нибудь писали TEI XML с помощью ИИ-ассистента для программирования,
вы наверняка замечали, что он ошибается. Элементы появляются там, где им не место.
Атрибуты выдумываются. Правила вложенности игнорируются. Модель примерно представляет,
как выглядит TEI, но надёжного знания спецификации у неё нет.&lt;/p&gt;
&lt;p&gt;tei-mcp решает эту проблему, давая ИИ-агентам прямой доступ к Руководству TEI P5
через инструменты.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Содержание&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#что-такое-mcp"&gt;Что такое MCP?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#что-делает-tei-mcp"&gt;Что делает tei-mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#почему-это-важно"&gt;Почему это важно&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#с-чего-начать"&gt;С чего начать&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="что-такое-mcp"&gt;Что такое MCP?&lt;/h2&gt;
&lt;p&gt;
(MCP) — открытый стандарт,
позволяющий ИИ-приложениям подключаться к внешним источникам данных и инструментам.
Считайте его USB-портом для ИИ: единый протокол, через который любой совместимый
клиент — Claude, Cursor, Windsurf и другие — подключается к специализированным службам.&lt;/p&gt;
&lt;p&gt;MCP-сервер предоставляет &lt;em&gt;инструменты&lt;/em&gt;, которые ИИ может вызывать по ходу разговора.
Вместо того чтобы полагаться на заученные обучающие данные, модель обращается к живому
авторитетному источнику.&lt;/p&gt;
&lt;h2 id="что-делает-tei-mcp"&gt;Что делает tei-mcp&lt;/h2&gt;
&lt;p&gt;tei-mcp разбирает спецификацию TEI P5 в формате ODD и предоставляет 16 инструментов,
покрывающих самые частые вопросы редактора или кодировщика:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Что это за элемент?&lt;/strong&gt; Поиск любого элемента, класса, макроса или модуля по имени,
без учёта регистра и с подсказками при опечатках.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Какие у него атрибуты?&lt;/strong&gt; Разрешение атрибутов по всей иерархии классов: сначала
локальные, затем унаследованные по порядку.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Что может быть внутри?&lt;/strong&gt; Развёртывание моделей содержимого в структурированные
деревья или плоский список допустимых потомков.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Можно ли поставить элемент сюда?&lt;/strong&gt; Проверка вложенности «родитель — потомок»
или трассировка достижимости по всей иерархии элементов.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Валиден ли мой документ?&lt;/strong&gt; Проверка файла TEI XML по спецификации: модели
содержимого, значения атрибутов, закрытые списки значений, целостность ссылок
и предупреждения об устаревших элементах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;А как же схема моего проекта?&lt;/strong&gt; Загрузка файла ODD-настройки, чтобы ограничить
всё перечисленное подмножеством TEI, принятым в вашем проекте.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="почему-это-важно"&gt;Почему это важно&lt;/h2&gt;
&lt;p&gt;Кодирование в TEI требует постоянно сверяться с Руководством. Опытные кодировщики
усваивают самые ходовые схемы, но даже им приходится заглядывать в спецификацию ради
менее знакомых элементов или сложных моделей содержимого. У ИИ-ассистентов такого
усвоенного знания нет, и им приходится хуже: они галлюцинируют правдоподобную на вид,
но неверную разметку.&lt;/p&gt;
&lt;p&gt;С tei-mcp ИИ не приходится гадать. Он может найти ответ в спецификации, прежде чем
напишет хоть одну угловую скобку. В результате разметка соответствует TEI P5 — или
ODD-настройке вашего проекта.&lt;/p&gt;
&lt;h2 id="с-чего-начать"&gt;С чего начать&lt;/h2&gt;
&lt;p&gt;Установите из PyPI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Затем добавьте сервер в конфигурацию вашего MCP-клиента:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При первом запуске сервер скачивает спецификацию TEI и работает с любым
MCP-совместимым клиентом.&lt;/p&gt;
&lt;p&gt;Исходный код и полная документация:
&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/ru/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon-параллельная-обработка-xslt-для-больших-корпусов-tei"&gt;Multi-Saxon: параллельная обработка XSLT для больших корпусов TEI&lt;/h2&gt;
&lt;p&gt;Multi-Saxon закрывает серьёзный пробел в инструментах обработки XML: он позволяет параллельно выполнять преобразования XSLT 2.0 и 3.0, с которыми не справляется LXML (популярная библиотека Python для работы с XML). Созданный специально для больших собраний документов XML TEI, Multi-Saxon заметно ускоряет обработку за счёт эффективного параллельного выполнения.&lt;/p&gt;
&lt;h2 id="основные-возможности"&gt;Основные возможности&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Продвинутая поддержка XSLT&lt;/strong&gt;: выполняет преобразования XSLT 2.0 и 3.0, недоступные LXML&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Параллельная обработка&lt;/strong&gt;: резко сокращает время преобразования больших собраний документов за счёт распараллеливания&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Оптимизация под TEI&lt;/strong&gt;: спроектирован специально для XML-документов Text Encoding Initiative (TEI)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Масштабируемая производительность&lt;/strong&gt;: эффективно обрабатывает корпуса от сотен до тысяч документов&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Кроссплатформенность&lt;/strong&gt;: работает в разных операционных системах и средах&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="какую-проблему-решает-multi-saxon"&gt;Какую проблему решает Multi-Saxon&lt;/h2&gt;
&lt;p&gt;Специалисты по цифровым гуманитарным наукам, работающие с TEI, часто сталкиваются с двумя серьёзными трудностями:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML (распространённая библиотека Python для обработки XML) поддерживает только XSLT 1.0, так что более продвинутыми возможностями XSLT 2.0/3.0 воспользоваться невозможно&lt;/li&gt;
&lt;li&gt;Последовательная обработка больших корпусов документов TEI может занимать непозволительно много времени&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxon решает обе задачи: он использует продвинутые возможности XSLT в Saxon и распределяет обработку по нескольким ядрам, что даёт существенный выигрыш в производительности.&lt;/p&gt;
&lt;h2 id="реализация"&gt;Реализация&lt;/h2&gt;
&lt;p&gt;Multi-Saxon сочетает Python с Java-процессором Saxon, образуя высокопроизводительный конвейер преобразований:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;использует Java-библиотеку Saxon для надёжной обработки XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;применяет многопроцессность, распределяя преобразования по доступным ядрам CPU&lt;/li&gt;
&lt;li&gt;эффективно управляет пулами процессов, чтобы максимизировать пропускную способность&lt;/li&gt;
&lt;li&gt;предоставляет простой интерфейс для пакетной обработки документов TEI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="пример-использования"&gt;Пример использования&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;multi_saxon&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize with your XSLT stylesheet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transform.xsl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform a single document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform an entire directory in parallel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform_directory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="значение-для-цифровых-гуманитарных-наук"&gt;Значение для цифровых гуманитарных наук&lt;/h2&gt;
&lt;p&gt;Проектам в цифровых гуманитарных науках, работающим с большими собраниями документов TEI, Multi-Saxon даёт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;сложные преобразования всего корпуса, невозможные с LXML&lt;/li&gt;
&lt;li&gt;резко сокращённое время обработки (нередко в 5–10 раз на многоядерных системах)&lt;/li&gt;
&lt;li&gt;более тонкий анализ благодаря продвинутым возможностям XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;упрощённый рабочий процесс для обработки целых собраний документов&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Исходный код и документация — в
.&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/ru/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ru/code/persnamer/</guid><description>&lt;h2 id="persnamer-связываем-tei-с-virtual-international-authority-file"&gt;persNamer: связываем TEI с Virtual International Authority File&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer — специализированный инструмент на Python, упрощающий включение авторитетных данных о персонах из VIAF (Virtual International Authority File) в документы TEI XML. Преобразуя идентификаторы VIAF в готовую к использованию TEI-разметку, persNamer значительно сокращает ручную работу по созданию структурированных записей о персонах для цифровых научных изданий.&lt;/p&gt;
&lt;h2 id="трудности-авторитетного-контроля-в-tei"&gt;Трудности авторитетного контроля в TEI&lt;/h2&gt;
&lt;p&gt;Цифровым научным изданиям часто требуется точная идентификация исторических лиц, включая нормализованные формы имён и даты жизни. Чтобы поддерживать единообразный авторитетный контроль по всему проекту, нужно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;выявить персоны в исторических текстах&lt;/li&gt;
&lt;li&gt;найти о них авторитетные данные&lt;/li&gt;
&lt;li&gt;создать правильно оформленные записи TEI&lt;/li&gt;
&lt;li&gt;обеспечить единообразие ссылок по всему проекту&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Обычно эти шаги выполняются вручную, отнимают много времени и чреваты разнобоем.&lt;/p&gt;
&lt;h2 id="как-работает-persnamer"&gt;Как работает persNamer&lt;/h2&gt;
&lt;p&gt;persNamer автоматизирует этот процесс:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Получение данных VIAF&lt;/strong&gt;: по идентификатору VIAF инструмент загружает RDF-данные через согласование содержимого HTTP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Извлечение ключевых сведений&lt;/strong&gt;: разбирает RDF и извлекает предпочтительную форму имени, дату рождения и дату смерти&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Генерация TEI-разметки&lt;/strong&gt;: создаёт два необходимых фрагмента XML:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;запись авторитетного файла&lt;/strong&gt; (элемент &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; со сгенерированным &lt;code&gt;xml:id&lt;/code&gt;, &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;birth&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;death&amp;gt;&lt;/code&gt; и &lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;отдельный &lt;strong&gt;тег аннотирования&lt;/strong&gt; (&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; с атрибутом &lt;code&gt;ref&lt;/code&gt;, указывающим на запись авторитетного файла)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Такой двойной вывод позволяет редакторам вести централизованный авторитетный файл и при этом легко вставлять теги аннотирования в свои тексты TEI.&lt;/p&gt;
&lt;h2 id="основные-возможности"&gt;Основные возможности&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Стандартизованная генерация идентификаторов&lt;/strong&gt;: создаёт единообразные XML-идентификаторы вида &lt;code&gt;pers-[familyname]-[givenname initial]&lt;/code&gt; (напр., &lt;code&gt;pers-deteligny-c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разбор RDF&lt;/strong&gt;: использует &lt;code&gt;rdflib&lt;/code&gt; для извлечения сведений из различных RDF-свойств (напр., &lt;code&gt;rdfs:label&lt;/code&gt;, &lt;code&gt;schema:name&lt;/code&gt;, &lt;code&gt;viaf:mainHead&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Интерфейс командной строки&lt;/strong&gt;: простой запуск, где единственный обязательный аргумент — номер VIAF&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Подробный вывод&lt;/strong&gt;: помимо итогового XML, сообщает детали обработки&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="пример-использования"&gt;Пример использования&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python persNamer.py &lt;span class="m"&gt;314802260&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Эта команда выдаёт:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persName&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;birth&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;death&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;persName&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="применение-в-цифровых-гуманитарных-науках"&gt;Применение в цифровых гуманитарных науках&lt;/h2&gt;
&lt;p&gt;persNamer особенно полезен для:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;цифровых научных изданий, требующих авторитетного контроля&lt;/li&gt;
&lt;li&gt;проектов TEI-кодирования, работающих с историческими лицами&lt;/li&gt;
&lt;li&gt;инициатив в области связанных данных, соединяющих документы с авторитетными записями&lt;/li&gt;
&lt;li&gt;обеспечения единообразия в больших корпусах TEI&lt;/li&gt;
&lt;li&gt;преподавания основ авторитетного контроля в курсах по цифровым гуманитарным наукам&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="реализация"&gt;Реализация&lt;/h2&gt;
&lt;p&gt;persNamer написан на Python и зависит от:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; для HTTP-запросов&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdflib&lt;/code&gt; для разбора RDF&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lxml&lt;/code&gt; для работы с XML&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Исходный код и документация — в
.&lt;/p&gt;</description></item></channel></rss>