في مقال معمارية المؤسسة رسمنا عرضاً صغيراً «بأسلوب» ArchiMate، وقلنا إن الأشكال فيه مبسطة من إعدادنا وليست رموز المواصفة، وفي مقال التحول الرقمي عملياً صممنا الوضع المستهدف لخدمة طلب كشف الدرجات بلغة BPMN، ولكن رسم BPMN يجيب عن سؤال واحد فقط: ما ترتيب الخطوات؟ أما مدير التقنية فيسأل أسئلة أخرى: أي نظام يخدم كل خطوة؟ وعلى أي سيرفر يعمل؟ وما الهدف الذي يحققه هذا التغيير؟ وما المشروع الذي سيبنيه؟ وهذه الأسئلة تحتاج لغة نمذجة Modeling Language تصل الأعمال بالتطبيقات بالتقنية بالأهداف في نموذج واحد، وهذا ما تفعله لغة ArchiMate.
وفي هذا المقال سوف نتناول:
- ما هي ArchiMate، والفرق بين الإصدار 3.2 الذي تدعمه الأدوات المفتوحة والإصدار 4 الجديد.
- الطبقات Layers والجوانب Aspects، والعناصر الأساسية Core Elements التي تحتاجها في أول نموذج.
- العلاقات Relationships ومعنى كل خط، والعروض Views ووجهات النظر Viewpoints.
- تشغيل أداة Archi المفتوحة المصدر، على Windows أو Linux أو داخل Container دون واجهة رسومية.
- نمذجة خدمة طلب كشف الدرجات كاملة، وتصدير العروض صوراً وملف تبادل Open Exchange وملفات CSV.
- ماذا يحدث مع الأسماء العربية داخل الرسوم، وكيف تكتبها حتى تقرأ صحيحة.
- العمل الجماعي على النموذج عبر Git بإضافة coArchi.
ما هي ArchiMate؟
ArchiMate لغة نمذجة مفتوحة لمعمارية المؤسسة Enterprise Architecture تصدرها The Open Group، وفكرتها أن كل صندوق في الرسم له نوع محدد، وكل خط له نوع ومعنى محدد، فعندما يرسم معماري في جهة ويقرأ معماري في جهة أخرى، يفهم الاثنان نفس الشيء دون أن يشرح أحدهما للآخر ماذا قصد بالسهم المنقط. ويمكنك تشبيهها بقواعد اللغة، فالكلمات (العناصر) لا تكفي وحدها، وإنما يجب أن تعرف أي كلمة تصلح فاعلاً وأيها مفعولاً به، وما الذي يصح أن يربط بينهما.
وأحدث إصدار من اللغة هو ArchiMate 4، الذي أعلنت عنه The Open Group في أبريل 2026 كما في صفحة التحميل الرسمية، وقبله مواصفة ArchiMate 3.2 التي صدرت في 19 أكتوبر 2022 برقم C226. وقد يتساءل البعض: لماذا نشرح 3.2 إذا كان الإصدار 4 قد صدر؟ والإجابة أن الأدوات هي التي تحدد ما تستطيع رسمه فعلاً، وأداة Archi التي سوف نستخدمها تقول في صفحتها الرئيسية إنها تدعم ArchiMate 3.2، وعندما طلب أحد المستخدمين دعم الإصدار 4 في مستودع المشروع في مايو 2026، قدر مطورها الرئيسي العمل بأربعة إلى ستة أشهر لشخص واحد، ولم يضعه في خطة معلنة. لذلك فالنموذج الذي تبنيه اليوم في Archi هو نموذج 3.2، وأغلب ما في هذا المقال من طبقات وعلاقات وعروض هو الأساس الذي تحتاجه في أي إصدار.
الطبقات Layers والجوانب Aspects
تقسم ArchiMate العالم في اتجاهين: طبقات Layers من الاستراتيجية إلى التقنية، وجوانب Aspects تجيب عن ثلاثة أسئلة في كل طبقة: من يفعل؟ وماذا يفعل؟ وعلى ماذا يعمل؟ وإلى جانبها عناصر الدوافع Motivation التي تجيب عن سؤال «لماذا؟». والصورة التالية تبين الجدول كاملاً بأمثلة من نموذج هذا المقال، وقد عكسنا ترتيب الأعمدة عن رسم المواصفة حتى يقرأ من اليمين:

