مخطط تسلسلي
يمكن لـ Mermaid تصيير مخططات التسلسل. ومخطط التسلسل مخطط تفاعلي يعرض كيفية تفاعل العمليات مع بعضها وترتيب العمليات.
نسخ
تضمين
sequenceDiagram
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
Alice-)John: See you later!
ملاحظة حول العقد: نظرًا لطريقة كتابة لغة Mermaid، فإن كلمة "end" تُفسد المخطط بأكمله. وإذا كان لا بد من استخدام "end"، فتحتاج إلى إحاطتها بالأقواس الهلالية () أو علامتي الاقتباس المزدوجتين "" أو الأقواس المعقوصة {} أو الأقواس المربعة []، أي: (end) أو [end] أو {end}.
الصيغة
المشارك
تُعرض المشاركون وفق ترتيب ظهورهم في النص المصدر للمخطط. وأحيانًا قد ترغب في عرض المشاركين بترتيب مختلف عن ترتيب ظهورهم في الرسالة الأولى، ويمكن تحديد ترتيب ظهور المشاركين بالطريقة التالية:
نسخ
تضمين
sequenceDiagram
participant Alice
participant Bob
Bob->>Alice: Hi Alice
Alice->>Bob: Hi Bob
角色
إذا أردت استخدام رمز الدور بدلًا من مستطيل يحتوي على نص، فيمكن تحقيق ذلك باستخدام عبارة الدور، كما يلي.
نسخ
تضمين
sequenceDiagram
actor Alice
actor Bob
Alice->>Bob: Hi Bob
Bob->>Alice: Hi Alice
الاسم البديل
يمكنك تعريف اسم بديل باستخدام as بعد الإعلان عن المشارك
نسخ
تضمين
sequenceDiagram
participant A as Alice
participant J as John
A->>J: Hello John, how are you?
J->>A: Great!
إنشاء المشارك وتدميره
يمكن إنشاء المشاركين وتدميرهم عبر الرسائل. لذا، أضف تعليمة الإنشاء أو التدمير قبل الرسالة.
نسخ
تضمين
participant B
A --> B: Hello
تدعم تعليمة الإنشاء التمييز بين المشارك والاسم البديل. ويمكن تدمير مُرسِل الرسالة أو مُستقبِلها، لكن يمكن إنشاء المُستقبِل فقط.
نسخ
تضمين
sequenceDiagram
Alice->>Bob: Hello Bob, how are you ?
Bob->>Alice: Fine, thank you. And you?
create participant Carl
Alice->>Carl: Hi Carl!
create actor D as Donald
Carl->>D: Hi!
destroy Carl
Alice-xCarl: We are too many
destroy Bob
Bob->>Alice: I agree
تجميع/مربع
يمكن تجميع المشاركين في مربع رأسي. يمكنك تعريف اللون باستخدام رمز (وإذا لم يُعرَّف، فسيكون شفافًا).
نسخ
تضمين
box Aqua Group Description
... actors ...
end
box Group without description
... actors ...
end
box rgb(33,66,99)
... actors ...
end
box rgba(33,66,99,0.5)
... actors ...
end
إذا كان اسم مجموعتك ملوّنًا، فيمكنك فرض جعل هذا اللون شفافًا:
نسخ
تضمين
box transparent Aqua
... actors ...
end
نسخ
تضمين
sequenceDiagram
box Orange Alice & John
participant A
participant J
end
box Another Group
participant B
participant C
end
A->>J: Hello John, how are you?
J->>A: Great!
A->>B: Hello Bob, how is Charley?
B->>C: Hello Charley, how are you?
رسالة
يمكن عرض الرسالة بخط متصل أو بخط متقطّع.
يمكن أن يكون الخط متصلًا أو متقطّعًا، ويدعم الانتهاء بأنواع مختلفة من الأسهم أو الصلبان أو الأسهم المفتوحة.
نسخ
تضمين
[Actor][Arrow][Actor]:Message text
عشرة أنواع قياسية من الأسهم
| النوع | الوصف |
|---|---|
| -> | خط متصل بلا سهم |
| --> | خط متقطّع بلا سهم |
| ->> | خط متصل مع سهم |
| -->> | خط متقطّع مع سهم |
| <<->> | خط متصل بسهم ثنائي الاتجاه |
| <<-->> | خط متقطّع بسهم ثنائي الاتجاه |
| -x | خط متصل بصليب في الطرف |
| --x | خط متقطّع بصليب في الطرف |
| -) | خط متصل بسهم مجوّف في النهاية (غير متزامن) |
| --) | خط متقطّع بسهم مجوّف في النهاية (غير متزامن) |
تنشيط
يمكن تنشيط دور وإلغاء تنشيطه، ويمكن أن يكون الإلغاء أو التنشيط إعلانًا مخصّصًا:
نسخ
تضمين
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
activate Alice
Bob->>Alice: Hi Alice!
deactivate Alice
هناك أيضًا طريقة مختصرة، وهي إضافة + أو - بعد سهم الرسالة.
نسخ
تضمين
sequenceDiagram
Alice->>+John: Hello John, how are you?
John-->>-Alice: Great!
يمكن تراكب تنشيطات الدور نفسه:
نسخ
تضمين
sequenceDiagram
Alice->>+John: Hello John, how are you?
Alice->>+John: John, can you hear me?
John-->>-Alice: Hi Alice, I can hear you!
John-->>-Alice: I feel great!
تعليق
يمكن إضافة تعليقات إلى مخطط التسلسل. ويمكن تحقيق ذلك بالرموز التالية: Note[right of] أو [left of] أو [over][المشارك]: محتوى التعليق
نسخ
تضمين
sequenceDiagram
participant John
Note right of John: Text in note
يمكن أيضًا إنشاء تعليق يغطي مشاركين:
نسخ
تضمين
sequenceDiagram
Alice->John: Hello John, how are you?
Note over Alice,John: A typical interaction
حرف سطر جديد
يمكن إضافة حرف سطر جديد في التعليقات والرسائل:
نسخ
تضمين
sequenceDiagram
Alice->John: Hello John,<br/>how are you?
Note over Alice,John: A typical interaction<br/>But now in two lines
يتطلب حرف السطر الجديد في اسم الدور تعريف اسم بديل:
نسخ
تضمين
sequenceDiagram
participant Alice as Alice<br/>Johnson
Alice->John: Hello John,<br/>how are you?
Note over Alice,John: A typical interaction<n/>But now in two lines
حلقة
في مخطط التسلسل، يمكن التعبير عن الحلقة بالرمز التالي.
نسخ
تضمين
loop Loop text
... statements ...
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
Alice->John: Hello John, how are you?
loop Every minute
John-->Alice: Great!
end
بديل
في مخطط التسلسل، يمكن التعبير عن مسار بديل بالرمز.
نسخ
تضمين
alt Describing text...
statements
else
statements
end
或者如果存在可选序列:
نسخ
تضمين
opt Describing text...
statements
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
متوازٍ
يمكن التعبير عن الإجراءات التي تحدث بالتوازي بالرمز التالي.
نسخ
تضمين
par Action 1
statements
and Action 2
statements
and Action N
statements
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
par Alice to Bob
Alice->>Bob: Hello guys!
and Alice to John
Alice->>John: Hello guys!
end
Bob-->>Alice: Hi Alice!
John-->>Alice: Hi Alice!
يمكن أيضًا تضمين كتل متوازية.
نسخ
تضمين
sequenceDiagram
par Alice to Bob
Alice->>Bob: Go help John
and Alice to John
Alice->>John: I want this done today
par John to Charlie
John->>Charlie: Can we do this today?
and John to Diana
John->>Diana: Can you help us today?
end
end
منطقة حرجة
يمكن إظهار الإجراءات التي يجب تنفيذها تلقائيًا عبر جعلها مشروطة بحالات مختلفة.
ويتم ذلك بالرمز التالي:
نسخ
تضمين
critical [Action that must be performed]
... statements ...
option [Circumstance A]
... statements ...
option [Circumstance B]
... statements ...
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
critical Establish a connection to the DB
Service-->DB: connect
option Network timeout
Service-->Service: Log error
option Credentials rejected
Service-->Service: Log different error
end
ومن الممكن أيضًا ألّا يوجد أي خيار على الإطلاق.
نسخ
تضمين
critical Establish a connection to the DB
Service-->DB: connect
end
يمكن أيضًا تضمين هذه الكتلة الحرجة، وهو ما يكافئ عبارة par الواردة أعلاه.
مقاطعة
يمكن الإشارة إلى توقف التسلسل في المسار، ويُستخدم عادةً لنمذجة الحالات الاستثنائية.
ويتم ذلك بالرمز التالي:
نسخ
تضمين
break [something happened]
... statements ...
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
Consumer-->API: Book something
API-->BookingService: Start booking process
break when the booking process fails
API-->Consumer: show failure
end
API-->BillingService: Start billing process
إبراز الخلفية
يمكن تعيين مستطيل خلفية ملوّن لإبراز المسار، ويتم ذلك بالرمز التالي:
نسخ
تضمين
rect COLOR
... content ...
end
تُعرَّف الألوان باستخدام صيغة rgb و rgba.
نسخ
تضمين
rect rgb(0, 255, 0)
... content ...
end
نسخ
تضمين
rect rgba(0, 0, 255, .1)
... content ...
end
راجع المثال التالي:
نسخ
تضمين
sequenceDiagram
participant Alice
participant John
rect rgb(191, 178, 255)
note right of Alice: Alice calls John.
Alice->>+John: Hello John, how are you?
rect rgb(142, 182, 89)
Alice->>+John: John, can you hear me?
John-->>-Alice: Hi Alice, I can hear you!
end
John-->>-Alice: I feel great!
end
Alice ->>+ John: Did you want to go to the game tonight?
John -->>- Alice: Yeah! See you there.
تعليق
يمكنك إدخال تعليقات في مخطط التسلسل، وسيتجاهلها المحرّر. يجب أن يشغل التعليق سطرًا مستقلًا، ويجب أن يبدأ بعلامتي النسبة المئوية المزدوجة %%. ويُعدّ أي نص من بداية التعليق حتى حرف السطر الجديد التالي تعليقًا، بما في ذلك أي صيغة مخطط.
نسخ
تضمين
sequenceDiagram
Alice->>John: Hello John, how are you?
%% this is a comment
John-->>Alice: Great!
ترميز الكيانات لإفلات الأحرف
يمكن إفلات الأحرف باستخدام الصيغة التالية.
نسخ
تضمين
sequenceDiagram
A->>B: I #9829; you!
B->>A: I #9829; you #infin; times more!
الأرقام المعطاة عشرية، لذا يمكن ترميز (#) بالشكل (#35;)، كما يُدعَم استخدام أسماء أحرف HTML.
ولأن الفاصلة المنقوطة يمكن أن تحل محل حرف السطر الجديد لتعريف العلامة، فعند تضمين فاصلة منقوطة في نص الرسالة، تحتاج إلى استخدام (#59;).
ترقيم
يمكن إرفاق رقم تسلسلي بكل سهم في مخطط التسلسل. كما يلي:
نسخ
تضمين
sequenceDiagram
autonumber
Alice->>John: Hello John, how are you?
loop HealthCheck
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
قائمة المشارك
يمكن أن يحتوي المشارك على قائمة منبثقة تضم روابط مخصّصة تشير إلى صفحات خارجية. على سبيل المثال، إذا كان الدور يمثّل خدمة شبكية، فقد تشمل الروابط المفيدة رابطًا إلى لوحة معلومات صحة الخدمة، أو مستودعًا يحتوي على كود الخدمة، أو رابطًا إلى صفحة ويكي تصف الخدمة.
يمكن تكوين ذلك بإضافة سطر رابط واحد أو أكثر، بالتنسيق التالي:
نسخ
تضمين
link <actor>: <link-label> @ <link-url>
نسخ
تضمين
sequenceDiagram
participant Alice
participant John
link Alice: Dashboard @ https://dashboard.contoso.com/alice
link Alice: Wiki @ https://wiki.contoso.com/alice
link John: Dashboard @ https://dashboard.contoso.com/john
link John: Wiki @ https://wiki.contoso.com/john
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
Alice-)John: See you later!
صيغة القائمة المتقدمة
هناك صيغة متقدمة تعتمد على تنسيق JSON. وإذا كنت متمكّنًا من تنسيق JSON، فيمكن استخدامها أيضًا.
يمكن التكوين بإضافة سطر رابط بالتنسيق التالي:
نسخ
تضمين
links <actor>: <json-formatted link-name link-url pairs>
示例如下:
نسخ
تضمين
sequenceDiagram
participant Alice
participant John
links Alice: {"Dashboard": "https://dashboard.contoso.com/alice", "Wiki": "https://wiki.contoso.com/alice"}
links John: {"Dashboard": "https://dashboard.contoso.com/john", "Wiki": "https://wiki.contoso.com/john"}
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
Alice-)John: See you later!