<?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/it/tag/tei/</link><atom:link href="https://clementgodbarge.com/it/tag/tei/index.xml" rel="self" type="application/rss+xml"/><description>TEI</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>it-it</language><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>TEI</title><link>https://clementgodbarge.com/it/tag/tei/</link></image><item><title>tei-mcp v0.3: codificare in TEI senza riscrivere la fonte</title><link>https://clementgodbarge.com/it/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/it/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;Quando ho
, lo scopo era impedire agli assistenti IA di allucinare marcatura TEI. L’ancoraggio allo schema ha risolto una parte del problema: con un accesso diretto, per mezzo di strumenti, alla specifica P5, il modello non deve più indovinare che cosa significhi un elemento o quali attributi accetti. L’output passa la validazione.&lt;/p&gt;
&lt;p&gt;Ma nella codifica TEI l’allucinazione ha due facce, e lo schema ne coglie una sola. Validare rispetto alla specifica vi dice che la &lt;em&gt;marcatura&lt;/em&gt; è ben formata; non dice nulla del &lt;em&gt;testo&lt;/em&gt; che quella marcatura racchiude. Ed è lì, nel testo, che si annidano le allucinazioni più dannose. La composizione span-locked, novità di punta della v0.3, è pensata apposta per impedirle.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Indice dei Contenuti&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#lallucinazione-che-lo-schema-non-vede"&gt;L’allucinazione che lo schema non vede&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#la-composizione-span-locked"&gt;La composizione span-locked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#che-cosè-e-che-cosa-non-è"&gt;Che cos’è, e che cosa non è&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#perché-conta-al-di-là-della-tei"&gt;Perché conta, al di là della TEI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#come-aggiornare"&gt;Come aggiornare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="lallucinazione-che-lo-schema-non-vede"&gt;L’allucinazione che lo schema non vede&lt;/h2&gt;
&lt;p&gt;Chiedete a un modello di codificare una lettera francese del Cinquecento e otterrete spesso un documento TEI dall’aria impeccabile: header compilato, tag &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; al posto giusto, &lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; ben formata. Passatelo per &lt;code&gt;validate_document&lt;/code&gt;, e passa.&lt;/p&gt;
&lt;p&gt;Poi confrontate il corpo con la fonte.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt; è diventato &lt;code&gt;même&lt;/code&gt;. Una virgola è migrata. &lt;code&gt;luy&lt;/code&gt; è stato modernizzato in &lt;code&gt;lui&lt;/code&gt; senza dir niente a nessuno. Una frase ostica nel manoscritto è stata «corretta» in qualcosa di più pulito. Nessuna di queste modifiche era stata richiesta; nessuna viene segnalata. Il documento è valido per lo schema e sbagliato in silenzio.&lt;/p&gt;
&lt;p&gt;In un flusso di lavoro archivistico – dove il testo codificato diventa il documento definitivo su cui contano lettori, indici di ricerca e citazioni – è questo il guasto che conta di più. Un tag malformato è una seccatura; una grafia modernizzata che nessuno nota per cinque anni è una corruzione.&lt;/p&gt;
&lt;h2 id="la-composizione-span-locked"&gt;La composizione span-locked&lt;/h2&gt;
&lt;p&gt;La nuova versione (v0.3) include un meccanismo di prevenzione delle allucinazioni mirato proprio a questo guasto. L’obiettivo di progetto è rendere le allucinazioni nel corpo del testo impossibili per costruzione, non semplicemente improbabili.&lt;/p&gt;
&lt;p&gt;L’idea è semplice: &lt;strong&gt;il modello non batte mai il corpo del testo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il flusso di lavoro, invece, è questo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Il modello chiama &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; e riceve il testo semplice di partenza come stringa immutabile.&lt;/li&gt;
&lt;li&gt;Per ogni tag che vuole applicare, chiama &lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt;, registrando un elemento TEI su un intervallo di caratteri della fonte.&lt;/li&gt;
&lt;li&gt;Quando ha finito, chiama &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;. Il server intercala i tag registrati nel testo semplice originale, produce la TEI finale e poi verifica &lt;em&gt;byte per byte&lt;/em&gt; che il contenuto testuale piatto del documento prodotto sia uguale alla fonte.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se i byte coincidono, il documento viene restituito. Se non coincidono – se i tag del modello implicano in qualche modo un corpo che differisce dalla fonte anche di un solo carattere – &lt;code&gt;compose()&lt;/code&gt; solleva un’eccezione invece di consegnare un documento corrotto.&lt;/p&gt;
&lt;p&gt;Non esiste percorso, in questo flusso, che porti il modello a produrre un documento TEI con un corpo diverso dalla fonte. L’invariante è meccanico, non comportamentale: non dovete fidarvi del modello perché non allucini; dovete fidarvi di un &lt;code&gt;==&lt;/code&gt; fra due stringhe di byte.&lt;/p&gt;
&lt;h2 id="che-cosè-e-che-cosa-non-è"&gt;Che cos’è, e che cosa non è&lt;/h2&gt;
&lt;p&gt;La composizione span-locked è &lt;strong&gt;complementare&lt;/strong&gt; all’ancoraggio allo schema, non lo sostituisce. Gli strumenti di ancoraggio (&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;, &lt;code&gt;valid_children&lt;/code&gt; e il resto dei sedici originali) aiutano il modello a produrre TEI &lt;em&gt;valida&lt;/em&gt;; la composizione span-locked garantisce che il corpo del testo dentro quella TEI sia &lt;em&gt;fedele&lt;/em&gt; alla fonte. Un flusso di codifica che si possa mettere in produzione deve soddisfare entrambi gli assi, e ora un solo server li copre tutti e due.&lt;/p&gt;
&lt;p&gt;Non è nemmeno la panacea. &lt;code&gt;compose()&lt;/code&gt; non verifica ancora che i tag registrati siano ammessi da una personalizzazione ODD caricata: arriverà. I tag registrati vivono nella memoria del processo e non sopravvivono a un riavvio. E i file di partenza devono essere leggibili da dove gira il server. Sono tutte cose risolvibili, e nessuna intacca l’invariante di fondo.&lt;/p&gt;
&lt;h2 id="perché-conta-al-di-là-della-tei"&gt;Perché conta, al di là della TEI&lt;/h2&gt;
&lt;p&gt;Lo schema si generalizza. Ogni volta che si chiede a un modello di annotare, trasformare o incapsulare un testo – e ogni volta che l’integrità di quel testo conta più della capacità del modello di «migliorarlo» – la soluzione ha la stessa forma. Non chiedete al modello di ribattere il testo; chiedetegli istruzioni sul testo, e lasciate che un compositore deterministico le applichi sotto un invariante di uguaglianza.&lt;/p&gt;
&lt;p&gt;Per le edizioni digitali, in particolare, questo cambia ciò che si può affidare a un modello senza rimorsi. La codifica diventa d’un tratto un compito delegabile, senza dover confrontare a mano ogni output con la fonte. La macchina fa la parte noiosa; il curatore rivede la marcatura, non l’ortografia.&lt;/p&gt;
&lt;h2 id="come-aggiornare"&gt;Come aggiornare&lt;/h2&gt;
&lt;p&gt;Se avete già 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;Oppure da zero:&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;Per usare la composizione span-locked, indicate al server una directory di file di testo semplice:&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;Il nome di ogni file, senza estensione, diventa l’ID del documento (&lt;code&gt;letter_001.txt&lt;/code&gt; → &lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Codice sorgente, documentazione completa e note di progetto sull’invariante:
&lt;/p&gt;</description></item><item><title>tei-mcp</title><link>https://clementgodbarge.com/it/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/it/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcp-la-tei-p5-per-gli-agenti-ia"&gt;tei-mcp: la TEI P5 per gli agenti IA&lt;/h2&gt;
&lt;p&gt;tei-mcp è un server
open source che dà agli assistenti IA per la programmazione un accesso diretto alla specifica
. Invece di affidarsi a ciò che ricorda dell’addestramento – da cui esce spesso una marcatura plausibile ma sbagliata – l’IA interroga la specifica in tempo reale.&lt;/p&gt;
&lt;h2 id="funzionalità"&gt;Funzionalità&lt;/h2&gt;
&lt;p&gt;Il server analizza l’ODD della TEI P5 ed espone 16 strumenti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ricerca&lt;/strong&gt; di qualunque elemento, classe, macro o modulo per nome, senza distinguere maiuscole e minuscole e con suggerimenti in caso di refuso&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Risoluzione degli attributi&lt;/strong&gt; lungo l’intera gerarchia di classi TEI (locali ed ereditati)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Espansione dei modelli di contenuto&lt;/strong&gt; in alberi strutturati, con risoluzione di classi e macro&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verifica dell’annidamento&lt;/strong&gt;: rapporto diretto genitore-figlio, o raggiungibilità ricorsiva con tracciamento del percorso&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validazione dei documenti&lt;/strong&gt; rispetto alla TEI P5: modelli di contenuto, attributi, liste chiuse di valori, integrità dei riferimenti e avvisi di deprecazione&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validazione di singoli elementi&lt;/strong&gt; per chi lavora per ritocchi successivi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caricamento di personalizzazioni ODD&lt;/strong&gt; per restringere lo schema al sottoinsieme proprio di un progetto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ricerca&lt;/strong&gt; in tutti i tipi di entità con espressioni regolari&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installazione"&gt;Installazione&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;Oppure si esegue direttamente con:&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="uso"&gt;Uso&lt;/h2&gt;
&lt;p&gt;Si aggiunge a qualsiasi client compatibile con MCP (Claude, Cursor, Windsurf ecc.):&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;Il codice sorgente e la documentazione sono nel
.&lt;/p&gt;</description></item><item><title>tei-mcp: la TEI P5 per gli agenti IA</title><link>https://clementgodbarge.com/it/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/it/post/tei-mcp/</guid><description>&lt;p&gt;Chi ha provato a far scrivere XML TEI a un assistente IA per la programmazione sa già come va a finire: sbaglia. Gli elementi spuntano dove non dovrebbero, gli attributi vengono inventati, le regole di annidamento ignorate. Il modello ha un’idea vaga dell’aspetto della TEI, ma nessuna conoscenza affidabile della specifica.&lt;/p&gt;
&lt;p&gt;tei-mcp rimedia dando agli agenti IA un accesso diretto, per mezzo di strumenti, alle Guidelines della TEI P5.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Indice dei Contenuti&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#che-cosè-mcp"&gt;Che cos’è MCP?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#che-cosa-fa-tei-mcp"&gt;Che cosa fa tei-mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#perché-conta"&gt;Perché conta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#per-cominciare"&gt;Per cominciare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="che-cosè-mcp"&gt;Che cos’è MCP?&lt;/h2&gt;
&lt;p&gt;Il
(MCP) è uno standard aperto che permette alle applicazioni di IA di collegarsi a fonti di dati e strumenti esterni. Pensate a una porta USB per l’IA: un solo protocollo con cui qualunque client compatibile – Claude, Cursor, Windsurf e altri – si innesta su servizi specializzati.&lt;/p&gt;
&lt;p&gt;Un server MCP espone degli &lt;em&gt;strumenti&lt;/em&gt; che l’IA può chiamare nel corso di una conversazione. Invece di affidarsi a ciò che ricorda dell’addestramento, il modello interroga una fonte viva e autorevole.&lt;/p&gt;
&lt;h2 id="che-cosa-fa-tei-mcp"&gt;Che cosa fa tei-mcp&lt;/h2&gt;
&lt;p&gt;tei-mcp analizza la specifica ODD della TEI P5 ed espone 16 strumenti, che rispondono alle domande più comuni di chi cura o codifica un’edizione:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Che cos’è questo elemento?&lt;/strong&gt; Cerca qualunque elemento, classe, macro o modulo per nome, senza distinguere maiuscole e minuscole e con suggerimenti in caso di refuso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quali attributi accetta?&lt;/strong&gt; Risolve gli attributi lungo l’intera gerarchia di classi: prima quelli locali, poi quelli ereditati, in ordine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Che cosa può contenere?&lt;/strong&gt; Espande i modelli di contenuto in alberi strutturati, oppure restituisce l’elenco piatto dei figli ammessi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Questo elemento può stare qui?&lt;/strong&gt; Verifica l’annidamento genitore-figlio, o segue la raggiungibilità lungo l’intera gerarchia degli elementi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Il mio documento è valido?&lt;/strong&gt; Valida un file XML TEI rispetto alla specifica: modelli di contenuto, valori degli attributi, liste chiuse di valori, integrità dei riferimenti e avvisi di deprecazione.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E lo schema del mio progetto?&lt;/strong&gt; Carica un file di personalizzazione ODD per restringere tutto quanto sopra al sottoinsieme di TEI proprio del vostro progetto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="perché-conta"&gt;Perché conta&lt;/h2&gt;
&lt;p&gt;Codificare in TEI vuol dire consultare le Guidelines di continuo. I codificatori esperti hanno interiorizzato gli schemi più comuni, ma anche loro devono controllare la specifica per gli elementi meno familiari o per i modelli di contenuto più intricati. Per gli assistenti IA, che di quella conoscenza interiorizzata non hanno nulla, il problema è peggiore: allucinano una marcatura plausibile all’occhio e sbagliata nella sostanza.&lt;/p&gt;
&lt;p&gt;Con tei-mcp l’IA non deve più tirare a indovinare: cerca la risposta nella specifica prima di scrivere una sola parentesi angolare. Il risultato è una marcatura conforme alla TEI P5, o alla personalizzazione ODD del vostro progetto.&lt;/p&gt;
&lt;h2 id="per-cominciare"&gt;Per cominciare&lt;/h2&gt;
&lt;p&gt;Si installa da 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;Poi lo si aggiunge alla configurazione del client 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;Al primo avvio il server scarica la specifica TEI; funziona con qualsiasi client compatibile con MCP.&lt;/p&gt;
&lt;p&gt;Codice sorgente e documentazione completa:
&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/it/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/it/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon-trasformazioni-xslt-in-parallelo-per-grandi-corpora-tei"&gt;Multi-Saxon: trasformazioni XSLT in parallelo per grandi corpora TEI&lt;/h2&gt;
&lt;p&gt;Multi-Saxon colma una lacuna seria fra gli strumenti di elaborazione XML: esegue in parallelo trasformazioni XSLT 2.0 e 3.0 che LXML, la diffusa libreria XML per Python, non sa gestire. Pensato per grandi collezioni di documenti XML TEI, abbatte i tempi di elaborazione grazie a un’esecuzione parallela efficiente.&lt;/p&gt;
&lt;h2 id="caratteristiche-principali"&gt;Caratteristiche principali&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;XSLT avanzato&lt;/strong&gt;: elabora trasformazioni XSLT 2.0 e 3.0, fuori dalla portata di LXML&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elaborazione parallela&lt;/strong&gt;: la parallelizzazione riduce drasticamente i tempi di trasformazione delle grandi collezioni di documenti&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Su misura per la TEI&lt;/strong&gt;: progettato apposta per i documenti XML della Text Encoding Initiative (TEI)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prestazioni scalabili&lt;/strong&gt;: gestisce con efficienza corpora da centinaia a migliaia di documenti&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multipiattaforma&lt;/strong&gt;: funziona su sistemi operativi e ambienti diversi&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="il-problema-che-multi-saxon-risolve"&gt;Il problema che Multi-Saxon risolve&lt;/h2&gt;
&lt;p&gt;Chi lavora con la TEI nell’umanistica digitale si scontra spesso con due ostacoli:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML (una comune libreria Python per l’elaborazione XML) sostiene soltanto XSLT 1.0, e preclude quindi le funzionalità più avanzate di XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;Elaborare in sequenza grandi corpora di documenti TEI può richiedere tempi proibitivi&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxon risponde a entrambi sfruttando le capacità XSLT avanzate di Saxon e distribuendo l’elaborazione su più core, con guadagni di prestazioni notevoli.&lt;/p&gt;
&lt;h2 id="realizzazione"&gt;Realizzazione&lt;/h2&gt;
&lt;p&gt;Multi-Saxon accoppia Python al processore Saxon per Java in una pipeline di trasformazione ad alte prestazioni:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;usa la libreria Saxon per Java per un’elaborazione XSLT 2.0/3.0 robusta&lt;/li&gt;
&lt;li&gt;ricorre al multiprocessing per distribuire le trasformazioni sui core disponibili&lt;/li&gt;
&lt;li&gt;gestisce con efficienza i pool di processi per massimizzare il throughput&lt;/li&gt;
&lt;li&gt;offre un’interfaccia semplice per l’elaborazione in batch dei documenti TEI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-duso"&gt;Esempio d’uso&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="che-cosa-cambia-per-lumanistica-digitale"&gt;Che cosa cambia per l’umanistica digitale&lt;/h2&gt;
&lt;p&gt;Per i progetti di umanistica digitale alle prese con grandi collezioni di documenti TEI, Multi-Saxon rende possibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trasformazioni complesse sull’intero corpus, impensabili con LXML&lt;/li&gt;
&lt;li&gt;tempi di elaborazione drasticamente ridotti (spesso di 5-10 volte sui sistemi multi-core)&lt;/li&gt;
&lt;li&gt;analisi più sofisticate grazie alle funzionalità avanzate di XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;un flusso di lavoro più semplice per elaborare intere collezioni di documenti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il codice sorgente e la documentazione sono nel
.&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/it/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/it/code/persnamer/</guid><description>&lt;h2 id="persnamer-collegare-la-tei-al-virtual-international-authority-file"&gt;persNamer: collegare la TEI al Virtual International Authority File&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer è uno strumento Python specializzato che facilita l’integrazione, nei documenti XML TEI, dei dati di autorità sulle persone forniti da VIAF (Virtual International Authority File). Convertendo gli identificatori VIAF in marcatura TEI pronta all’uso, riduce di molto il lavoro manuale necessario per creare voci di persona strutturate in un’edizione critica digitale.&lt;/p&gt;
&lt;h2 id="il-controllo-di-autorità-nella-tei"&gt;Il controllo di autorità nella TEI&lt;/h2&gt;
&lt;p&gt;Le edizioni critiche digitali richiedono spesso di identificare con precisione i personaggi storici, con i nomi normalizzati e le date di nascita e di morte. Mantenere un controllo di autorità coerente in tutto un progetto richiede di:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;identificare le persone nei testi storici&lt;/li&gt;
&lt;li&gt;trovare dati autorevoli su di loro&lt;/li&gt;
&lt;li&gt;creare voci TEI formattate a dovere&lt;/li&gt;
&lt;li&gt;garantire riferimenti coerenti in tutto il progetto&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Passaggi che, di norma, sono manuali, lenti e soggetti a incoerenze.&lt;/p&gt;
&lt;h2 id="come-funziona-persnamer"&gt;Come funziona persNamer&lt;/h2&gt;
&lt;p&gt;persNamer automatizza questo flusso di lavoro:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Recupero dei dati VIAF&lt;/strong&gt;: dato un identificatore VIAF, lo strumento recupera i dati RDF tramite negoziazione del contenuto HTTP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estrazione delle informazioni essenziali&lt;/strong&gt;: analizza l’RDF per estrarre il nome preferito, la data di nascita e la data di morte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generazione della marcatura TEI&lt;/strong&gt;: crea due frammenti XML:
&lt;ul&gt;
&lt;li&gt;una &lt;strong&gt;voce dell’authority file&lt;/strong&gt; (elemento &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; con un &lt;code&gt;xml:id&lt;/code&gt; generato, &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; e &lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;un &lt;strong&gt;tag di annotazione&lt;/strong&gt; a parte (&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; con un attributo &lt;code&gt;ref&lt;/code&gt; che rimanda alla voce di autorità)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Questo doppio output permette ai curatori di mantenere un authority file centralizzato e, insieme, di inserire con facilità i tag di annotazione nei loro testi TEI.&lt;/p&gt;
&lt;h2 id="caratteristiche-principali"&gt;Caratteristiche principali&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generazione normalizzata degli ID&lt;/strong&gt;: crea ID XML coerenti nella forma &lt;code&gt;pers-[cognome]-[iniziale del nome]&lt;/code&gt; (per es. &lt;code&gt;pers-deteligny-c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analisi RDF&lt;/strong&gt;: usa &lt;code&gt;rdflib&lt;/code&gt; per estrarre le informazioni da diverse proprietà RDF (per es. &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;Interfaccia a riga di comando&lt;/strong&gt;: si esegue con un numero VIAF come unico argomento obbligatorio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output dettagliato&lt;/strong&gt;: accompagna l’XML finale con informazioni dettagliate sull’elaborazione&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="esempio-duso"&gt;Esempio d’uso&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;Questo comando produce:&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="applicazioni-nellumanistica-digitale"&gt;Applicazioni nell’umanistica digitale&lt;/h2&gt;
&lt;p&gt;persNamer torna particolarmente utile per:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le edizioni critiche digitali che richiedono un controllo di autorità&lt;/li&gt;
&lt;li&gt;i progetti di codifica TEI che trattano personaggi storici&lt;/li&gt;
&lt;li&gt;le iniziative di linked data che collegano documenti a record di autorità&lt;/li&gt;
&lt;li&gt;garantire la coerenza in grandi corpora TEI&lt;/li&gt;
&lt;li&gt;insegnare il controllo di autorità nei corsi di umanistica digitale&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="realizzazione"&gt;Realizzazione&lt;/h2&gt;
&lt;p&gt;persNamer è scritto in Python e dipende da:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; per le richieste HTTP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdflib&lt;/code&gt; per l’analisi RDF&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lxml&lt;/code&gt; per la gestione dell’XML&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il codice sorgente e la documentazione sono nel
.&lt;/p&gt;</description></item></channel></rss>