وفي الجدول أعلاه لاحظ التالي:
- البنية الفاعلة Active Structure: من يقوم بالعمل، مثل الممثل Business Actor أو مكون التطبيق Application Component أو العقدة Node.
- السلوك Behavior: ما يقوم به، مثل الإجراء Process والخدمة Service والحدث Event.
- البنية السلبية Passive Structure: ما يقرأ أو يكتب، مثل كائن الأعمال Business Object وكائن البيانات Data Object.
- العناصر المادية Physical، مثل المعدات Equipment والمنشأة Facility، أصبحت جزءاً من فصل التقنية في الإصدار 3.2 بعد أن كانت فصلاً مستقلاً، كما في قائمة التغييرات في صفحة المواصفة.
- طبقة التنفيذ والانتقال Implementation and Migration فيها حزمة العمل Work Package والمخرج Deliverable والهضبة Plateau، أي حالة مستقرة للمعمارية مثل «الوضع الحالي» و«الوضع المستهدف»، وهي التي تربط النموذج بخارطة الطريق.
العناصر التي تحتاجها في أول نموذج
في المواصفة عشرات العناصر، ولكنك لا تحتاجها كلها في البداية، والسبب أن أغلب النماذج الحقيقية تبنى من عدد صغير من العناصر يتكرر، وكل عنصر إضافي تستخدمه يحتاج أن يفهمه كل من يقرأ الرسم. والجدول التالي فيه العناصر التي استخدمناها في نموذج كشف الدرجات، وهي تكفي لأغلب العروض الأولى:
| الطبقة | العنصر | المثال في النموذج |
|---|---|---|
| الأعمال | Business Actor | الطالب، عمادة القبول والتسجيل |
| الأعمال | Business Service | إصدار كشف درجات رسمي |
| الأعمال | Business Process | طلب كشف الدرجات وخطواته الخمس |
| الأعمال | Business Object | كشف الدرجات |
| التطبيقات | Application Component | بوابة الخدمات، بوابة الدفع، نظام شؤون الطلاب SIS، خدمة الختم الإلكتروني |
| التطبيقات | Data Object | سجل الطالب |
| التقنية | Node، System Software | سيرفر الجامعة، PostgreSQL، سحابة مزود الدفع |
| الدوافع | Driver، Goal، Outcome، Principle، Requirement | شكاوى الانتظار، الكشف في أقل من يوم، البيانات من مصدرها |
| التنفيذ والانتقال | Plateau، Work Package | الوضع الحالي، المرحلة الأولى، الوضع المستهدف، ومشاريع كل مرحلة |
العلاقات Relationships: شكل الخط يحدد المعنى
العلاقات هي الجزء الذي يخطئ فيه أغلب من يبدأ، لأن الرسم يبدو صحيحاً مهما كان نوع الخط، ولكن المعنى يتغير كلياً، فالخط المتصل بسهم مفتوح يعني «يخدم» Serving، والخط المنقط بمثلث فارغ يعني «يحقق» Realization، والخط الذي يبدأ بنقطة يعني «مسؤول عن التنفيذ» Assignment. والصورة التالية تبين العلاقات في أربع مجموعات مع مثال لكل منها من النموذج:

ولا تسمح المواصفة بأي علاقة بين أي عنصرين، فلكل نوع من العلاقات قائمة بالأزواج المسموحة، فمثلاً كائن الأعمال لا يمكن أن يكون «مسؤولاً» عن نظام، لأن الكائن السلبي لا يفعل شيئاً. وتذكر هذه القاعدة، لأننا سوف نرى بعد قليل أن Archi لا يمنعك من كتابة علاقة غير مسموحة في كل الطرق، وإنما ينبهك إليها أداة أخرى فيه.
العروض Views ووجهات النظر Viewpoints
النموذج Model هو المستودع الذي فيه كل العناصر والعلاقات، أما العرض View فهو رسم واحد يختار جزءاً من النموذج لجمهور محدد، فالعنصر «نظام شؤون الطلاب SIS» موجود مرة واحدة في النموذج، ويظهر في عرض الطبقات وعرض تعاون التطبيقات وعرض الدوافع، وإذا غيرت اسمه تغير في كل العروض. وهذا هو الفرق الأهم بين أداة نمذجة وبين برنامج رسم مثل draw.io، ففي برنامج الرسم كل صندوق نص مستقل، ولا يعرف أن الصندوق في الصفحة الثالثة هو نفس النظام في الصفحة الأولى.
ووجهة النظر Viewpoint قالب للعرض يحدد أي أنواع العناصر مسموحة فيه ولمن يكتب، مثل وجهة نظر الطبقات Layered لمدير التقنية، ووجهة نظر تعاون التطبيقات Application Cooperation لفريق التكامل، ووجهة نظر الدوافع Motivation للإدارة. وفي نموذجنا خمسة عروض، أربعة منها بوجهات نظر من المواصفة، والخامس لاختبار الأسماء العربية كما سيأتي.
تشغيل Archi على جهازك
Archi أداة مجانية مفتوحة المصدر لنمذجة ArchiMate، ورخصتها MIT كما في مستودعها على GitHub، وآخر إصدار عند كتابة المقال هو 5.10.0 بتاريخ 3 سبتمبر 2026. وصفحة التحميل فيها الحزم التالية، ومعها ملف بقيم SHA-256 لكل حزمة:
- Windows: برنامج تثبيت Setup، أو ملف Zip محمول Portable تفك ضغطه في أي مجلد وتشغل منه
Archi.exeدون صلاحيات المدير، وهذا مناسب لأجهزة الجهات التي تمنع تثبيت البرامج. - macOS: حزمة لمعالجات Apple Silicon وأخرى لمعالجات Intel.
- Linux: ملف
Archi-Linux64-5.10.0.tgz، وفيه بيئة Java الخاصة به، فلا تحتاج تثبيت Java منفصلاً.
وإلى جانب الواجهة الرسومية، فيه واجهة أوامر ACLI، أي Archi Command Line Interface، موثقة في ويكي المشروع، وتستطيع بها استيراد نموذج وتصديره وبناء تقرير HTML دون أن تفتح الواجهة. ويذكر الويكي أن بعض المكتبات تحتاج شاشة حتى لو لم تظهر واجهة، لذلك نشغلها على Linux مع شاشة افتراضية Xvfb. والصورة التالية تبين ما سوف نبنيه في بقية المقال:

