التحول الرقمي والمعمارية المؤسسية الأدلة التقنية

لغة ArchiMate عملياً: خدمة كاملة في أداة Archi

نشرح طبقات ArchiMate وعلاقاتها، ثم نرسم خدمة طلب كشف الدرجات في Archi ونصدرها صوراً وملف تبادل ونشاركها عبر Git.

لغة ArchiMate عملياً: خدمة كاملة في أداة Archi

في مقال معمارية المؤسسة رسمنا عرضاً صغيراً «بأسلوب» 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 محفوظة الحقوق لصالح The Open Group، ونسختها الكاملة تحتاج تسجيلاً مجانياً في موقعهم، لذلك لم ننقل منها نصاً ولا رسماً، وكل الرسوم التوضيحية هنا من إعدادنا، وكل صور Archi مأخوذة من تشغيل حقيقي للأداة على نموذج المقال.

ما هي 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 لمن يفعل، والسلوك Behavior لما يفعل، والبنية السلبية Passive Structure لما يعمل عليه، وعمود الدوافع Motivation على اليسار. والصفوف طبقات الاستراتيجية Strategy والأعمال Business والتطبيقات Application والتقنية Technology مع المادية Physical والتنفيذ والانتقال Implementation and Migration، وفي كل خانة أنواع العناصر ومثال من خدمة كشف الدرجات، وسهم يبين أن الصف يقرأ كجملة: الطالب يقدم الطلب على كشف الدرجات
كل صف يقرأ كجملة عربية: فاعل، ثم فعل، ثم ما يقع عليه الفعل

وفي الجدول أعلاه لاحظ التالي:

  • البنية الفاعلة 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. والصورة التالية تبين العلاقات في أربع مجموعات مع مثال لكل منها من النموذج:

أربع مجموعات من العلاقات. علاقات البنية Structural: Composition بمعين ممتلئ، وAggregation بمعين فارغ، وAssignment بنقطة وسهم، وRealization بخط منقط ومثلث فارغ. علاقات الاعتماد Dependency: Serving بسهم مفتوح، وAccess بخط منقط، وInfluence بخط متقطع وعلامة +، وAssociation بخط بسيط. العلاقات الديناميكية Dynamic: Triggering بسهم ممتلئ، وFlow بخط متقطع وسهم ممتلئ. وعلاقات أخرى: Specialization وJunction، ولكل علاقة مثال من خدمة كشف الدرجات
نفس العنصرين قد تربطهما علاقات مختلفة، والخط هو الذي يقول أي معنى تقصد

ولا تسمح المواصفة بأي علاقة بين أي عنصرين، فلكل نوع من العلاقات قائمة بالأزواج المسموحة، فمثلاً كائن الأعمال لا يمكن أن يكون «مسؤولاً» عن نظام، لأن الكائن السلبي لا يفعل شيئاً. وتذكر هذه القاعدة، لأننا سوف نرى بعد قليل أن 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. والصورة التالية تبين ما سوف نبنيه في بقية المقال:

أربع مراحل مرقمة: 1 ملف transcript-model.xml بصيغة Open Exchange يولده gen-model.mjs، 2 واجهة الأوامر Archi ACLI في Container مع Xvfb تستورد الملف وتخرج ملف .archimate وتقرير HTML بالصور وملف Open Exchange وملفات CSV، 3 المعماري يفتح النموذج في واجهة Archi مع coArchi ويراجعه بالمدقق Validator ثم يعمل Commit وPublish إلى Gitea، 4 Container آخر يعمل Clone للنموذج دون واجهة ويبني تقرير HTML لموقع داخلي
كل خطوة تنتج ملفاً حقيقياً، ويمكن إعادتها على أي جهاز

