<?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/ar/tag/tei/</link><atom:link href="https://clementgodbarge.com/ar/tag/tei/index.xml" rel="self" type="application/rss+xml"/><description>TEI</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ar</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/ar/tag/tei/</link></image><item><title>tei-mcp v0.3: ترميز TEI من غير أن يُمَسّ المصدر</title><link>https://clementgodbarge.com/ar/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;حين
، كان المراد أن نكفّ مساعدي الذكاء الاصطناعي عن هلوسة ترميز TEI. وقد حلّ التأسيس على المخطط (schema grounding) شطرًا من المشكلة: فمع الوصول المباشر، عبر الأدوات، إلى مواصفة P5، لم يعد النموذج مضطرًّا إلى تخمين معنى عنصر أو السمات التي يقبلها، وصارت مخرجاته تجتاز التحقق.&lt;/p&gt;
&lt;p&gt;على أن للهلوسة في ترميز TEI وجهين، والمخطط لا يمسك إلا بأحدهما. فالتحقق وفق المواصفة يخبركم بأن &lt;em&gt;الترميز&lt;/em&gt; حسن التكوين، ولا يقول حرفًا عن &lt;em&gt;النص&lt;/em&gt; الذي يغلّفه ذلك الترميز. وفي النص نفسه تكمن الهلوسات الأشد ضررًا. والتركيب المقفل بالمدى، وهو أبرز ما في الإصدار 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;اطلبوا من نموذج أن يرمّز رسالة فرنسية من القرن السادس عشر، فسيعود إليكم في الغالب بوثيقة 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 يخالف متنها المصدر. فالثابت (invariant) ميكانيكي لا سلوكي: لستم مطالبين بأن تثقوا في أن النموذج لن يهلوس، بل بأن تثقوا في فحص &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; وسائر الأدوات الست عشرة الأصلية) تعين النموذج على إخراج TEI &lt;em&gt;صحيح&lt;/em&gt;؛ أما التركيب المقفل بالمدى فيضمن أن نص المتن داخل ذلك الـ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/ar/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/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;يحلّل الخادم ملف ODD الخاص بـTEI P5 ويتيح 16 أداة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;البحث&lt;/strong&gt; عن أي عنصر أو صنف أو ماكرو أو وحدة (module) بالاسم، مع مطابقة لا تفرّق بين حالتي الأحرف واقتراحات لتصويب الأخطاء الإملائية&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: نماذج المحتوى، والسمات، وقوائم القيم المغلقة، وسلامة الإحالات، وتحذيرات الإهمال (deprecation)&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/ar/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/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; ابحثوا عن أي عنصر أو صنف أو ماكرو أو وحدة (module) بالاسم، بمطابقة لا تفرّق بين حالتي الأحرف، مع اقتراحات لتصويب الأخطاء الإملائية.&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 وفق المواصفة: نماذج المحتوى، وقيم السمات، وقوائم القيم المغلقة، وسلامة الإحالات، وتحذيرات الإهمال (deprecation).&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/ar/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/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 (مكتبة XML الشائعة في Python). وقد صُمّم خصيصًا للمجموعات الكبيرة من وثائق XML TEI، فيختصر زمن المعالجة اختصارًا كبيرًا بفضل تنفيذ متوازٍ ناجع.&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 الصادرة عن مبادرة ترميز النصوص (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 (المكتبة الشائعة لمعالجة XML في Python) سوى 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 العقبتين معًا: إذ يستثمر قدرات Saxon المتقدمة في XSLT، ويوزّع المعالجة على أنوية عدة، فيكسب في الأداء كسبًا كبيرًا.&lt;/p&gt;
&lt;h2 id="التنفيذ"&gt;التنفيذ&lt;/h2&gt;
&lt;p&gt;يزاوج Multi-Saxon بين Python ومعالج Saxon المكتوب بلغة Java ليبني خط تحويل عالي الأداء:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;يستخدم مكتبة Saxon الخاصة بـJava لمعالجة XSLT 2.0/3.0 معالجة متينة&lt;/li&gt;
&lt;li&gt;يعتمد المعالجة المتعددة (multiprocessing) لتوزيع التحويلات على ما يتاح من أنوية المعالج&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;يتيح Multi-Saxon لمشاريع الإنسانيات الرقمية التي تعالج مجموعات كبيرة من وثائق TEI:&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/ar/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/ar/code/persnamer/</guid><description>&lt;h2 id="persnamer-وصل-tei-بالملف-الاستنادي-الدولي-الافتراضي"&gt;persNamer: وصل TEI بالملف الاستنادي الدولي الافتراضي&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer أداة متخصصة بلغة Python تيسّر إدماج بيانات الأشخاص الاستنادية من VIAF (الملف الاستنادي الدولي الافتراضي) في وثائق TEI XML. فهي تحوّل معرّفات VIAF إلى ترميز TEI جاهز للاستعمال، وتوفّر بذلك على المحقّق قسطًا كبيرًا من العمل اليدوي الذي يقتضيه إنشاء مداخل أشخاص مهيكلة في الطبعات العلمية الرقمية.&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>