وأسهل طريقة لتجربة الواجهة على جهازك هي حزمة Windows المحمولة، أما في هذا المقال فسوف نبني Docker Image صغيراً فيه Archi وXvfb والخطوط العربية، حتى تكون كل خطوة قابلة للتكرار على أي سيرفر. والملف Dockerfile كما يلي:
# Archi 5.10.0 on Linux with a virtual display (Xvfb), for the command line (ACLI) and GUI screenshots.
# docker build -t ea2-archi:5.10.0 .
FROM ubuntu:24.04
ARG ARCHI_URL=https://github.com/archimatetool/archi.io/releases/download/5.10/Archi-Linux64-5.10.0.tgz
ARG ARCHI_SHA256=f9422455a00a22f5340dc28692ceafe0ad720c8cde839eaafb0fab1cea57287f
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl git xvfb xauth libgtk-3-0t64 fonts-noto-core fonts-dejavu-core \
xdotool imagemagick x11-utils unzip \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL -o /tmp/archi.tgz "$ARCHI_URL" \
&& echo "$ARCHI_SHA256 /tmp/archi.tgz" | sha256sum -c - \
&& tar -xzf /tmp/archi.tgz -C /opt && rm /tmp/archi.tgz
ENV PATH="/opt/Archi:${PATH}"
WORKDIR /workفي الملف أعلاه لاحظ التالي:
- قيمة
ARCHI_SHA256منسوخة من ملف القيم الرسميArchi-5.10.0-SHA256.txt، والأمرsha256sum -cيوقف البناء إذا تغير الملف المحمل. - الحزمة
fonts-noto-coreفيها خطوط Noto العربية، ودونها تظهر الحروف العربية في الصور مربعات فارغة. - الأدوات
xdotoolوimagemagickللتحكم بالواجهة وأخذ لقطات الشاشة فقط، ولا تحتاجها إذا كنت ستستخدم واجهة الأوامر وحدها.
ثم نبني الـ Image:
docker build -t ea2-archi:5.10.0 .نمذجة خدمة طلب كشف الدرجات
الطريقة المعتادة هي أن تفتح Archi وتسحب العناصر من لوحة الأدوات Palette إلى العرض، وهذا ما ستفعله في أغلب عملك. ولكننا هنا بدأنا من ملف نصي بصيغة ملف التبادل Open Exchange، وهي صيغة XML من The Open Group لنقل نماذج ArchiMate بين الأدوات، والسبب أن الملف النصي يراجع في Git ويعاد توليده، ويثبت لك أن النموذج ليس محبوساً في أداة واحدة. وولدنا الملف بسكربت gen-model.mjs في مجلد lab مع المقال، وفيه 38 عنصراً و42 علاقة وخمسة عروض. والجزء التالي من الملف يبين شكل العنصر والعلاقة والعرض:
<model xmlns="http://www.opengroup.org/xsd/archimate/3.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
identifier="id-transcript-model">
<name xml:lang="ar">Transcript Service خدمة طلب كشف الدرجات</name>
<elements>
<element identifier="id-p2" xsi:type="BusinessProcess"><name xml:lang="ar">Pay الدفع</name></element>
<element identifier="id-pay" xsi:type="ApplicationComponent"><name xml:lang="ar">Payment Gateway بوابة الدفع</name></element>
</elements>
<relationships>
<relationship identifier="id-r-21" xsi:type="Serving" source="id-pay" target="id-p2"></relationship>
</relationships>
<views>
<diagrams>
<view identifier="id-v1" xsi:type="Diagram" viewpoint="Layered">
<name xml:lang="ar">1 Layered View العرض الطبقي</name>
<node identifier="id-v1-pay" elementRef="id-pay" xsi:type="Element" x="720" y="500" w="230" h="62"></node>
</view>
</diagrams>
</views>
</model>لاحظ أن العنصر يعرف مرة واحدة في قسم elements، والعرض يشير إليه بـ elementRef مع موقعه وحجمه فقط، وهذا هو الفصل بين النموذج والعرض الذي ذكرناه. ولاحظ أيضاً أن الأسماء تبدأ بالكلمة الإنجليزية، والسبب في ذلك سوف يأتي في فقرة الأسماء العربية.
الآن نشغل واجهة الأوامر على الملف، والسكربت run-acli.sh يستورد الملف ويحفظ النموذج ويخرج كل الصيغ في أمر واحد:
#!/bin/sh
# Runs inside the ea2-archi image: imports the exchange file, saves the Archi model and writes every export.
set -e
rm -rf /work/out/report /work/out/csv
xvfb-run -a Archi -application com.archimatetool.commandline.app -consoleLog -nosplash \
--xmlexchange.import /work/transcript-model.xml \
--saveModel /work/out/transcript.archimate \
--html.createReport /work/out/report \
--xmlexchange.export /work/out/transcript-exchange.xml \
--csv.export /work/out/csvونشغله من Git Bash على Windows كما يلي، والمتغير MSYS_NO_PATHCONV يمنع Git Bash من تحويل المسارات التي تبدأ بشرطة مائلة، وpwd -W يعطي مسار المجلد بصيغة Windows التي يفهمها Docker Desktop:
export MSYS_NO_PATHCONV=1
docker run --rm --name ea2-archi-cli -e LANG=C.UTF-8 -v "$(pwd -W)":/work ea2-archi:5.10.0 sh /work/run-acli.shوالمخرج سوف يكون كما يلي، بعد حذف سطرين من تحذيرات GTK عن مدير الجلسات لا يؤثران على النتيجة:
[XML Exchange] Validating...
[XML Exchange] Validated!
[XML Exchange] Importing XML from /work/transcript-model.xml
[XML Exchange] XML Imported!
[CSV] Exporting csv from 'Transcript Service خدمة طلب كشف الدرجات' to /work/out/csv
[CSV] CSV Exported!
[HTMLReport] Creating report from 'Transcript Service خدمة طلب كشف الدرجات' to /work/out/report
[HTMLReport] Copying files...
[HTMLReport] Copying hints...
[HTMLReport] Creating files...
[HTMLReport] Generating image for View 1 of 5
[HTMLReport] Generating image for View 2 of 5
[HTMLReport] Generating image for View 3 of 5
[HTMLReport] Generating image for View 4 of 5
[HTMLReport] Generating image for View 5 of 5
[HTMLReport] Creating files...
[HTMLReport] Finalising...
[HTMLReport] Report generated!
[XML Exchange] Exporting from 'Transcript Service خدمة طلب كشف الدرجات' to /work/out/transcript-exchange.xml
[XML Exchange] XML Exported!
[XML Exchange] Validating...
[XML Exchange] Validated!
[Core] Saved model to '/work/out/transcript.archimate'وفي المخرج أعلاه لاحظ التالي:
- الأوامر لا تنفذ بالترتيب الذي كتبتها به، وإنما بأولوية كل مزود Provider كما يذكر الويكي: التحميل أولاً، ثم الاستيراد، ثم التقارير والتصدير، ثم الحفظ في النهاية، لذلك ظهر الحفظ في آخر سطر.
- الأداة تتحقق من الملف مقابل مخطط XSD الرسمي قبل الاستيراد وبعد التصدير (Validated)، فإذا كان الملف لا يطابق الصيغة يتوقف الأمر هنا.
- تقرير HTML يرسم صورة PNG لكل عرض، وهذه هي الطريقة التي أخرجنا بها صور العروض في هذا المقال دون واجهة رسومية، والتشغيل كاملاً استغرق حوالي دقيقة.
- إذا شغلت الأمر دون
-e LANG=C.UTF-8فسوف تظهر الأسماء العربية في هذا المخرج علامات استفهام، مع أن الملفات نفسها تحفظ صحيحة، والسبب أن ترميز الطرفية الافتراضي في الـ Container ليس UTF-8.
والصورة التالية هي عرض الطبقات كما رسمه Archi في التقرير، ومن الأعلى إلى الأسفل: الطالب والخدمة التي يستفيد منها، ثم إجراء الطلب بخطواته الخمس، ثم الأنظمة التي تخدم كل خطوة، ثم السيرفرات:

