+++ title = "PlantUML" author = ["Christopher James Hayward"] lastmod = 2021-02-04T14:39:22-05:00 draft = false +++ As described by the webiste[^fn:1]: > **PlantUML** is a component that allows you to quickly write UML and other data diagrams, using a simple and intuitive language. ## Display JSON data {#display-json-data} You can use the JSON format with PlantUML to visualize your data, to activate the feature the diagram must use the `@startjson` and `@endjson` tags, respectively[^fn:2]. ```plantuml @startjson "Hello world!" @endjson ``` {{< figure src="/ox-hugo/plantuml-display-json-data.png" >}} ### Simple example {#simple-example} Here's an example of a `user` object, with an accompanying `address` and list of `phone` numbers: ```plantuml @startjson { "name": "Bob", "email": "bob@bob.com", "phone": [ { "type": "work", "number": "555-1234" }, { "type": "mobile", "number": "555-4321" } ], "address": { } } @endjson ``` {{< figure src="/ox-hugo/plantuml-display-json-data-simple-example.png" >}} ### Complex example {#complex-example} Here is the example of a complex data structure[^fn:2], which comes from the Wikipedia page for JSON[^fn:3]: ```plantuml @startjson { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 27, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } @endjson ``` {{< figure src="/ox-hugo/plantuml-display-json-data-complex-example.png" >}} ## Display YAML data {#display-yaml-data} Much like JSON, PlantUML can visualize YAML data using the `@startyaml`, and `@endyaml` keywords[^fn:4]: ```plantuml @startyaml fruit: Apple size: Large @endyaml ``` {{< figure src="/ox-hugo/plantuml-display-yaml-data.png" >}} ### Docker example {#docker-example} Here's an example docker compose file running with a simple application structure[^fn:5]: ```plantuml @startyaml version: "3.9" services: db: image: postgres environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db @endyaml ``` {{< figure src="/ox-hugo/plantuml-display-yaml-data-docker-example.png" >}} ## Sequence Diagram {#sequence-diagram} Here's the complete example[^fn:6] showing many participants. ```plantuml @startuml /' ' Define the participant(s). '/ participant participant as 1 actor actor as 2 boundary boundary as 3 control control as 4 entity entity as 5 database database as 6 collections collections as 7 queue queue as 8 /' ' Draw a line to each participant(s). '/ 1 -> 2 : To actor 1 -> 3 : To boundary 1 -> 4 : To control 1 -> 5 : To entity 1 -> 6 : To database 1 -> 7 : To collection 1 -> 8 : To queue @enduml ``` {{< figure src="/ox-hugo/plantuml-sequence-diagram.png" >}} Here's a list of all the available keywords: - actor - boundary - control - entity - database - collections - queue ## Resources {#resources} [^fn:1]: PlantUML Website [^fn:2]: PlantUML JSON Data [^fn:3]: Wikipedia entry for JSON [^fn:4]: PlantUML YAML Data [^fn:5]: Docker compose documentation [^fn:6]: PlantUML Sequence Diagrams