وأسهل طريقة لتجربة الواجهة على جهازك هي حزمة 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: في الأعلى الممثل Student الطالب تخدمه خدمة Official Transcript، ويحققها الإجراء Transcript Request الذي يضم خمس خطوات من اليمين إلى اليسار: Submit تقديم الطلب ثم Pay الدفع ثم Generate الإصدار ثم Seal and Deliver الختم والتسليم، ومن الإصدار فرع إلى Review مراجعة الاستثناء مسندة إلى عمادة القبول والتسجيل. وتحتها بالأزرق Portal وPayment Gateway وSIS وe-Seal يخدم كل منها خطوته، وتدفقات بيانات بينها، وفي الأسفل بالأخضر سيرفر الجامعة وفيه PostgreSQL وسحابة مزود الدفع
عرض الطبقات Layered View كما صدره Archi 5.10.0 في تقرير HTML، والخطوات مرتبة من اليمين إلى اليسار

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

نافذة Archi: شجرة Models على اليسار فيها مجلدات Strategy وBusiness وApplication وTechnology and Physical وMotivation وImplementation and Migration وOther وRelations وViews وتحتها العروض الخمسة، وفي الوسط محرر العرض الطبقي بنسبة تكبير 73%، وعلى اليمين لوحة الأدوات Palette بأيقونات العناصر والعلاقات، وفي الأسفل لوحة Properties وفيها Viewpoint بقيمة Layered واسم العرض
واجهة Archi: الشجرة هي النموذج، والعرض المفتوح في الوسط هو رسم واحد منه

ماذا تفعل وجهة النظر في Archi؟

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

عرض الدوافع: شكاوى الطلاب من الانتظار تؤثر بعلامة + على الهدف كشف الدرجات في أقل من يوم، والنتيجة المدة الوسيطة أقل من يوم تحقق الهدف، ومتطلبان إصدار آلي بختم إلكتروني ودفع إلكتروني ضمن الطلب يحققان النتيجة، والمتطلب الأول يحقق المبدأ البيانات من مصدرها، وفي الأسفل عنصران باهتان Payment Gateway وe-Seal لأنهما خارج وجهة نظر الدوافع
العناصر الباهتة في الأسفل ليست جزءاً من وجهة نظر الدوافع Motivation، وArchi يرسمها ولكن ينبهك

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

عرض التنفيذ والانتقال: ثلاث هضاب Plateau من اليمين As-Is الوضع الحالي ثم Quick Wins المرحلة الأولى ثم To-Be الوضع المستهدف بأسهم Triggering، وتحتها ثلاث حزم عمل Work Package: نموذج في البوابة يقرأ من نظام الطلاب يحقق المرحلة الأولى، وربط الدفع والإرسال الإلكتروني والإصدار الآلي بختم إلكتروني يحققان الوضع المستهدف، والحزمة الأخيرة تحقق المتطلب إصدار آلي بختم إلكتروني
كل حزمة عمل تحقق هضبة، وآخرها يحقق متطلباً من عرض الدوافع، فيصل المشروع بسببه

ماذا يحدث إذا كتبنا علاقة غير مسموحة؟

ذكرنا أن المواصفة تحدد الأزواج المسموحة لكل علاقة، فلنجرب العطل: أضفنا إلى نسخة من الملف علاقة 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 ظهرت النتيجة التالية:

تبويب Validator في Archi: Errors (2 items) فيها Illegal relation: Realization relation is not allowed between البيانات من مصدرها وإصدار آلي بختم إلكتروني، وIllegal relation: Assignment relation is not allowed between Transcript كشف الدرجات وSIS نظام شؤون الطلاب. ثم Warnings (6 items) فيها Unused Relation مرتين وConcept in Viewpoint لعنصري Payment Gateway وe-Seal في عرض الدوافع
المدقق وجد العلاقة التي أضفناها عمداً، ووجد خطأ آخر لم نقصده

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

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

الأسماء العربية داخل الرسوم

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

عرض اختبار العربية في Archi: صندوق الطالب بالعربية وحدها وصندوق Student بالإنجليزية وحدها يظهران صحيحين، وصندوق كتب فيه نظام SIS لشؤون الطلاب يظهر بترتيب كلمات مقلوب، وصندوق SIS نظام شؤون الطلاب يقرأ صحيحاً، واسم طويل بالعربية يلتف على سطرين بشكل صحيح ولكن في وسط الصندوق، وفي الأسفل نفس الاسم المقلوب مرة مع علامة RLM فلم يتغير، ومرة داخل علامتي RLE وPDF فظهر بترتيب صحيح مع فراغ ناقص قبل SIS
العربية وحدها تظهر صحيحة، والمشكلة في خلط العربية بالإنجليزية داخل اسم واحد

