== 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