====== Sequence Diagram ====== ====== Basic examples ====== The sequence "->" is used to draw a message between two participants. Participants do not have to be explicitly declared. To have a dotted arrow, you use --> It is also possible to use <- and <--. That does not change the drawing, but may improve readability. Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response ====== Comments ====== Everything that starts with simple quote ' is a comment. You can also put comments on several lines using /' to start and '/ to end. ====== Declaring participant ====== It is possible to change participant order using the participant keyword. It is also possible to use other keywords to declare a participant: * actor * boundary * control * entity * database actor Foo1 boundary Foo2 control Foo3 entity Foo4 database Foo5 Foo1 -> Foo2 : To boundary Foo1 -> Foo3 : To control Foo1 -> Foo4 : To entity Foo1 -> Foo5 : To database You can rename a participant using the as keyword. You can also change the background color of actor or participant. actor Bob #red ' The only difference between actor 'and participant is the drawing participant Alice participant "I have a really\nlong name" as L #99FF99 /' You can also declare: participant L as "I have a really\nlong name" #99FF99 '/ Alice->Bob: Authentication Request Bob->Alice: Authentication Response Bob->L: Log transaction ====== Use non-letters in participants ====== You can use quotes to define participants. And you can use the as keyword to give an alias to those participants. Alice -> "Bob()" : Hello "Bob()" -> "This is very\nlong" as Long ' You can also declare: ' "Bob()" -> Long as "This is very\nlong" Long --> "Bob()" : ok ====== Message to Self ====== A participant can send a message to itself. It is also possible to have multi-line using \n. Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext ====== Change arrow style ====== You can change arrow style by several ways: * add a final x to denote a lost message * use \ or / instead of < or > to have only the bottom or top part of the arrow * repeat the arrow head (for example, **%%>>%%** or **%%//%%**) head to have a thin drawing * use -- instead of - to have a dotted arrow * add a final "o" at arrow head * use bidirectional arrow Bob ->x Alice Bob -> Alice Bob ->> Alice Bob -\ Alice Bob \\- Alice Bob //-- Alice Bob ->o Alice Bob o\\-- Alice Bob <-> Alice Bob <->o Alice ====== Change arrow color ====== You can change the color of individual arrows using the following notation: Bob -[#red]> Alice : hello Alice -[#0000FF]->Bob : ok ====== Message sequence numbering ====== The keyword autonumber is used to automatically add number to messages. autonumber Bob -> Alice : Authentication Request Bob <- Alice : Authentication Response You can specify a startnumber with autonumber 'start' , and also an increment with autonumber 'start' 'increment'. autonumber Bob -> Alice : Authentication Request Bob <- Alice : Authentication Response autonumber 15 Bob -> Alice : Another authentication Request Bob <- Alice : Another authentication Response autonumber 40 10 Bob -> Alice : Yet another authentication Request Bob <- Alice : Yet another authentication Response You can specify a format for your number by using between double-quote. The formatting is done with the Java class DecimalFormat ('0' means digit, '#' means digit and zero if absent). You can use some html tag in the format. autonumber "[000]" Bob -> Alice : Authentication Request Bob <- Alice : Authentication Response autonumber 15 "(##)" Bob -> Alice : Another authentication Request Bob <- Alice : Another authentication Response autonumber 40 10 "Message 0 " Bob -> Alice : Yet another authentication Request Bob <- Alice : Yet another authentication Response ====== Title ====== The title keywords is used to put a title. title Simple communication example Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response ====== Legend the diagram ====== The legend and end legend are keywords is used to put a legend. You can optionally specify to have left, right or center alignment for the legend. Alice -> Bob : Hello legend right Short legend endlegend ====== Splitting diagrams ====== The newpage keyword is used to split a diagram into several images. You can put a title for the new page just after the newpage keyword. This is very handy with Word to print long diagram on several pages. Alice -> Bob : message 1 Alice -> Bob : message 2 ' newpage Alice -> Bob : message 3 Alice -> Bob : message 4 ' newpage A title for the\nlast page Alice -> Bob : message 5 Alice -> Bob : message 6 ====== Grouping message ====== It is possible to group messages together using the following keywords: * alt/else * opt * loop * par * break * critical * group, followed by a text to be displayed It is possible a add a text that will be displayed into the header (except for group). The end keyword is used to close the group. Note that it is possible to nest groups. Alice -> Bob: Authentication Request alt successful case Bob -> Alice: Authentication Accepted else some kind of failure Bob -> Alice: Authentication Failure group My own label Alice -> Log : Log attack start loop 1000 times Alice -> Bob: DNS Attack end Alice -> Log : Log attack end end else Another type of failure Bob -> Alice: Please repeat end ====== Notes on messages ====== It is possible to put notes on message using the note left or note right keywords just after the message. You can have a multi-line note using the end note keywords. Alice->Bob : hello note left: this is a first note Bob->Alice : ok note right: this is another note Bob->Bob : I am thinking note left a note can also be defined on several lines end note ====== Some other notes ====== It is also possible to place notes relative to participant with note left of , note right of or note over keywords. It is possible to highlight a note by changing its background color. You can also have a multi-line note using the end note keywords. participant Alice participant Bob note left of Alice #aqua This is displayed left of Alice. end note note right of Alice: This is displayed right of Alice. note over Alice: This is displayed over Alice. note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice. note over Bob, Alice This is yet another example of a long note. end note ====== Changing notes shape ====== You can use hnote and rnote keywords to change note shapes. caller -> server : conReq hnote over caller : idle caller <- server : conConf rnote over server "r" as rectangle "h" as hexagon endrnote ====== Creole and HTML ====== It_is_also_possible_to_use_creole_formatting: participant Alice participant "The **Famous** Bob" as Bob Alice -> Bob : hello --there-- ... Some ~~long delay~~ ... Bob -> Alice : ok note left This is **bold** This is //italics// This is ""monospaced"" This is --stroked-- This is __underlined__ This is ~~waved~~ end note Alice -> Bob : A //well formatted// message note right of Alice This is displayed __left of__ Alice. end note note left of Bob This is displayed **left of Alice Bob**. end note note over Alice, Bob This is hosted by end note ====== Divider ====== If you want, you can split a diagram using == separator to divide your diagram into logical steps. == Initialization == Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response == Repetition == Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response ====== Reference ====== You can use reference in a diagram, using the keyword ref over. participant Alice actor Bob ref over Alice, Bob : init Alice -> Bob : hello ref over Bob This can be on several lines end ref ====== Delay ====== You can use ... to indicate a delay in the diagram. And it is also possible to put a message with this delay. Alice -> Bob: Authentication Request ... Bob --> Alice: Authentication Response ...5 minutes latter... Bob --> Alice: Bye ! ====== Space ====== You can use ||| to indicate some spacing in the diagram. It is also possible to specify a number of pixel to be used. Alice -> Bob: message 1 Bob --> Alice: ok ||| Alice -> Bob: message 2 Bob --> Alice: ok ||45|| Alice -> Bob: message 3 Bob --> Alice: ok ====== Lifeline Activation and Destruction ====== The activate and deactivate are used to denote participant activation. Once a participant is activated, its lifeline appears. The activate and deactivate apply on the previous message. The destroy denote the end of the lifeline of a participant. participant User User -> A: DoWork activate A A -> B: << createRequest >> activate B B -> C: DoWork activate C C --> B: WorkDone destroy C B --> A: RequestCreated deactivate B A -> User: Done deactivate A Nested lifeline can be used, and it is possible to add a color on the lifeline. participant User User -> A: DoWork activate A #FFBBBB A -> A: Internal call activate A #DarkSalmon A -> B: << createRequest >> activate B B --> A: RequestCreated deactivate B deactivate A A -> User: Done deactivate A ====== Participant creation ====== You can use the create keyword just before the first reception of a message to emphasize the fact that this message is actually creating this new object. Bob -> Alice : hello create Other Alice -> Other : new create control String Alice -> String note right : You can also put notes! Alice --> Bob : ok ====== Incoming and outgoing messages ====== You can use incoming or outgoing arrows if you want to focus on a part of the diagram. Use square brackets to denote the left "[" or the right "]" side of the diagram. [-> A: DoWork activate A A -> A: Internal call activate A A ->] : << createRequest >> A<--] : RequestCreated deactivate A [<- A: Done deactivate A You can also have the following syntax: [-> Bob [o-> Bob [o->o Bob [x-> Bob [<- Bob [x<- Bob Bob ->] Bob ->o] Bob o->o] Bob ->x] Bob <-] Bob x<-] ====== Stereotypes and Spots ====== It is possible to add stereotypes to participants using << and >>. In the stereotype, you can add a spotted character in a colored circle using the syntax (X,color). participant "Famous Bob" as Bob << Generated >> participant Alice << (C,#ADD1B2) Testable >> Bob->Alice: First message participant Bob << (C,#ADD1B2) >> participant Alice << (C,#ADD1B2) >> Bob->Alice: First message ====== More information on titles ====== You can use creole_formatting in the title. title __Simple__ **communication** example Alice -> Bob: Authentication Request Bob -> Alice: Authentication Response You can add newline using \n in the title description. title __Simple__ communication example\non several lines Alice -> Bob: Authentication Request Bob -> Alice: Authentication Response You can also define title on several lines using title and end title keywords. title Simple communication example on several lines and using html This is hosted by end title Alice -> Bob: Authentication Request Bob -> Alice: Authentication Response ====== Participants encompass ====== It is possible to draw a box around some participants, using box and end box commands. You can add an optional title or a optional background color, after the box keyword. box "Internal Service" #LightBlue participant Bob participant Alice end box participant Other Bob -> Alice : hello Alice -> Other : hello ====== Removing Footer ====== You can use the hide footbox keywords to remove the footer of the diagram. hide footbox title Footer removed Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response ====== Skinparam ====== You can use the skinparam command to change colors and fonts for the drawing. You can use this command: * In the diagram definition, like any other commands, * In an included_file, * In a configuration file, provided in the command_line or the ANT_task. skinparam backgroundColor #EEEBDC skinparam sequence { ArrowColor DeepSkyBlue ActorBorderColor DeepSkyBlue LifeLineBorderColor blue LifeLineBackgroundColor #A9DCDF ParticipantBorderColor DeepSkyBlue ParticipantBackgroundColor DodgerBlue ParticipantFontName Impact ParticipantFontSize 17 ParticipantFontColor #A9DCDF ActorBackgroundColor aqua ActorFontColor DeepSkyBlue ActorFontSize 17 ActorFontName Aapex } actor User participant "First Class" as A participant "Second Class" as B participant "Last Class" as C User -> A: DoWork activate A A -> B: Create Request activate B B -> C: DoWork activate C C --> B: WorkDone destroy C B --> A: Request Created deactivate B A --> User: Done deactivate A