وفي العرض أعلاه لاحظ أن الخطوات مرتبة من اليمين إلى اليسار، وهذا ترتيب يدوي بالإحداثيات، لأن Archi لا يملك خياراً يقلب اتجاه الرسم إلى اليمين، فمكان كل صندوق تحدده أنت. والصورة التالية هي نفس النموذج في الواجهة الرسومية، ومعه شجرة النموذج على اليسار، ولوحة الخصائص Properties في الأسفل حيث تظهر وجهة النظر Layered المختارة للعرض:

ماذا تفعل وجهة النظر في Archi؟
عندما تختار وجهة نظر لعرض، لا يحذف Archi العناصر التي لا تسمح بها، وإنما يرسمها باهتة Ghosted، حتى تعرف أنها خارج القالب. وفي عرض الدوافع Motivation وضعنا عمداً نظامين من طبقة التطبيقات، لأننا أردنا أن نبين أي نظام يحقق كل متطلب، والصورة التالية تبين النتيجة:

وهذا سلوك مفيد، فإذا كان العرض لمجلس الإدارة فالأفضل أن تحذفهما وتلتزم بالقالب، وإذا كان لفريق المعمارية فقد ترى أن الربط يستحق الخروج عنه، والمهم أن يكون القرار مقصوداً. وعرض التنفيذ والانتقال في الصورة التالية يربط النموذج بخارطة الطريق التي بنيناها في مقال التحول الرقمي عملياً:

