== Archimate Diagram +++This is only a proposal and subject to change+++. You are very welcome http://forum.plantuml.net[to create a new discussion] on this future syntax. Your feedbacks, ideas and suggestions help us to find the right solution. == Archimate keyword You can use the `+archimate+` keyword to define an element. Stereotype can optionally specify an additional icon. Some colors (`+Business+`, `+Application+`, `+Motivation+`, `+Strategy+`, `+Technology+`, `+Physical+`, `+Implementation+`) are also available. @startuml archimate #Technology "VPN Server" as vpnServerA <> rectangle GO #lightgreen rectangle STOP #red rectangle WAIT #orange @enduml == Defining Junctions Using the `+circle+` keyword and the link::preprocessing[preprocessor], you can also create junctions. @startuml !define Junction_Or circle #black !define Junction_And circle #whitesmoke Junction_And JunctionAnd Junction_Or JunctionOr archimate #Technology "VPN Server" as vpnServerA <> rectangle GO #lightgreen rectangle STOP #red rectangle WAIT #orange GO -up-> JunctionOr STOP -up-> JunctionOr STOP -down-> JunctionAnd WAIT -down-> JunctionAnd @enduml == Example 1 skinparam rectangle<> { roundCorner 25 } sprite $bProcess jar:archimate/business-process sprite $aService jar:archimate/application-service sprite $aComponent jar:archimate/application-component rectangle "Handle claim" as HC <<$bProcess>><> #Business rectangle "Capture Information" as CI <<$bProcess>><> #Business rectangle "Notify\nAdditional Stakeholders" as NAS <<$bProcess>><> #Business rectangle "Validate" as V <<$bProcess>><> #Business rectangle "Investigate" as I <<$bProcess>><> #Business rectangle "Pay" as P <<$bProcess>><> #Business HC *-down- CI HC *-down- NAS HC *-down- V HC *-down- I HC *-down- P CI -right->> NAS NAS -right->> V V -right->> I I -right->> P rectangle "Scanning" as scanning <<$aService>><> #Application rectangle "Customer admnistration" as customerAdministration <<$aService>><> #Application rectangle "Claims admnistration" as claimsAdministration <<$aService>><> #Application rectangle Printing <<$aService>><> #Application rectangle Payment <<$aService>><> #Application scanning -up-> CI customerAdministration -up-> CI claimsAdministration -up-> NAS claimsAdministration -up-> V claimsAdministration -up-> I Payment -up-> P Printing -up-> V Printing -up-> P rectangle "Document\nManagement\nSystem" as DMS <<$aComponent>> #Application rectangle "General\nCRM\nSystem" as CRM <<$aComponent>> #Application rectangle "Home & Away\nPolicy\nAdministration" as HAPA <<$aComponent>> #Application rectangle "Home & Away\nFinancial\nAdministration" as HFPA <<$aComponent>> #Application DMS .up.|> scanning DMS .up.|> Printing CRM .up.|> customerAdministration HAPA .up.|> claimsAdministration HFPA .up.|> Payment legend left Example from the "Archisurance case study" (OpenGroup). See ==== <$bProcess> :business process ==== <$aService> : application service ==== <$aComponent> : application component endlegend == Example 2 skinparam roundcorner 25 rectangle "Capture Information" as CI <<$archimate/business-process>> #Business == List possible sprites You can list all possible sprites for Archimate using the following diagram: @startuml listsprite @enduml == ArchiMate Macros === Archimate Macros and Library A list of Archimate macros are defined https://github.com/ebbypeter/Archimate-PlantUML[Archimate-PlantUML] here which simplifies the creation of ArchiMate diagrams, and Archimate is natively on the link::stdlib[Standard Library] of PlantUML. === Archimate elements Using the macros, creation of ArchiMate elements are done using the following format: `+Category_ElementName(nameOfTheElement, "description")+` For example: * To define a __Stakeholder__ element, which is part of Motivation category, the syntax will be `+Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")+`: @startuml !include Motivation_Stakeholder(StakeholderElement, "Stakeholder Description") @enduml * To define a __Business Service__ element, `+Business_Service(BService, "Business Service")+`: @startuml !include Business_Service(BService, "Business Service") @enduml === Archimate relationships The ArchiMate relationships are defined with the following pattern: `+Rel_RelationType(fromElement, toElement, "description")+` and to define the direction/orientation of the two elements: `+Rel_RelationType_Direction(fromElement, toElement, "description")+` The `+RelationTypes+` supported are: * Access * Aggregation * Assignment * Association * Composition * Flow * Influence * Realization * Serving * Specialization * Triggering The `+Directions+` supported are: * Up * Down * Left * Right For example: * To denote a composition relationship between the __Stakeholder__ and __Business Service__ defined above, the syntax will be `+Rel_Composition(StakeholderElement, BService, "Description for the relationship")+` @startuml !include Motivation_Stakeholder(StakeholderElement, "Stakeholder Description") Business_Service(BService, "Business Service") Rel_Composition(StakeholderElement, BService, "Description for the relationship") @enduml * Unordered List ItemTo orient the two elements in top - down position, the syntax will be `+Rel_Composition_Down(StakeholderElement, BService, "Description for the relationship")+` @startuml !include Motivation_Stakeholder(StakeholderElement, "Stakeholder Description") Business_Service(BService, "Business Service") Rel_Composition_Down(StakeholderElement, BService, "Description for the relationship") @enduml === Appendice: Examples of all Archimate RelationTypes @startuml left to right direction !include Rel_Triggering(i15, j15, Triggering) Rel_Specialization(i14, j14, Specialization) Rel_Serving(i13, j13, Serving) Rel_Realization(i12, j12, Realization) Rel_Influence(i11, j11, Influence) Rel_Flow(i10, j10, Flow) Rel_Composition(i9, j9, Composition) 'Rel_Association_dir(i8, j8, Association_dir) Rel_Association(i7, j7, Association) Rel_Assignment(i6, j6, Assignment) Rel_Aggregation(i5, j5, Aggregation) Rel_Access_w(i4, j4, Access_w) Rel_Access_rw(i3, j3, Access_rw) Rel_Access_r(i2, j2, Access_r) Rel_Access(i1, j1, Access) @enduml