وفي الصورة أعلاه لاحظ التالي:

  • الاسم بالعربية وحدها، مثل «الطالب» أو «إصدار كشف درجات رسمي للطالب المتخرج…»، يظهر صحيحاً ويلتف على أكثر من سطر، ولكنه في وسط الصندوق، فإذا أردته على اليمين فغير محاذاة النص 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، والخطوات كما يلي:

  1. افتح النموذج، ثم اختر من قائمة Collaboration الأمر Add Local Model to Workspace and Publish.
  2. في أول مرة يطلب Archi كلمة مرور رئيسية Primary Password، وهي تشفر بيانات الدخول إلى المستودعات التي يحفظها على جهازك، فاخترها جيداً ولا تتركها فارغة.
  3. أدخل رابط المستودع الذي ينتهي بـ .git واسم المستخدم وكلمة المرور، وفي مثالنا http://ea2-gitea:3000/architect/transcript-model.git.
  4. بعد النشر ينتقل النموذج إلى مساحة العمل ~/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 كما في الصورة التالية:

نافذة Commit في coArchi: Repository باسم النموذج والفرع master، وUser Name بقيمة Architect، وUser Email بقيمة architect@example.com، وCommit message بالعربية تعديل اسم خطوة الدفع إلى الدفع الإلكتروني مكتوبة من اليمين، وخيار Amend last commit غير مفعل، وزرا Cancel وOK
رسالة الـ Commit بالعربية تظهر من اليمين بشكل صحيح في حقل النص

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

صفحة Commit في Gitea 1.27.3 للمستودع architect/transcript-model بعنوان تعديل اسم خطوة الدفع إلى الدفع الإلكتروني، والملف المتغير model/business/BusinessProcess_id-p2.xml بإضافة سطر وحذف سطر: السطر المحذوف name=Pay الدفع والسطر المضاف name=Pay الدفع الإلكتروني
كل عنصر في ملف مستقل، لذلك يظهر تغيير اسم خطوة واحدة كسطر واحد
⚠️
لا تدمج تعديلات النموذج من واجهة سيرفر Git عبر Merge أو Pull Request، فويكي coArchi يحذر صراحة من أن ذلك قد يفسد النموذج، والسبب أن coArchi يجري فحوصاً خاصة عند الدمج ليحافظ على سلامة العلاقات بين الملفات. والدمج وحل التعارضات Conflicts يكون من داخل Archi فقط.

وآخر خطوة هي ما يحتاجه أغلب الفرق فعلاً: أن يبني جهاز آخر الصور والتقرير من المستودع دون واجهة، مثل مهمة 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 مع المقال، وهي كما يلي:

الملفما فيه
DockerfileArchi 5.10.0 على Ubuntu 24.04 مع Xvfb والخطوط العربية
gen-model.mjsيكتب transcript-model.xml بالعناصر والعلاقات والعروض الخمسة ومواقعها
run-acli.shالاستيراد والحفظ والتقرير والتصدير في أمر واحد
run-clone.shClone من 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.

تدريب عملي

  1. أضف إلى عرض الطبقات Business Event باسم «Request Received استلام الطلب» قبل خطوة التقديم، واربطه بها بعلاقة Triggering، ثم شغل المدقق وتأكد أنه لا يعطي خطأ.
  2. غير نوع علاقة الوصول بين 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.
نشرة عرب رووت | ArabRoot

معرفة تستحق مكاناً في بريدك.

مقالات مختارة وأدوات مفيدة وأفكار لمشروعك القادم، في رسالة واحدة كل أسبوع.

يمكنك إلغاء الاشتراك متى شئت. الخصوصية

تم استلام طلبك. افتح بريدك واضغط رابط التأكيد لإتمام الاشتراك.