ماذا يحدث إذا كتبنا علاقة غير مسموحة؟
ذكرنا أن المواصفة تحدد الأزواج المسموحة لكل علاقة، فلنجرب العطل: أضفنا إلى نسخة من الملف علاقة Assignment من كائن الأعمال «كشف الدرجات» إلى نظام SIS، وهي علاقة لا معنى لها، ثم استوردناها بنفس الطريقة:
<relationship identifier="id-bad-1" xsi:type="Assignment" source="id-bo" target="id-sis"/>والمخرج سوف يكون كما يلي:
[XML Exchange] Validating...
[XML Exchange] Validated!
[XML Exchange] Importing XML from /work/out/bad-model.xml
[XML Exchange] XML Imported!
[Core] Saved model to '/work/out/bad.archimate'
exit code: 0أي أن الاستيراد نجح دون أي تحذير، والسبب أن التحقق Validated هنا يفحص صيغة الملف مقابل مخطط XSD فقط، أي أن الوسوم صحيحة وأن نوع العلاقة موجود، ولا يفحص قواعد اللغة. والذي يفحص قواعد اللغة في Archi هو المدقق Validator، ولما فتحنا النموذج في الواجهة وشغلناه من تبويب Validator ظهرت النتيجة التالية:

والمفاجأة في الصورة أعلاه هي الخطأ الأول، فهو ليس العلاقة التي أضفناها، وإنما خطأ حقيقي في نموذجنا الأصلي: كتبنا أن المبدأ «البيانات من مصدرها» يحقق Realization المتطلب «إصدار آلي بختم إلكتروني»، والمسموح في المواصفة هو العكس، أي أن المتطلب هو الذي يحقق المبدأ، لأن المتطلب أكثر تحديداً من المبدأ. ولم ينبهنا الاستيراد إلى ذلك، كما لم ينبهنا إلى العلاقة المقصودة. فعدلنا اتجاه العلاقة في السكربت، وأعدنا البناء، وشغلنا المدقق مرة أخرى على النموذج الصحيح، فكانت النتيجة صفر أخطاء وخمسة تحذيرات: علاقة واحدة غير مستخدمة في أي عرض، والعنصران خارج وجهة نظر الدوافع، وتكرار اسم «SIS نظام شؤون الطلاب» بين عنصر النموذج وعنصر الاختبار الذي سيأتي ذكره.
والقاعدة من هذه التجربة: لا تعتمد على نجاح الاستيراد أو على شكل الرسم، وشغل المدقق قبل كل مشاركة للنموذج، والسبب أن الخطأ في العلاقة لا يظهر في الرسم أبداً، فالخط المنقط بمثلث فارغ يبدو صحيحاً في الاتجاهين.
الأسماء العربية داخل الرسوم
هل يرسم Archi الحروف العربية؟ نعم، فالحروف متصلة بشكل صحيح في الواجهة وفي الصور المصدرة، بشرط وجود خط عربي على الجهاز. ولكن المشكلة في اتجاه السطر، فعندما يجتمع في الاسم كلام عربي وكلمة إنجليزية، يرتب Archi أجزاء الاسم من اليسار إلى اليمين. لذلك أضفنا عرضاً خامساً فيه نفس الكلمات بترتيبات مختلفة، والصورة التالية تبين النتيجة:

وفي الصورة أعلاه لاحظ التالي:
- الاسم بالعربية وحدها، مثل «الطالب» أو «إصدار كشف درجات رسمي للطالب المتخرج…»، يظهر صحيحاً ويلتف على أكثر من سطر، ولكنه في وسط الصندوق، فإذا أردته على اليمين فغير محاذاة النص Text Alignment من تبويب Appearance في لوحة الخصائص.
- الاسم «نظام SIS لشؤون الطلاب» ظهر بترتيب يقرؤه العربي «لشؤون الطلاب SIS نظام»، لأن Archi يبني السطر من اليسار، فيضع الجزء العربي الأول يساراً ثم SIS ثم الجزء العربي الثاني.
- الاسم «SIS نظام شؤون الطلاب» يقرؤه العربي صحيحاً «نظام شؤون الطلاب SIS»، لأن الكلمة الإنجليزية في أول السطر تقع يساراً، والجزء العربي كله على يمينها.
- إضافة علامة الاتجاه RLM، أي U+200F، في أول الاسم لم تغير شيئاً، أما وضع الاسم كله بين علامتي التضمين RLE وPDF، أي U+202B وU+202C، فأظهره بالترتيب الصحيح، ولكن مع فراغ ناقص قبل الكلمة الإنجليزية، كما أن هذه العلامات لا ترى، فيصعب على من يعدل الاسم بعدك أن يعرف لماذا يتصرف الاسم بهذا الشكل.
لذلك فالقاعدة العملية في Archi: اكتب الاسم بالعربية وحدها، أو ضع المصطلح الإنجليزي في أول الاسم ثم الوصف العربي، مثل «Payment Gateway بوابة الدفع»، ولا تضع كلمة إنجليزية في وسط جملة عربية. وهذه هي الطريقة التي كتبنا بها أسماء النموذج كله، والسكربت gen-model.mjs ينقل الكلمة الإنجليزية إلى أول الاسم آلياً. وانتبه أيضاً لعرض الصندوق، فإذا التف الاسم المختلط على سطرين ينقسم الجزء العربي بين السطرين، ويصبح ترتيب القراءة غريباً، لذلك وسعنا صناديق مثل «Payment Gateway بوابة الدفع» حتى يكون الاسم في سطر واحد.
وجربنا هذا على نسخة Linux، حيث يرسم Archi النص عبر مكتبة GTK، ولم نشغل نسخة Windows، لذلك إذا كانت فرقتك تعمل على Windows فجرب نفس العرض الخامس قبل أن تعتمد القاعدة. أما حقول النص في الواجهة، مثل خانة رسالة الـ Commit التي سوف تراها بعد قليل، فتظهر الجملة العربية من اليمين بشكل صحيح.
التصدير: صور وملف تبادل وCSV
الأمر الذي شغلناه أخرج أربعة أنواع من الملفات، ولكل منها استخدام مختلف:
| الملف | ماذا فيه | متى تستخدمه |
|---|---|---|
transcript.archimate | النموذج بصيغة Archi الأصلية، 26 كيلوبايت | للعمل اليومي في Archi |
report/ | موقع HTML ثابت فيه صفحة لكل عنصر وصورة PNG لكل عرض، 2.7 ميجابايت | لمن لا يملك Archi: تضعه على سيرفر داخلي ويتصفحه الجميع |
transcript-exchange.xml | النموذج بصيغة Open Exchange، 42 كيلوبايت | للنقل إلى أداة أخرى، أو للأرشفة بصيغة لا تتبع مورداً واحداً |
csv/ | ثلاثة ملفات: العناصر والعلاقات والخصائص | للتحليل في Excel أو لاستيراد قائمة الأنظمة إلى سجل المحفظة |
ولنتأكد أن ملف التبادل لا يفقد شيئاً، استوردنا الملف المصدر نفسه في نموذج جديد وصدرناه CSV مرة أخرى، فخرجت نفس الأعداد: 38 عنصراً و42 علاقة. ولكن انتبه إلى ملاحظتين ظهرتا في الملف المصدر: الأولى أن الأسماء خرجت دون الوسم xml:lang="ar" الذي كتبناه في الملف الأصلي، فإذا كانت الأداة التي ستستقبل الملف تعتمد على لغة الاسم فأضف الخيار --xmlexchange.exportLang ar. والثانية أن علاقات الوصول Access التي لم نحدد نوعها خرجت بنوع Write، كما يظهر في ملف الخصائص:
"ID","Key","Value"
"id-r-1","Influence_Strength","+"
"id-r-19","Access_Type","Write"
"id-r-27","Access_Type","Write"أي أن الأداة افترضت أن الخطوة تكتب في الكائن، فإذا كانت تقرأ منه فحدد ذلك صراحة، لأن الفرق بين «يقرأ» و«يكتب» هو الذي يجيب عن سؤال «من يتأثر إذا تغير هذا الكائن؟».
العمل الجماعي عبر Git بإضافة coArchi
ملف .archimate ملف XML واحد، فإذا عدله معماريان في نفس الوقت فسوف يلغي أحدهما عمل الآخر عند الحفظ، ولو وضعته في Git كما هو فكل تعديل صغير يظهر كتغيير في ملف كبير يصعب دمجه. والحل الذي يقدمه فريق Archi هو إضافة coArchi، وهي بحسب صفحة الإضافات مجانية التحميل، وآخر إصدار منها 0.9.7 بتاريخ 25 أغسطس 2026، وتحتاج Archi 4.9 أو أحدث. وفكرتها كما في شرح الأساسيات أن لكل نموذج مستودع Git خاص به، وأن النموذج يحفظ فيه كملفات XML صغيرة، ملف لكل عنصر وعلاقة وعرض.
وتوجد نسخة جديدة اسمها coArchi2 أسرع وفيها ميزات أكثر، ولكنها في الصفحة نفسها ما زالت في مرحلة الوصول المبكر للداعمين على Patreon، لذلك استخدمنا الإصدار 0.9.7 المتاح للجميع. وكذلك إضافة البرمجة jArchi، فكودها مفتوح، ولكن النسخة الجاهزة منها للداعمين فقط.
وسوف نحتاج سيرفر Git، واستخدمنا Gitea الذي شرحنا تثبيته في دليل مستقل، وشغلناه هنا بأقل إعداد ممكن للتجربة، مع جعل اسم الفرع الافتراضي master، لأن الويكي يذكر أن coArchi يتوقع هذا الاسم ولا يدعم main بعد:
docker network create ea2-net
docker run -d --name ea2-gitea --network ea2-net -p 44300:3000 \
-e GITEA__security__INSTALL_LOCK=true -e GITEA__database__DB_TYPE=sqlite3 \
-e GITEA__server__ROOT_URL=http://ea2-gitea:3000/ -e GITEA__repository__DEFAULT_BRANCH=master \
-v ea2-gitea-data:/data gitea/gitea:1.27.3ثم أنشأنا مستخدماً بكلمة مرور مولدة ومستودعاً فارغاً عبر واجهة Gitea البرمجية API:
PW=$(openssl rand -hex 12)
docker exec -u git ea2-gitea gitea admin user create --username architect --password "$PW" \
--email [email protected] --admin --must-change-password=false
curl -s -u architect:$PW -H 'Content-Type: application/json' \
-d '{"name":"transcript-model","default_branch":"master","private":true}' \
http://localhost:44300/api/v1/user/reposوتثبيت coArchi في الواجهة يكون من قائمة Help ثم Manage Plug-ins، أو بفك ملف coArchi_0.9.7.archiplugin في مجلد ~/.archi/dropins، وهو ما فعلناه داخل الـ Container. وبعد إعادة تشغيل Archi تظهر قائمة جديدة اسمها Collaboration، والخطوات كما يلي:
- افتح النموذج، ثم اختر من قائمة Collaboration الأمر Add Local Model to Workspace and Publish.
- في أول مرة يطلب Archi كلمة مرور رئيسية Primary Password، وهي تشفر بيانات الدخول إلى المستودعات التي يحفظها على جهازك، فاخترها جيداً ولا تتركها فارغة.
- أدخل رابط المستودع الذي ينتهي بـ
.gitواسم المستخدم وكلمة المرور، وفي مثالناhttp://ea2-gitea:3000/architect/transcript-model.git. - بعد النشر ينتقل النموذج إلى مساحة العمل
~/Documents/Archi/model-repository/transcript-model، وأي تعديل بعد ذلك تحفظه ثم تختار Commit Changes ثم Publish Changes.
وبعد الخطوة الثالثة وصل إلى Gitea أول Commit باسم «First Commit» وفيه 95 ملفاً، منها ملف لكل عرض في model/diagrams وملف لكل علاقة في model/relations، مثل ServingRelationship_id-r-21.xml. ثم غيرنا اسم خطوة الدفع من «Pay الدفع» إلى «Pay الدفع الإلكتروني» وحفظنا، فطلب Archi اسم المعماري وبريده ورسالة الـ Commit كما في الصورة التالية:

