Sequencediagram
Mermaid kan sequentiediagrammen renderen. Een sequentiediagram is een interactiediagram dat toont hoe processen op elkaar inwerken en in welke volgorde de bewerkingen plaatsvinden.
Kopiëren
Insluiten
sequenceDiagram
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
Alice-)John: See you later!
Opmerking over knooppunten: door de manier waarop de Mermaid-taal is geschreven, breekt het woord "end" de hele grafiek. Als je "end" moet gebruiken, moet je het woord "end" tussen ronde haakjes (), dubbele aanhalingstekens "", accolades {} of vierkante haken [] plaatsen, dus: (end), [end], {end}.
Syntaxis
Deelnemer
Deelnemers worden weergegeven in de volgorde waarin ze in de brontekst van het diagram voorkomen. Soms wil je deelnemers in een andere volgorde weergeven dan die waarin ze in het eerste bericht voorkomen; dit kan met de volgende methode om de volgorde van optreden van deelnemers te specificeren:
Kopiëren
Insluiten
sequenceDiagram
participant Alice
participant Bob
Bob->>Alice: Hi Alice
Alice->>Bob: Hi Bob
角色
Als je een rolpictogram wilt gebruiken in plaats van een rechthoek met tekst, kun je dit doen met de actor-verklaring, zoals hieronder weergegeven.
Kopiëren
Insluiten
sequenceDiagram
actor Alice
actor Bob
Alice->>Bob: Hi Bob
Bob->>Alice: Hi Alice
Alias
Je kunt na de deelnemersdeclaratie as gebruiken om een alias te definiëren
Kopiëren
Insluiten
sequenceDiagram
participant A as Alice
participant J as John
A->>J: Hello John, how are you?
J->>A: Great!
Deelnemers aanmaken en verwijderen
Deelnemers kunnen via berichten worden aangemaakt en verwijderd. Voeg daarom een aanmaak- of verwijderinstructie voor het bericht toe.
Kopiëren
Insluiten
participant B
A --> B: Hello
Bij de aanmaakinstructie wordt ondersteund dat onderscheid wordt gemaakt tussen deelnemer en alias. De afzender of ontvanger van een bericht kan worden verwijderd, maar de ontvanger kan alleen worden aangemaakt.
Kopiëren
Insluiten
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
Groeperen/vak
Deelnemers kunnen in een verticaal vak worden gegroepeerd. Je kunt een kleur definiëren met een symbool (als deze niet is gedefinieerd, is de kleur transparant).
Kopiëren
Insluiten
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
Als je groepsnaam gekleurd is, kun je die kleur geforceerd transparant maken:
Kopiëren
Insluiten
box transparent Aqua
... actors ...
end
Kopiëren
Insluiten
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?
Bericht
Berichten kunnen als doorgetrokken lijn of als streeplijn worden weergegeven.
Lijnen kunnen doorgetrokken of gestreept zijn en kunnen eindigen met verschillende soorten pijlen, kruizen of open pijlen.
Kopiëren
Insluiten
[Actor][Arrow][Actor]:Message text
Tien standaard pijltypen
| Type | Beschrijving |
|---|---|
| -> | Doorgetrokken lijn zonder pijl |
| --> | Streeplijn zonder pijl |
| ->> | Doorgetrokken lijn met pijl |
| -->> | Streeplijn met pijl |
| <<->> | Doorgetrokken lijn met pijl in beide richtingen |
| <<-->> | Streeplijn met pijl in beide richtingen |
| -x | Doorgetrokken lijn met een kruis aan het uiteinde |
| --x | Streeplijn met een kruis aan het uiteinde |
| -) | Doorgetrokken lijn met een holle pijl aan het einde (asynchroon) |
| --) | Streeplijn met een holle pijl aan het einde (asynchroon) |
Activeren
Je kunt een rol activeren en deactiveren; deactiveren of activeren kan een aparte verklaring zijn:
Kopiëren
Insluiten
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
activate Alice
Bob->>Alice: Hi Alice!
deactivate Alice
Er is ook een verkorte notatie, namelijk het toevoegen van + of - na de berichtpijl.
Kopiëren
Insluiten
sequenceDiagram
Alice->>+John: Hello John, how are you?
John-->>-Alice: Great!
Activeringen van dezelfde rol kunnen worden gestapeld:
Kopiëren
Insluiten
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!
Opmerking
Je kunt opmerkingen aan een sequentiediagram toevoegen. Dit kan met de volgende notatie: Note[right of] of [left of] of [over][deelnemer]: opmerkinginhoud
Kopiëren
Insluiten
sequenceDiagram
participant John
Note right of John: Text in note
Je kunt ook een opmerking maken die twee deelnemers omvat:
Kopiëren
Insluiten
sequenceDiagram
Alice->John: Hello John, how are you?
Note over Alice,John: A typical interaction
Regeleinde
Je kunt regeleinden toevoegen in opmerkingen en berichten:
Kopiëren
Insluiten
sequenceDiagram
Alice->John: Hello John,<br/>how are you?
Note over Alice,John: A typical interaction<br/>But now in two lines
Voor een regeleinde in een rolnaam moet een alias worden gedefinieerd:
Kopiëren
Insluiten
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
Lus
In een sequentiediagram kan een lus worden uitgedrukt met de volgende notatie.
Kopiëren
Insluiten
loop Loop text
... statements ...
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
sequenceDiagram
Alice->John: Hello John, how are you?
loop Every minute
John-->Alice: Great!
end
Alternatief
In een sequentiediagram kan een alternatief pad worden uitgedrukt met een notatie.
Kopiëren
Insluiten
alt Describing text...
statements
else
statements
end
或者如果存在可选序列:
Kopiëren
Insluiten
opt Describing text...
statements
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
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
Parallel
Parallelle acties kunnen met de volgende notatie worden weergegeven.
Kopiëren
Insluiten
par Action 1
statements
and Action 2
statements
and Action N
statements
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
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!
Je kunt ook parallelle blokken nesten.
Kopiëren
Insluiten
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
Kritieke sectie
Door verschillende situaties van voorwaarden te voorzien, kun je bewerkingen tonen die automatisch moeten worden uitgevoerd.
Dit gebeurt met de volgende notatie:
Kopiëren
Insluiten
critical [Action that must be performed]
... statements ...
option [Circumstance A]
... statements ...
option [Circumstance B]
... statements ...
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
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
Het is ook mogelijk dat er helemaal geen opties zijn.
Kopiëren
Insluiten
critical Establish a connection to the DB
Service-->DB: connect
end
Dit kritieke blok kan ook worden genest en komt overeen met de hierboven getoonde par-verklaring.
Onderbreking
Je kunt in een stroom het stoppen van een reeks aangeven, meestal gebruikt om uitzonderlijke situaties te modelleren.
Dit gebeurt met de volgende notatie:
Kopiëren
Insluiten
break [something happened]
... statements ...
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
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
Achtergrondmarkering
Je kunt een rechthoek met een gekleurde achtergrond instellen om de stroom te markeren, wat met de volgende notatie gebeurt:
Kopiëren
Insluiten
rect COLOR
... content ...
end
Kleuren worden gedefinieerd met de syntaxis rgb en rgba.
Kopiëren
Insluiten
rect rgb(0, 255, 0)
... content ...
end
Kopiëren
Insluiten
rect rgba(0, 0, 255, .1)
... content ...
end
Zie het onderstaande voorbeeld:
Kopiëren
Insluiten
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.
Opmerking
Je kunt opmerkingen in een sequentiediagram invoeren; de editor negeert deze opmerkingen. Opmerkingen moeten op een eigen regel staan en moeten beginnen met een dubbel procentteken %%. Alle tekst vanaf het begin van de opmerking tot het volgende regeleinde wordt als opmerking beschouwd, inclusief eventuele diagram-syntaxis.
Kopiëren
Insluiten
sequenceDiagram
Alice->>John: Hello John, how are you?
%% this is a comment
John-->>Alice: Great!
Entiteitscodering voor het escapen van tekens
Met de volgende syntaxis kunnen tekens worden geëscaped.
Kopiëren
Insluiten
sequenceDiagram
A->>B: I #9829; you!
B->>A: I #9829; you #infin; times more!
De gegeven getallen zijn decimaal, dus (#) kan worden gecodeerd als (#35;); het gebruik van HTML-tekennamen wordt ook ondersteund.
Omdat een puntkomma een regeleinde kan vervangen om markeringen te definiëren, moet je (#59;) gebruiken wanneer je een puntkomma in de berichttekst opneemt.
Nummering
Je kunt aan elke pijl in een sequentiediagram een volgnummer toevoegen. Zoals hieronder weergegeven:
Kopiëren
Insluiten
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!
Deelnemersmenu
Deelnemers kunnen een pop-upmenu bevatten met gepersonaliseerde links naar externe pagina's. Als een rol bijvoorbeeld een netwerkdienst vertegenwoordigt, kunnen nuttige links een link naar het health-dashboard van de dienst, een repository met de code van de dienst of een link naar een wikipagina die de dienst beschrijft, omvatten.
Dit kan worden geconfigureerd door een of meer linkregels toe te voegen, in het volgende formaat:
Kopiëren
Insluiten
link <actor>: <link-label> @ <link-url>
Kopiëren
Insluiten
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!
Geavanceerde menusyntaxis
Er is een geavanceerde syntaxis die afhankelijk is van het JSON-formaat. Als je het JSON-formaat goed beheerst, kun je dit ook gebruiken.
Dit kan worden geconfigureerd door een linkregel in het volgende formaat toe te voegen:
Kopiëren
Insluiten
links <actor>: <json-formatted link-name link-url pairs>
示例如下:
Kopiëren
Insluiten
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!