<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python |</title><link>https://clementgodbarge.com/it/tag/python/</link><atom:link href="https://clementgodbarge.com/it/tag/python/index.xml" rel="self" type="application/rss+xml"/><description>Python</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>it-it</language><lastBuildDate>Sun, 15 Mar 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>Python</title><link>https://clementgodbarge.com/it/tag/python/</link></image><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>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>