Mermaid语法-时序图

Mermaid语法-时序图
李瑶瑶Mermaid语法收集
参考文档:Mermaid中文网
时序图
时序图是一种交互图,显示进程如何彼此运行以及以什么顺序运行。
Mermaid 可以渲染时序图。
1 | {% mermaid %} |
sequenceDiagram participant A as Alice participant J as John A->>J: Hello John, how are you? J->>A: Great!
关于节点的说明,由于 Mermaid 语言的编写方式,”end” 一词可能会破坏图表。如果无法避免,则必须使用括号()、引号 “” 或 brackets {},[], to enclose the word “end”。即:(end)、[end]、{end}。
语法
参加者
可以像本页第一个示例中那样隐式定义参与者。参与者或参与者按照图表源文本中的出现顺序渲染。有时,你可能希望以不同于第一条消息中的顺序显示参与者。可以通过执行以下操作来指定角色的出场顺序:
sequenceDiagram participant Alice participant Bob Bob->>Alice: Hi Alice Alice->>Bob: Hi Bob
1 | <pre class="mermaid">sequenceDiagram |
角色
如果你特别想使用角色符号而不是带有文本的矩形,则可以通过使用角色语句来实现,如下所示。
别名
角色可以有一个方便的标识符和描述性标签。
sequenceDiagram participant A as Alice participant J as John A->>J: Hello John, how are you? J->>A: Great!
1 | <pre class="mermaid">sequenceDiagram |
Actor 创建和销毁 (v10.3.0+)
可以通过消息创建和销毁参与者。为此,请在消息之前添加创建或销毁指令。
1 | create participant B |
创建指令支持参与者/参与者区分和别名。消息的发送者或接收者可以被销毁,但只能创建接收者。
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
1 | <pre class="mermaid">sequenceDiagram |
无法修复的参与者/参与者创建/删除错误
如果创建或删除参与者时出现以下类型的错误:
被销毁的参与者参与者名称在其声明后没有关联的销毁消息。请检查顺序图。
修复图表代码并不能消除此错误,并且所有其他图表的渲染都会导致相同的错误,那么你需要将 mermaid 版本更新到(v10.7.0+)。
分组/框
角色可以分组在垂直框中。你可以使用以下符号定义颜色(如果没有,它将是透明的)和/或描述性标签:
1 | box Aqua Group Description |
如果你的组名是颜色,你可以强制颜色透明:
1 | box transparent Aqua |
sequenceDiagram box Purple 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?
1 | {% mermaid %} |
信息
消息可以有两条显示,可以是实线,也可以是虚线。
1 | [Actor][Arrow][Actor]:Message text |
目前支持十种类型的箭头:
类型 | 描述 |
---|---|
-> |
没有箭头的实线 |
--> |
没有箭头的虚线 |
->> |
带箭头的实线 |
-->> |
带箭头的虚线 |
<<->> |
带双向箭头的实线 (v11.0.0+) |
<<-->> |
带双向箭头的虚线 (v11.0.0+) |
-x |
末端有十字的实线 |
--x |
末端带有十字的虚线 |
-) |
末尾带有空心箭头的实线(异步) |
--) |
末尾带有空心箭头的虚线(异步) |
激活
可以激活和停用角色。(de)activation 可以是专用声明:
sequenceDiagram Alice->>John: Hello John, how are you? activate John John-->>Alice: Great! deactivate John
1 | <pre class="mermaid">sequenceDiagram |
还有一种快捷表示法,即在消息箭头后附加 +
/-
后缀:
sequenceDiagram Alice->>+John: Hello John, how are you? John-->>-Alice: Great!
1 | <pre class="mermaid">sequenceDiagram |
同一角色的激活可以叠加:
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!
1 | <pre class="mermaid">sequenceDiagram |
注意
可以向时序图添加注释。这是通过符号 Note [ right of | left of | over ] [Actor]: 注意内容中的文本
请参阅下面的示例:
sequenceDiagram participant John Note right of John: Text in note
1 | <pre class="mermaid">sequenceDiagram |
还可以创建跨越两个参与者的注意:
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram Alice->John: Hello John, how are you? Note over Alice,John: A typical interaction
换行符
可以在注释和消息中添加换行符:
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram Alice->John: Hello John,
how are you? Note over Alice,John: A typical interaction
But now in two lines
角色名称中的换行符需要别名:
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram participant Alice as Alice
Johnson Alice->John: Hello John,
how are you? Note over Alice,John: A typical interaction
But now in two lines
循环
可以在时序图中表达循环。这是通过符号完成的
1 | loop Loop text |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram Alice->John: Hello John, how are you? loop Every minute John-->Alice: Great! end
替代
可以在时序图中表达替代路径。这是通过符号完成的
1 | alt Describing text |
或者如果有可选的序列(如果没有其他)。
1 | opt Describing text |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
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
平行线
可以显示并行发生的动作。
这是通过符号完成的
1 | par [Action 1] |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
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!
也可以嵌套并行块。
1 | <pre class="mermaid">sequenceDiagram |
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
临界区
可以通过对情况进行条件处理来显示必须自动发生的操作。
这是通过符号完成的
1 | critical [Action that must be performed] |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
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
也有可能根本没有选项
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram critical Establish a connection to the DB Service-->DB: connect end
这个关键块也可以嵌套,相当于上面看到的 par
语句。
中断
可以指示流内序列的停止(通常用于对异常进行建模)。
这是通过符号完成的
1 | break [something happened] |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
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
背景高亮
可以通过提供彩色背景矩形来高亮流。这是通过符号完成的
1 | rect COLOR |
颜色是使用 rgb 和 rgba 语法定义的。
1 | rect rgb(0, 255, 0) |
1 | rect rgba(0, 0, 255, .1) |
请参阅下面的示例:
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram participant Alice participant John rect rgb(191, 223, 255) note right of Alice: Alice calls John. Alice->>+John: Hello John, how are you? rect rgb(200, 150, 255) 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.
注释
可以在时序图中输入注释,解析器将忽略这些注释。注释需要独占一行,并且必须以 %%
(双百分号)开头。注释开始后到下一个换行符的任何文本都将被视为注释,包括任何图表语法。
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram Alice->>John: Hello John, how are you? %% this is a comment John-->>Alice: Great!
用于转义字符的实体代码
可以使用此处示例的语法对字符进行转义。
1 | <pre class="mermaid">sequenceDiagram |
sequenceDiagram A->>B: I ❤️ you! B->>A: I ❤️ you ♾️ times more!
给出的数字以 10 为基数,因此 #
可以编码为 #35;
。还支持使用 HTML 字符名称。
由于可以使用分号代替换行符来定义标记,因此你需要使用 #59;
在消息文本中包含分号。
sequenceNumbers
可以在时序图中的每个箭头上附加一个序列号。可以在向网站添加 Mermaid 时进行配置,如下所示:
1 | <script> |
也可以通过图表代码打开它,如下图所示:
1 | <pre class="mermaid">sequenceDiagram |
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!
角色菜单
参与者可以拥有包含指向外部页面的个性化链接的弹出菜单。例如,如果参与者代表 Web 服务,则有用的链接可能包括指向服务运行状况仪表板的链接、包含服务代码的存储库或描述服务的 wiki 页面。
这可以通过添加一条或多条链接线来配置,格式如下:
1 | link <actor>: <link-label> @ <link-url> |
1 | <pre class="mermaid">sequenceDiagram |
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 格式感到满意,那么这也存在。
可以通过添加以下格式的链接行来配置:
1 | links <actor>: <json-formatted link-name link-url pairs> |
示例如下:
1 | {% mermaid %} |
样式
时序图的样式是通过定义许多 CSS 类来完成的。在渲染期间,从位于 src/themes/sequence.scss 的文件中提取这些类。
使用的类
类 | 描述 |
---|---|
角色 | 角色框的样式。 |
actor-top | 图表顶部的角色人物/框的样式。 |
actor-bottom | 图表底部的角色人物/框的样式。 |
text.actor | 所有角色的文本样式。 |
text.actor-box | 角色框的文本样式。 |
text.actor-man | 角色人物的文本样式。 |
角色线 | 角色的垂直线。 |
messageLine0 | 实心消息行的样式。 |
messageLine1 | 虚线消息行的样式。 |
messageText | 定义消息箭头上的文本样式。 |
labelBox | 定义循环左侧的样式标签。 |
labelText | 循环标签中文本的样式。 |
loopText | 循环框中文本的样式。 |
loopLine | 定义循环框中线条的样式。 |
note | 注释框的样式。 |
noteText | 注释框中文本的样式。 |
样式表示例
1 | body { |
配置
可以调整渲染时序图的边距。
这是通过定义 mermaid.sequenceConfig
或通过 CLI 使用带有配置的 json 文件来完成的。mermaid.sequenceConfig
可以设置为带有配置参数的 JSON 字符串或相应的对象。
1 | mermaid.sequenceConfig = { |
可能的配置参数:
参数 | 描述 | 默认值 |
---|---|---|
mirrorActors | 打开/关闭图表下方和上方参与者的渲染 | false |
底部边距调整 | 调整图表结束的距离。使用 css 的宽边框样式可能会产生不需要的剪裁,这就是此配置参数存在的原因。 | 1 |
角色字体大小 | 设置角色描述的字体大小 | 14 |
角色字体家族 | 设置角色描述的字体系列 | “打开无字体”,无衬线字体 |
角色字体粗细 | 设置角色描述的字体粗细 | “打开无字体”,无衬线字体 |
noteFontSize | 设置角色附加注释的字体大小 | 14 |
noteFontFamily | 设置角色附加注释的字体系列 | “trebuchet ms”、verdana、宋体 |
noteFontWeight | 设置角色附加注释的字体粗细 | “trebuchet ms”、verdana、宋体 |
noteAlign | 设置角色附加注释中文本的文本对齐方式 | center |
messageFontSize | 设置角色<->角色消息的字体大小 | 16 |
messageFontFamily | 设置 actor<->actor 消息的字体系列 | “trebuchet ms”、verdana、宋体 |
messageFontWeight | 设置角色<->角色消息的字体粗细 | “trebuchet ms”、verdana、宋体 |
