collab/mermaid/docs/syntax/requirementDiagram.mdblame
View source
6dd74de1> **Warning**
6dd74de2>
6dd74de3> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
6dd74de4>
6dd74de5> ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/requirementDiagram.md](../../packages/mermaid/src/docs/syntax/requirementDiagram.md).
6dd74de6
6dd74de7# Requirement Diagram
6dd74de8
6dd74de9> A Requirement diagram provides a visualization for requirements and their connections, to each other and other documented elements. The modeling specs follow those defined by SysML v1.6.
6dd74de10
6dd74de11Rendering requirements is straightforward.
6dd74de12
6dd74de13```mermaid-example
6dd74de14 requirementDiagram
6dd74de15
6dd74de16 requirement test_req {
6dd74de17 id: 1
6dd74de18 text: the test text.
6dd74de19 risk: high
6dd74de20 verifymethod: test
6dd74de21 }
6dd74de22
6dd74de23 element test_entity {
6dd74de24 type: simulation
6dd74de25 }
6dd74de26
6dd74de27 test_entity - satisfies -> test_req
6dd74de28```
6dd74de29
6dd74de30```mermaid
6dd74de31 requirementDiagram
6dd74de32
6dd74de33 requirement test_req {
6dd74de34 id: 1
6dd74de35 text: the test text.
6dd74de36 risk: high
6dd74de37 verifymethod: test
6dd74de38 }
6dd74de39
6dd74de40 element test_entity {
6dd74de41 type: simulation
6dd74de42 }
6dd74de43
6dd74de44 test_entity - satisfies -> test_req
6dd74de45```
6dd74de46
6dd74de47## Syntax
6dd74de48
6dd74de49There are three types of components to a requirement diagram: requirement, element, and relationship.
6dd74de50
6dd74de51The grammar for defining each is defined below. Words denoted in angle brackets, such as `<word>`, are enumerated keywords that have options elaborated in a table. `user_defined_...` is use in any place where user input is expected.
6dd74de52
6dd74de53An important note on user text: all input can be surrounded in quotes or not. For example, both `id: "here is an example"` and `id: here is an example` are both valid. However, users must be careful with unquoted input. The parser will fail if another keyword is detected.
6dd74de54
6dd74de55### Requirement
6dd74de56
6dd74de57A requirement definition contains a requirement type, name, id, text, risk, and verification method. The syntax follows:
6dd74de58
6dd74de59```
6dd74de60<type> user_defined_name {
6dd74de61 id: user_defined_id
6dd74de62 text: user_defined text
6dd74de63 risk: <risk>
6dd74de64 verifymethod: <method>
6dd74de65}
6dd74de66```
6dd74de67
6dd74de68Type, risk, and method are enumerations defined in SysML.
6dd74de69
6dd74de70| Keyword | Options |
6dd74de71| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
6dd74de72| Type | requirement, functionalRequirement, interfaceRequirement, performanceRequirement, physicalRequirement, designConstraint |
6dd74de73| Risk | Low, Medium, High |
6dd74de74| VerificationMethod | Analysis, Inspection, Test, Demonstration |
6dd74de75
6dd74de76### Element
6dd74de77
6dd74de78An element definition contains an element name, type, and document reference. These three are all user defined. The element feature is intended to be lightweight but allow requirements to be connected to portions of other documents.
6dd74de79
6dd74de80```
6dd74de81element user_defined_name {
6dd74de82 type: user_defined_type
6dd74de83 docref: user_defined_ref
6dd74de84}
6dd74de85```
6dd74de86
6dd74de87### Markdown Formatting
6dd74de88
6dd74de89In places where user defined text is possible (like names, requirement text, element docref, etc.), you can:
6dd74de90
6dd74de91- Surround the text in quotes: `"example text"`
6dd74de92- Use markdown formatting inside quotes: `"**bold text** and *italics*"`
6dd74de93
6dd74de94Example:
6dd74de95
6dd74de96```mermaid-example
6dd74de97requirementDiagram
6dd74de98
6dd74de99requirement "__test_req__" {
6dd74de100 id: 1
6dd74de101 text: "*italicized text* **bold text**"
6dd74de102 risk: high
6dd74de103 verifymethod: test
6dd74de104}
6dd74de105```
6dd74de106
6dd74de107```mermaid
6dd74de108requirementDiagram
6dd74de109
6dd74de110requirement "__test_req__" {
6dd74de111 id: 1
6dd74de112 text: "*italicized text* **bold text**"
6dd74de113 risk: high
6dd74de114 verifymethod: test
6dd74de115}
6dd74de116```
6dd74de117
6dd74de118### Relationship
6dd74de119
6dd74de120Relationships are comprised of a source node, destination node, and relationship type.
6dd74de121
6dd74de122Each follows the definition format of
6dd74de123
6dd74de124```
6dd74de125{name of source} - <type> -> {name of destination}
6dd74de126```
6dd74de127
6dd74de128or
6dd74de129
6dd74de130```
6dd74de131{name of destination} <- <type> - {name of source}
6dd74de132```
6dd74de133
6dd74de134"name of source" and "name of destination" should be names of requirement or element nodes defined elsewhere.
6dd74de135
6dd74de136A relationship type can be one of contains, copies, derives, satisfies, verifies, refines, or traces.
6dd74de137
6dd74de138Each relationship is labeled in the diagram.
6dd74de139
6dd74de140## Larger Example
6dd74de141
6dd74de142This example uses all features of the diagram.
6dd74de143
6dd74de144```mermaid-example
6dd74de145 requirementDiagram
6dd74de146
6dd74de147 requirement test_req {
6dd74de148 id: 1
6dd74de149 text: the test text.
6dd74de150 risk: high
6dd74de151 verifymethod: test
6dd74de152 }
6dd74de153
6dd74de154 functionalRequirement test_req2 {
6dd74de155 id: 1.1
6dd74de156 text: the second test text.
6dd74de157 risk: low
6dd74de158 verifymethod: inspection
6dd74de159 }
6dd74de160
6dd74de161 performanceRequirement test_req3 {
6dd74de162 id: 1.2
6dd74de163 text: the third test text.
6dd74de164 risk: medium
6dd74de165 verifymethod: demonstration
6dd74de166 }
6dd74de167
6dd74de168 interfaceRequirement test_req4 {
6dd74de169 id: 1.2.1
6dd74de170 text: the fourth test text.
6dd74de171 risk: medium
6dd74de172 verifymethod: analysis
6dd74de173 }
6dd74de174
6dd74de175 physicalRequirement test_req5 {
6dd74de176 id: 1.2.2
6dd74de177 text: the fifth test text.
6dd74de178 risk: medium
6dd74de179 verifymethod: analysis
6dd74de180 }
6dd74de181
6dd74de182 designConstraint test_req6 {
6dd74de183 id: 1.2.3
6dd74de184 text: the sixth test text.
6dd74de185 risk: medium
6dd74de186 verifymethod: analysis
6dd74de187 }
6dd74de188
6dd74de189 element test_entity {
6dd74de190 type: simulation
6dd74de191 }
6dd74de192
6dd74de193 element test_entity2 {
6dd74de194 type: word doc
6dd74de195 docRef: reqs/test_entity
6dd74de196 }
6dd74de197
6dd74de198 element test_entity3 {
6dd74de199 type: "test suite"
6dd74de200 docRef: github.com/all_the_tests
6dd74de201 }
6dd74de202
6dd74de203
6dd74de204 test_entity - satisfies -> test_req2
6dd74de205 test_req - traces -> test_req2
6dd74de206 test_req - contains -> test_req3
6dd74de207 test_req3 - contains -> test_req4
6dd74de208 test_req4 - derives -> test_req5
6dd74de209 test_req5 - refines -> test_req6
6dd74de210 test_entity3 - verifies -> test_req5
6dd74de211 test_req <- copies - test_entity2
6dd74de212```
6dd74de213
6dd74de214```mermaid
6dd74de215 requirementDiagram
6dd74de216
6dd74de217 requirement test_req {
6dd74de218 id: 1
6dd74de219 text: the test text.
6dd74de220 risk: high
6dd74de221 verifymethod: test
6dd74de222 }
6dd74de223
6dd74de224 functionalRequirement test_req2 {
6dd74de225 id: 1.1
6dd74de226 text: the second test text.
6dd74de227 risk: low
6dd74de228 verifymethod: inspection
6dd74de229 }
6dd74de230
6dd74de231 performanceRequirement test_req3 {
6dd74de232 id: 1.2
6dd74de233 text: the third test text.
6dd74de234 risk: medium
6dd74de235 verifymethod: demonstration
6dd74de236 }
6dd74de237
6dd74de238 interfaceRequirement test_req4 {
6dd74de239 id: 1.2.1
6dd74de240 text: the fourth test text.
6dd74de241 risk: medium
6dd74de242 verifymethod: analysis
6dd74de243 }
6dd74de244
6dd74de245 physicalRequirement test_req5 {
6dd74de246 id: 1.2.2
6dd74de247 text: the fifth test text.
6dd74de248 risk: medium
6dd74de249 verifymethod: analysis
6dd74de250 }
6dd74de251
6dd74de252 designConstraint test_req6 {
6dd74de253 id: 1.2.3
6dd74de254 text: the sixth test text.
6dd74de255 risk: medium
6dd74de256 verifymethod: analysis
6dd74de257 }
6dd74de258
6dd74de259 element test_entity {
6dd74de260 type: simulation
6dd74de261 }
6dd74de262
6dd74de263 element test_entity2 {
6dd74de264 type: word doc
6dd74de265 docRef: reqs/test_entity
6dd74de266 }
6dd74de267
6dd74de268 element test_entity3 {
6dd74de269 type: "test suite"
6dd74de270 docRef: github.com/all_the_tests
6dd74de271 }
6dd74de272
6dd74de273
6dd74de274 test_entity - satisfies -> test_req2
6dd74de275 test_req - traces -> test_req2
6dd74de276 test_req - contains -> test_req3
6dd74de277 test_req3 - contains -> test_req4
6dd74de278 test_req4 - derives -> test_req5
6dd74de279 test_req5 - refines -> test_req6
6dd74de280 test_entity3 - verifies -> test_req5
6dd74de281 test_req <- copies - test_entity2
6dd74de282```
6dd74de283
6dd74de284## Direction
6dd74de285
6dd74de286The diagram can be rendered in different directions using the `direction` statement. Valid values are:
6dd74de287
6dd74de288- `TB` - Top to Bottom (default)
6dd74de289- `BT` - Bottom to Top
6dd74de290- `LR` - Left to Right
6dd74de291- `RL` - Right to Left
6dd74de292
6dd74de293Example:
6dd74de294
6dd74de295```mermaid-example
6dd74de296requirementDiagram
6dd74de297
6dd74de298direction LR
6dd74de299
6dd74de300requirement test_req {
6dd74de301 id: 1
6dd74de302 text: the test text.
6dd74de303 risk: high
6dd74de304 verifymethod: test
6dd74de305}
6dd74de306
6dd74de307element test_entity {
6dd74de308 type: simulation
6dd74de309}
6dd74de310
6dd74de311test_entity - satisfies -> test_req
6dd74de312```
6dd74de313
6dd74de314```mermaid
6dd74de315requirementDiagram
6dd74de316
6dd74de317direction LR
6dd74de318
6dd74de319requirement test_req {
6dd74de320 id: 1
6dd74de321 text: the test text.
6dd74de322 risk: high
6dd74de323 verifymethod: test
6dd74de324}
6dd74de325
6dd74de326element test_entity {
6dd74de327 type: simulation
6dd74de328}
6dd74de329
6dd74de330test_entity - satisfies -> test_req
6dd74de331```
6dd74de332
6dd74de333## Styling
6dd74de334
6dd74de335Requirements and elements can be styled using direct styling or classes. As a rule of thumb, when applying styles or classes, it accepts a list of requirement or element names and a list of class names allowing multiple assignments at a time (The only exception is the shorthand syntax `:::` which can assign multiple classes but only to one requirement or element at a time).
6dd74de336
6dd74de337### Direct Styling
6dd74de338
6dd74de339Use the `style` keyword to apply CSS styles directly:
6dd74de340
6dd74de341```mermaid-example
6dd74de342requirementDiagram
6dd74de343
6dd74de344requirement test_req {
6dd74de345 id: 1
6dd74de346 text: styling example
6dd74de347 risk: low
6dd74de348 verifymethod: test
6dd74de349}
6dd74de350
6dd74de351element test_entity {
6dd74de352 type: simulation
6dd74de353}
6dd74de354
6dd74de355style test_req fill:#ffa,stroke:#000, color: green
6dd74de356style test_entity fill:#f9f,stroke:#333, color: blue
6dd74de357```
6dd74de358
6dd74de359```mermaid
6dd74de360requirementDiagram
6dd74de361
6dd74de362requirement test_req {
6dd74de363 id: 1
6dd74de364 text: styling example
6dd74de365 risk: low
6dd74de366 verifymethod: test
6dd74de367}
6dd74de368
6dd74de369element test_entity {
6dd74de370 type: simulation
6dd74de371}
6dd74de372
6dd74de373style test_req fill:#ffa,stroke:#000, color: green
6dd74de374style test_entity fill:#f9f,stroke:#333, color: blue
6dd74de375```
6dd74de376
6dd74de377### Class Definitions
6dd74de378
6dd74de379Define reusable styles using `classDef`:
6dd74de380
6dd74de381```mermaid-example
6dd74de382requirementDiagram
6dd74de383
6dd74de384requirement test_req {
6dd74de385 id: 1
6dd74de386 text: "class styling example"
6dd74de387 risk: low
6dd74de388 verifymethod: test
6dd74de389}
6dd74de390
6dd74de391element test_entity {
6dd74de392 type: simulation
6dd74de393}
6dd74de394
6dd74de395classDef important fill:#f96,stroke:#333,stroke-width:4px
6dd74de396classDef test fill:#ffa,stroke:#000
6dd74de397```
6dd74de398
6dd74de399```mermaid
6dd74de400requirementDiagram
6dd74de401
6dd74de402requirement test_req {
6dd74de403 id: 1
6dd74de404 text: "class styling example"
6dd74de405 risk: low
6dd74de406 verifymethod: test
6dd74de407}
6dd74de408
6dd74de409element test_entity {
6dd74de410 type: simulation
6dd74de411}
6dd74de412
6dd74de413classDef important fill:#f96,stroke:#333,stroke-width:4px
6dd74de414classDef test fill:#ffa,stroke:#000
6dd74de415```
6dd74de416
6dd74de417### Default class
6dd74de418
6dd74de419If a class is named default it will be applied to all nodes. Specific styles and classes should be defined afterwards to override the applied default styling.
6dd74de420
6dd74de421```
6dd74de422classDef default fill:#f9f,stroke:#333,stroke-width:4px;
6dd74de423```
6dd74de424
6dd74de425### Applying Classes
6dd74de426
6dd74de427Classes can be applied in two ways:
6dd74de428
6dd74de4291. Using the `class` keyword:
6dd74de430
6dd74de431```
6dd74de432class test_req,test_entity important
6dd74de433```
6dd74de434
6dd74de4352. Using the shorthand syntax with `:::` either during the definition or afterwards:
6dd74de436
6dd74de437```
6dd74de438requirement test_req:::important {
6dd74de439 id: 1
6dd74de440 text: class styling example
6dd74de441 risk: low
6dd74de442 verifymethod: test
6dd74de443}
6dd74de444```
6dd74de445
6dd74de446```
6dd74de447element test_elem {
6dd74de448}
6dd74de449
6dd74de450test_elem:::myClass
6dd74de451```
6dd74de452
6dd74de453### Combined Example
6dd74de454
6dd74de455```mermaid-example
6dd74de456requirementDiagram
6dd74de457
6dd74de458requirement test_req:::important {
6dd74de459 id: 1
6dd74de460 text: "class styling example"
6dd74de461 risk: low
6dd74de462 verifymethod: test
6dd74de463}
6dd74de464
6dd74de465element test_entity {
6dd74de466 type: simulation
6dd74de467}
6dd74de468
6dd74de469classDef important font-weight:bold
6dd74de470
6dd74de471class test_entity important
6dd74de472style test_entity fill:#f9f,stroke:#333
6dd74de473```
6dd74de474
6dd74de475```mermaid
6dd74de476requirementDiagram
6dd74de477
6dd74de478requirement test_req:::important {
6dd74de479 id: 1
6dd74de480 text: "class styling example"
6dd74de481 risk: low
6dd74de482 verifymethod: test
6dd74de483}
6dd74de484
6dd74de485element test_entity {
6dd74de486 type: simulation
6dd74de487}
6dd74de488
6dd74de489classDef important font-weight:bold
6dd74de490
6dd74de491class test_entity important
6dd74de492style test_entity fill:#f9f,stroke:#333
6dd74de493```
6dd74de494
6dd74de495<!--- cspell:ignore reqs --->