<?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/ca/tag/tei/</link><atom:link href="https://clementgodbarge.com/ca/tag/tei/index.xml" rel="self" type="application/rss+xml"/><description>TEI</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ca</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/ca/tag/tei/</link></image><item><title>tei-mcp v0.3: codificar en TEI sense reescriure la font</title><link>https://clementgodbarge.com/ca/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ca/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;Quan
, l’objectiu
era evitar que els assistents d’IA al·lucinessin marcatge TEI. L’ancoratge a
l’esquema en va resoldre una part: amb accés directe, mitjançant eines, a
l’especificació P5, el model ja no ha d’endevinar què significa un element ni
quins atributs accepta. El resultat valida.&lt;/p&gt;
&lt;p&gt;Però en la codificació TEI l’al·lucinació té dues cares, i l’esquema només
n’atrapa una. Validar contra l’especificació et diu que el &lt;em&gt;marcatge&lt;/em&gt; està ben
format. No diu res del &lt;em&gt;text&lt;/em&gt; que aquest marcatge embolcalla. I és allà – en el
text mateix – on viuen les al·lucinacions més perjudicials. La composició per
intervals blocats (&lt;em&gt;span-locked composition&lt;/em&gt;), la novetat estrella de la v0.3,
està dissenyada precisament per evitar-les.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Index&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#lallucinació-que-lesquema-no-pot-atrapar"&gt;L’al·lucinació que l’esquema no pot atrapar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#la-composició-per-intervals-blocats"&gt;La composició per intervals blocats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#què-és-i-què-no-és"&gt;Què és, i què no és&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#per-què-importa-més-enllà-de-la-tei"&gt;Per què importa més enllà de la TEI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#obtenir-lactualització"&gt;Obtenir l’actualització&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="lallucinació-que-lesquema-no-pot-atrapar"&gt;L’al·lucinació que l’esquema no pot atrapar&lt;/h2&gt;
&lt;p&gt;Demana a un model que codifiqui una carta francesa del segle XVI i sovint et
tornarà un document TEI d’aspecte impecable. La capçalera és plena, les
etiquetes &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; són al lloc correcte, el &lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; està ben format.
Passa’l per &lt;code&gt;validate_document&lt;/code&gt; i el supera.&lt;/p&gt;
&lt;p&gt;Després compara el cos amb la font.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt; s’ha convertit en &lt;code&gt;même&lt;/code&gt;. Una coma ha emigrat. &lt;code&gt;luy&lt;/code&gt; s’ha modernitzat
silenciosament en &lt;code&gt;lui&lt;/code&gt;. Una frase difícil de llegir al manuscrit ha estat
«corregida» cap a alguna cosa més neta. Cap d’aquests canvis no s’havia demanat.
Cap no està assenyalat. El document és vàlid segons l’esquema i discretament
erroni.&lt;/p&gt;
&lt;p&gt;En un flux de treball arxivístic – on el text codificat esdevé el registre
permanent de què depenen els lectors, els índexs de cerca i les citacions –
aquest és el mode de fallada que més importa. Una etiqueta mal formada és una
molèstia. Una grafia modernitzada que ningú no detecta durant cinc anys és una
corrupció.&lt;/p&gt;
&lt;h2 id="la-composició-per-intervals-blocats"&gt;La composició per intervals blocats&lt;/h2&gt;
&lt;p&gt;La nova versió (v0.3) incorpora un mecanisme de prevenció d’al·lucinacions que
apunta directament a aquest mode de fallada. L’objectiu de disseny és fer que
les al·lucinacions en el cos del text siguin impossibles per construcció, no
merament improbables.&lt;/p&gt;
&lt;p&gt;La idea és senzilla: &lt;strong&gt;el model no escriu mai el cos del text&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En lloc d’això, el flux de treball és el següent:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El model crida &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; i rep el text pla de la font com
una cadena immutable.&lt;/li&gt;
&lt;li&gt;Per a cada etiqueta que vol aplicar, crida
&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt;, i registra així
un element TEI sobre un interval de caràcters de la font.&lt;/li&gt;
&lt;li&gt;Quan ha acabat, crida &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;. El servidor intercala les
etiquetes registrades amb el text pla original, genera la TEI final i, tot
seguit, verifica &lt;em&gt;byte a byte&lt;/em&gt; que el contingut textual pla del document
generat és igual a la font.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si els bytes coincideixen, el document es retorna. Si no – si les etiquetes del
model impliquen d’alguna manera un cos que difereix de la font encara que sigui
en un sol caràcter –, &lt;code&gt;compose()&lt;/code&gt; llança un error en lloc de retornar un document
corromput.&lt;/p&gt;
&lt;p&gt;No hi ha cap camí en aquest flux de treball pel qual el model produeixi un
document TEI amb un cos de text diferent de la font. L’invariant és mecànic, no
conductual. No cal confiar que el model no al·lucini; cal confiar en una
comprovació &lt;code&gt;==&lt;/code&gt; entre dues cadenes de bytes.&lt;/p&gt;
&lt;h2 id="què-és-i-què-no-és"&gt;Què és, i què no és&lt;/h2&gt;
&lt;p&gt;La composició per intervals blocats és &lt;strong&gt;complementària&lt;/strong&gt; de l’ancoratge a
l’esquema, no el substitueix. Les eines d’ancoratge a l’esquema
(&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;, &lt;code&gt;valid_children&lt;/code&gt; i la resta de les setze
originals) ajuden el model a produir una TEI &lt;em&gt;vàlida&lt;/em&gt;. La composició per
intervals blocats garanteix que el cos del text dins d’aquesta TEI és &lt;em&gt;fidel&lt;/em&gt; a
la font. Un flux de codificació apte per al desplegament ha de satisfer tots dos
eixos, i ara un sol servidor els cobreix tots dos.&lt;/p&gt;
&lt;p&gt;Tampoc no és una vareta màgica que ho arregli tot. &lt;code&gt;compose()&lt;/code&gt; encara no
comprova que les etiquetes registrades siguin admissibles segons una
personalització ODD carregada: això vindrà més endavant. Les etiquetes
registrades viuen a la memòria del procés i no sobreviuen a un reinici. I els
fitxers font han de ser llegibles des d’allà on s’executa el servidor. Tot això
té solució; res d’això no soscava l’invariant central.&lt;/p&gt;
&lt;h2 id="per-què-importa-més-enllà-de-la-tei"&gt;Per què importa més enllà de la TEI&lt;/h2&gt;
&lt;p&gt;El patró es generalitza. Sempre que es demana a un model que anoti, transformi
o embolcalli un fragment de text – i sempre que la integritat del text subjacent
importa més que la capacitat del model per «millorar-lo» – s’hi aplica la
mateixa forma de solució. No demanis al model que torni a teclejar el text.
Demana-li que produeixi instruccions sobre el text, i deixa que un compositor
determinista les apliqui sota un invariant d’igualtat.&lt;/p&gt;
&lt;p&gt;Per a les edicions digitals en concret, això canvia el que es pot demanar
responsablement a un model. La codificació esdevé de cop una tasca que es pot
delegar sense haver de comparar manualment cada resultat amb la font. La màquina
fa el camí avorrit; l’editor revisa el marcatge, no l’ortografia.&lt;/p&gt;
&lt;h2 id="obtenir-lactualització"&gt;Obtenir l’actualització&lt;/h2&gt;
&lt;p&gt;Si ja tens tei-mcp instal·lat:&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;O bé, des de 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 fer servir la composició per intervals blocats, apunta el servidor a un
directori de fitxers font en text pla:&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;El nom de cada fitxer, sense l’extensió, esdevé l’identificador del document
(&lt;code&gt;letter_001.txt&lt;/code&gt; → &lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Codi font, documentació completa i notes de disseny de l’invariant:
&lt;/p&gt;</description></item><item><title>tei-mcp</title><link>https://clementgodbarge.com/ca/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ca/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcp-la-tei-p5-per-als-agents-dia"&gt;tei-mcp: la TEI P5 per als agents d’IA&lt;/h2&gt;
&lt;p&gt;tei-mcp és un servidor
de codi obert que dona als assistents de programació amb IA accés directe a l’especificació
. En lloc de refiar-se del que recorda de l’entrenament – cosa que sovint produeix un marcatge plausible però incorrecte –, la IA pot consultar l’especificació en temps real.&lt;/p&gt;
&lt;h2 id="funcions"&gt;Funcions&lt;/h2&gt;
&lt;p&gt;El servidor analitza l’ODD de la TEI P5 i exposa 16 eines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consultar&lt;/strong&gt; qualsevol element, classe, macro o mòdul pel nom, sense distingir majúscules i amb suggeriments en cas d’errata&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resoldre atributs&lt;/strong&gt; al llarg de tota la jerarquia de classes de la TEI (locals i heretats)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expandir models de contingut&lt;/strong&gt; en arbres estructurats, amb resolució de classes i macros&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validar la imbricació&lt;/strong&gt; – relació directa pare-fill o accessibilitat recursiva, amb seguiment del camí&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validar documents&lt;/strong&gt; segons la TEI P5: models de contingut, atributs, llistes de valors tancades, integritat de les referències i avisos d’obsolescència&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validar elements individuals&lt;/strong&gt; per a fluxos d’edició incremental&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carregar personalitzacions ODD&lt;/strong&gt; per restringir l’esquema al subconjunt propi d’un projecte&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cercar&lt;/strong&gt; en tots els tipus d’entitat amb expressions regulars&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installació"&gt;Instal·lació&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;O bé executar-lo directament amb:&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="ús"&gt;Ús&lt;/h2&gt;
&lt;p&gt;Afegeix-lo a qualsevol client compatible amb MCP (Claude, Cursor, Windsurf, etc.):&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;El codi font i la documentació són al
.&lt;/p&gt;</description></item><item><title>tei-mcp: la TEI P5 per als agents d’IA</title><link>https://clementgodbarge.com/ca/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ca/post/tei-mcp/</guid><description>&lt;p&gt;Qui hagi fet servir un assistent de programació amb IA per escriure XML TEI
probablement s’haurà adonat que s’equivoca. Apareixen elements on no toca.
S’inventen atributs. Les regles d’imbricació s’ignoren. El model té una idea
aproximada de quin aspecte té la TEI, però cap coneixement fiable de l’especificació.&lt;/p&gt;
&lt;p&gt;tei-mcp ho resol donant als agents d’IA un accés directe, mitjançant eines,
a les directrius de la TEI P5.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Index&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#què-és-mcp"&gt;Què és MCP?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#què-fa-tei-mcp"&gt;Què fa tei-mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#per-què-importa"&gt;Per què importa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#per-començar"&gt;Per començar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="què-és-mcp"&gt;Què és MCP?&lt;/h2&gt;
&lt;p&gt;El
(MCP) és un estàndard
obert que permet a les aplicacions d’IA connectar-se a fonts de dades i eines
externes. Pensa-hi com en un port USB per a la IA: un únic protocol amb què
qualsevol client compatible – Claude, Cursor, Windsurf i d’altres – pot
endollar-se a serveis especialitzats.&lt;/p&gt;
&lt;p&gt;Un servidor MCP exposa &lt;em&gt;eines&lt;/em&gt; que la IA pot invocar durant una conversa.
En lloc de refiar-se de les dades d’entrenament memoritzades, el model pot
consultar una font viva i autoritzada.&lt;/p&gt;
&lt;h2 id="què-fa-tei-mcp"&gt;Què fa tei-mcp&lt;/h2&gt;
&lt;p&gt;tei-mcp analitza l’especificació ODD de la TEI P5 i exposa 16 eines que cobreixen
les preguntes més habituals que es faria un editor o un codificador:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Què és aquest element?&lt;/strong&gt; Consulta qualsevol element, classe, macro o mòdul
pel nom, sense distingir majúscules i amb suggeriments en cas d’errata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quins atributs admet?&lt;/strong&gt; Resol els atributs al llarg de tota la jerarquia
de classes: primer els locals, després els heretats, per ordre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Què hi pot anar a dins?&lt;/strong&gt; Expandeix els models de contingut en arbres
estructurats, o obtén una llista plana de fills vàlids.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aquest element pot anar aquí?&lt;/strong&gt; Comprova la imbricació pare-fill, o traça
l’accessibilitat a través de tota la jerarquia d’elements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El meu document és vàlid?&lt;/strong&gt; Valida un fitxer XML TEI segons l’especificació:
models de contingut, valors d’atribut, llistes de valors tancades, integritat
de les referències i avisos d’obsolescència.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I l’esquema del meu projecte?&lt;/strong&gt; Carrega un fitxer de personalització ODD per
restringir tot l’anterior al subconjunt específic de la TEI que fa servir el teu projecte.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="per-què-importa"&gt;Per què importa&lt;/h2&gt;
&lt;p&gt;Codificar en TEI exigeix consultar constantment les directrius. Els codificadors
experimentats interioritzen els patrons més comuns, però fins i tot ells han de
comprovar l’especificació quan es tracta d’elements menys familiars o de models
de contingut complexos. Per als assistents d’IA, que no tenen cap coneixement
interioritzat d’aquesta mena, el problema és pitjor: al·lucinen un marcatge
d’aparença plausible però incorrecte.&lt;/p&gt;
&lt;p&gt;Amb tei-mcp, la IA no ha d’endevinar res. Pot buscar la resposta a l’especificació
abans d’escriure ni un sol parèntesi angular. El resultat és un marcatge conforme
a la TEI P5, o a la personalització ODD del teu projecte.&lt;/p&gt;
&lt;h2 id="per-començar"&gt;Per començar&lt;/h2&gt;
&lt;p&gt;Instal·la’l des de 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;Després, afegeix-lo a la configuració del teu 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;El servidor descarrega l’especificació de la TEI la primera vegada que s’executa
i funciona amb qualsevol client compatible amb MCP.&lt;/p&gt;
&lt;p&gt;Codi font i documentació completa:
&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/ca/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ca/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon-processament-xslt-en-parallel-per-a-grans-corpus-tei"&gt;Multi-Saxon: processament XSLT en paral·lel per a grans corpus TEI&lt;/h2&gt;
&lt;p&gt;Multi-Saxon cobreix un buit important en les eines de processament XML: permet executar en paral·lel transformacions XSLT 2.0 i 3.0 que LXML (una biblioteca XML molt popular en Python) no pot gestionar. Dissenyat expressament per a grans col·leccions de documents XML TEI, Multi-Saxon accelera notablement el processament gràcies a una execució paral·lela eficient.&lt;/p&gt;
&lt;h2 id="característiques-principals"&gt;Característiques principals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suport XSLT avançat&lt;/strong&gt;: processa transformacions XSLT 2.0 i 3.0 fora de l’abast de LXML&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processament en paral·lel&lt;/strong&gt;: redueix dràsticament el temps de transformació de grans col·leccions de documents gràcies a la paral·lelització&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimitzat per a TEI&lt;/strong&gt;: dissenyat específicament per a documents XML de la Text Encoding Initiative (TEI)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendiment escalable&lt;/strong&gt;: gestiona amb eficiència corpus de centenars a milers de documents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplataforma&lt;/strong&gt;: funciona en sistemes operatius i entorns diversos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="el-problema-que-resol-multi-saxon"&gt;El problema que resol Multi-Saxon&lt;/h2&gt;
&lt;p&gt;Els investigadors en humanitats digitals que treballen amb TEI topen sovint amb dos obstacles importants:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML (una biblioteca habitual de processament XML en Python) només admet XSLT 1.0, cosa que impedeix fer servir les funcions més avançades d’XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;Processar seqüencialment grans corpus de documents TEI pot ser prohibitivament lent&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxon resol tots dos problemes aprofitant les capacitats XSLT avançades de Saxon i repartint el processament entre diversos nuclis, amb guanys de rendiment considerables.&lt;/p&gt;
&lt;h2 id="implementació"&gt;Implementació&lt;/h2&gt;
&lt;p&gt;Multi-Saxon combina Python amb el processador Saxon de Java per crear un flux de transformació d’alt rendiment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fa servir la biblioteca Saxon de Java per a un processament robust d’XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;Implementa el multiprocessament per distribuir les transformacions entre els nuclis de CPU disponibles&lt;/li&gt;
&lt;li&gt;Gestiona eficientment els grups de processos per maximitzar el rendiment&lt;/li&gt;
&lt;li&gt;Ofereix una interfície senzilla per processar documents TEI per lots&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="exemple-dús"&gt;Exemple d’ús&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="impacte-per-a-les-humanitats-digitals"&gt;Impacte per a les humanitats digitals&lt;/h2&gt;
&lt;p&gt;Per als projectes d’humanitats digitals que treballen amb grans col·leccions de documents TEI, Multi-Saxon fa possible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transformacions complexes a escala de tot el corpus que serien impossibles amb LXML&lt;/li&gt;
&lt;li&gt;Temps de processament dràsticament reduïts (sovint entre 5 i 10 vegades més ràpid en sistemes multinucli)&lt;/li&gt;
&lt;li&gt;Anàlisis més sofisticades gràcies a les funcions avançades d’XSLT 2.0/3.0&lt;/li&gt;
&lt;li&gt;Un flux de treball més senzill per processar col·leccions senceres de documents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El codi font i la documentació són al
.&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/ca/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ca/code/persnamer/</guid><description>&lt;h2 id="persnamer-connectar-la-tei-amb-el-virtual-international-authority-file"&gt;persNamer: connectar la TEI amb el Virtual International Authority File&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer és una eina especialitzada en Python que facilita la integració en documents TEI XML de dades d’autoritat sobre persones procedents del VIAF (Virtual International Authority File). En convertir els identificadors VIAF en marcatge TEI a punt per fer servir, persNamer redueix notablement la feina manual que comporta crear entrades de persona estructurades per a les edicions acadèmiques digitals.&lt;/p&gt;
&lt;h2 id="el-repte-del-control-dautoritats-en-tei"&gt;El repte del control d’autoritats en TEI&lt;/h2&gt;
&lt;p&gt;Les edicions acadèmiques digitals sovint exigeixen identificar amb precisió els personatges històrics, incloent-hi els seus noms normalitzats i les dates de naixement i mort. Mantenir un control d’autoritats coherent en tot un projecte requereix:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identificar les persones en els textos històrics&lt;/li&gt;
&lt;li&gt;Trobar-ne dades d’autoritat&lt;/li&gt;
&lt;li&gt;Crear entrades TEI correctament formatades&lt;/li&gt;
&lt;li&gt;Garantir referències coherents al llarg de tot el projecte&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aquests passos solen ser manuals, lents i propensos a la incoherència.&lt;/p&gt;
&lt;h2 id="com-funciona-persnamer"&gt;Com funciona persNamer&lt;/h2&gt;
&lt;p&gt;persNamer automatitza aquest flux de treball:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obté les dades del VIAF&lt;/strong&gt;: a partir d’un identificador VIAF, l’eina recupera les dades RDF mitjançant negociació de contingut HTTP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N’extreu la informació clau&lt;/strong&gt;: analitza l’RDF per extreure’n el nom preferit, la data de naixement i la data de mort&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Genera el marcatge TEI&lt;/strong&gt;: crea dos fragments XML essencials:
&lt;ul&gt;
&lt;li&gt;Una &lt;strong&gt;entrada de fitxer d’autoritats&lt;/strong&gt; (element &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; amb un &lt;code&gt;xml:id&lt;/code&gt; generat, &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; i &lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;etiqueta d’anotació&lt;/strong&gt; a part (&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; amb un atribut &lt;code&gt;ref&lt;/code&gt; que apunta a l’entrada d’autoritat)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aquesta doble sortida permet als editors mantenir un fitxer d’autoritats centralitzat i, alhora, inserir fàcilment etiquetes d’anotació en els seus textos TEI.&lt;/p&gt;
&lt;h2 id="característiques-principals"&gt;Característiques principals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generació d’identificadors normalitzats&lt;/strong&gt;: crea identificadors XML coherents amb el format &lt;code&gt;pers-[familyname]-[givenname initial]&lt;/code&gt; (p. ex., &lt;code&gt;pers-deteligny-c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anàlisi d’RDF&lt;/strong&gt;: fa servir &lt;code&gt;rdflib&lt;/code&gt; per extreure informació de diverses propietats RDF (p. ex., &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;Interfície de línia d’ordres&lt;/strong&gt;: s’executa amb un número VIAF com a únic argument obligatori&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sortida detallada&lt;/strong&gt;: proporciona informació detallada del processament juntament amb l’XML final&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="exemple-dús"&gt;Exemple d’ús&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;Aquesta ordre produeix:&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="aplicacions-en-humanitats-digitals"&gt;Aplicacions en humanitats digitals&lt;/h2&gt;
&lt;p&gt;persNamer és especialment útil per a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edicions acadèmiques digitals que requereixen control d’autoritats&lt;/li&gt;
&lt;li&gt;Projectes de codificació TEI que treballen amb personatges històrics&lt;/li&gt;
&lt;li&gt;Iniciatives de dades enllaçades que connecten documents amb registres d’autoritat&lt;/li&gt;
&lt;li&gt;Garantir la coherència en grans corpus TEI&lt;/li&gt;
&lt;li&gt;Ensenyar els conceptes del control d’autoritats en cursos d’humanitats digitals&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementació"&gt;Implementació&lt;/h2&gt;
&lt;p&gt;persNamer està escrit en Python i depèn de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; per a les peticions HTTP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdflib&lt;/code&gt; per a l’anàlisi d’RDF&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lxml&lt;/code&gt; per a la gestió de l’XML&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El codi font i la documentació són al
.&lt;/p&gt;</description></item></channel></rss>