وبعد Publish Changes ظهر التعديل في Gitea كما في الصورة التالية، والفرق سطر واحد في ملف واحد، وهذا هو المكسب الحقيقي من تقسيم النموذج إلى ملفات صغيرة: المراجع يرى بالضبط ما تغير، ومن غيره، ومتى:

وآخر خطوة هي ما يحتاجه أغلب الفرق فعلاً: أن يبني جهاز آخر الصور والتقرير من المستودع دون واجهة، مثل مهمة CI تنشر التقرير على موقع داخلي بعد كل Publish. ولأن coArchi يضيف خيارات إلى واجهة الأوامر، فالأمر التالي يعمل Clone للنموذج ثم يبني التقرير:
#!/bin/sh
# Second architect: clone the coArchi model from Gitea headlessly and build an HTML report from it.
set -e
mkdir -p /root/.archi/dropins && cd /root/.archi/dropins && unzip -q -o /plugins/coArchi_0.9.7.archiplugin
rm -rf /work/out/clone /work/out/clone-report
xvfb-run -a Archi -application com.archimatetool.commandline.app -consoleLog -nosplash \
--modelrepository.cloneModel http://ea2-gitea:3000/architect/transcript-model.git \
--modelrepository.loadModel /work/out/clone \
--modelrepository.userName architect \
--modelrepository.passFile /plugins/pass.txt \
--html.createReport /work/out/clone-reportوالمخرج سوف يكون كما يلي، بعد حذف تحذير من مكتبة JGit عن دقة توقيت الملفات على قرص Windows المشترك مع الـ Container:
[LoadModelFromRepositoryProvider] Cloning from http://ea2-gitea:3000/architect/transcript-model.git to /work/out/clone
[LoadModelFromRepositoryProvider] Model cloned!
[LoadModelFromRepositoryProvider] Loading model at /work/out/clone
[LoadModelFromRepositoryProvider] Loaded model: 'Transcript Service خدمة طلب كشف الدرجات'
[HTMLReport] Creating report from 'Transcript Service خدمة طلب كشف الدرجات' to /work/out/clone-report
[HTMLReport] Copying files...
[HTMLReport] Copying hints...
[HTMLReport] Creating files...
[HTMLReport] Generating image for View 1 of 5
[HTMLReport] Generating image for View 2 of 5
[HTMLReport] Generating image for View 3 of 5
[HTMLReport] Generating image for View 4 of 5
[HTMLReport] Generating image for View 5 of 5
[HTMLReport] Creating files...
[HTMLReport] Finalising...
[HTMLReport] Report generated!ولاحظ أن كلمة المرور تمرر في ملف عبر --modelrepository.passFile وليس في سطر الأمر، حتى لا تظهر في سجل الأوامر أو في قائمة العمليات، وفي مهمة CI تضعها في ملف من مخزن الأسرار Secrets ثم تحذفه بعد التشغيل. والنسخة المستنسخة فيها اسم الخطوة الجديد «Pay الدفع الإلكتروني»، أي أن التقرير يبنى دائماً من آخر نسخة منشورة.
ملفات المثال
كل ملفات المثال في مجلد lab مع المقال، وهي كما يلي:
| الملف | ما فيه |
|---|---|
Dockerfile | Archi 5.10.0 على Ubuntu 24.04 مع Xvfb والخطوط العربية |
gen-model.mjs | يكتب transcript-model.xml بالعناصر والعلاقات والعروض الخمسة ومواقعها |
run-acli.sh | الاستيراد والحفظ والتقرير والتصدير في أمر واحد |
run-clone.sh | Clone من Gitea دون واجهة وبناء التقرير |
out/ | النموذج والملفات المصدرة ومخرجات كل تشغيل كما خرجت |
وبعد الانتهاء نحذف ما أنشأناه بالاسم فقط:
docker rm -f ea2-gitea ea2-archi-gui
docker volume rm ea2-gitea-data
docker network rm ea2-net
docker rmi ea2-archi:5.10.0أخطاء شائعة
- الرسم بأشكال حرة بدل عناصر النموذج: إذا استخدمت الملاحظة Note أو الشكل الحر لتمثيل نظام، فلن يظهر في الشجرة ولا في التقارير ولا في المدقق، ويعود النموذج رسماً فقط.
- عنصر مكرر بنفس الاسم: سحب عنصر جديد بدل سحب العنصر الموجود من الشجرة يصنع نسختين من نفس النظام، وعلاقات كل نسخة لا تظهر مع الأخرى، والمدقق ينبهك بتحذير Possible duplicate.
- الوثوق بنجاح الاستيراد: كما رأينا، الاستيراد يقبل علاقة غير مسموحة، فشغل المدقق بعد كل استيراد وقبل كل نشر.
- عرض واحد ضخم لكل شيء: العرض الذي فيه مئة عنصر لا يقرؤه أحد، واجعل لكل جمهور عرضاً بوجهة نظر تناسبه.
- خلط العربية بالإنجليزية في وسط الاسم: يظهر بترتيب مقلوب، فضع المصطلح الإنجليزي أولاً أو اكتب الاسم بالعربية وحدها.
- الدمج من واجهة سيرفر Git: يفسد نموذج coArchi، والدمج يكون من داخل Archi.
تدريب عملي
- أضف إلى عرض الطبقات Business Event باسم «Request Received استلام الطلب» قبل خطوة التقديم، واربطه بها بعلاقة Triggering، ثم شغل المدقق وتأكد أنه لا يعطي خطأ.
- غير نوع علاقة الوصول بين SIS وسجل الطالب إلى Read في لوحة الخصائص، ثم صدر CSV وابحث عن السطر الذي تغير في
properties.csv.
الخلاصة
- ArchiMate لغة لكل صندوق فيها نوع ولكل خط معنى، وأحدث إصداراتها 4 في أبريل 2026، أما Archi 5.10.0 فيدعم 3.2 ولا توجد خطة معلنة للإصدار 4.
- الطبقات من الاستراتيجية إلى التقنية، والجوانب تجيب في كل طبقة عن: من؟ يفعل ماذا؟ على ماذا؟، والدوافع تجيب عن: لماذا؟
- النموذج واحد والعروض كثيرة، ووجهة النظر تحدد ما يظهر في كل عرض ولمن، وArchi يرسم ما يخرج عنها باهتاً.
- واجهة الأوامر ACLI تستورد وتصدر وتبني تقرير HTML بالصور دون واجهة، فتصلح لسيرفر أو لمهمة CI.
- الاستيراد لا يفحص قواعد اللغة، والمدقق Validator هو الذي وجد علاقة مقصودة خاطئة وعلاقة أخرى أخطأنا فيها فعلاً.
- الأسماء العربية تظهر صحيحة وحدها، ومع الإنجليزية ضع المصطلح الإنجليزي في أول الاسم.
- coArchi يحفظ النموذج في Git ملفاً لكل عنصر، فيظهر كل تغيير صغير كسطر واحد، والدمج من داخل Archi فقط.
وفي المقال التالي من هذه المرحلة نقارن أدوات معمارية المؤسسة الأخرى، المفتوحة والتجارية، ومتى تكفيك أداة نمذجة مثل Archi ومتى تحتاج مستودعاً أو أداة لإدارة المحفظة.
سجل التحديثات
- أكتوبر 2026: كتابة المقال واختباره على Archi 5.10.0 في Container مبني على Ubuntu 24.04، مع إضافة coArchi 0.9.7 وGitea 1.27.3، ومراجعة صفحات ArchiMate 3.2 و4 من The Open Group وصفحات التحميل والإضافات في موقع Archi.