PlantUML 语法

PlantUML 语法验证

这篇文章用于验证博客 Markdown 中的 plantuml / puml 代码块能否被服务端本地渲染为 SVG,并正确嵌入到文章内容中。

在 Markdown 中使用三反引号代码块即可触发渲染:

```plantuml
@startuml
Alice -> Bob: Hello
@enduml
```

也可以使用 puml 作为语言标识:

```puml
@startuml
Alice -> Bob: Hello
@enduml
```

时序图

时序图适合描述用户、浏览器、服务端、外部系统之间的调用链路。

语法:

```plantuml
@startuml
actor 用户
participant 浏览器
participant Remix3
participant Markdown渲染器
participant PlantUML本地CLI

autonumber
用户 -> 浏览器: 打开博客文章
浏览器 -> Remix3: 请求文章 HTML
Remix3 -> Markdown渲染器: 解析 Markdown
Markdown渲染器 -> PlantUML本地CLI: 渲染 PlantUML 代码块
PlantUML本地CLI --> Markdown渲染器: 返回 SVG
Markdown渲染器 --> Remix3: 返回文章 HTML
Remix3 --> 浏览器: 响应页面
浏览器 --> 用户: 展示 SVG 图表
@enduml
```

效果:

用户浏览器Remix3Markdown渲染器PlantUML本地CLI用户用户浏览器浏览器Remix3Remix3Markdown渲染器Markdown渲染器PlantUML本地CLIPlantUML本地CLI1打开博客文章2请求文章 HTML3解析 Markdown4渲染 PlantUML 代码块5返回 SVG6返回文章 HTML7响应页面8展示 SVG 图表

类图

类图适合表达实体结构、字段、方法和依赖关系。

语法:

```puml
@startuml
class BlogPost {
  +slug: string
  +title: string
  +summary: string
  +tags: string[]
  +html: string
}

class BlogRepository {
  +getPosts(tag?: string)
  +getTags()
  +getPost(slug: string)
}

class MarkdownRenderer {
  +render(body: string)
}

class RenderCache {
  +read(key: string)
  +write(key: string, html: string)
}

BlogRepository --> BlogPost
BlogRepository --> MarkdownRenderer
MarkdownRenderer --> RenderCache
@enduml
```

效果:

BlogPostslug: stringtitle: stringsummary: stringtags: string[]html: stringBlogRepositorygetPosts(tag?: string)getTags()getPost(slug: string)MarkdownRendererrender(body: string)RenderCacheread(key: string)write(key: string, html: string)

组件图

组件图适合描述模块边界与依赖关系。

语法:

```plantuml
@startuml
package "Remix3 应用" {
  [Blog Route] as Route
  [Blog Repository] as Repository
  [Markdown Processor] as Processor
  [Render Cache] as Cache
}

database "vb-posts Git 仓库" as Posts
component "PlantUML CLI/JAR" as PlantUML
component "Playwright + Mermaid" as Mermaid

Route --> Repository
Repository --> Posts
Repository --> Processor
Processor --> Cache
Processor --> PlantUML
Processor --> Mermaid
@enduml
```

效果:

Remix3 应用Blog RouteBlog RepositoryMarkdown ProcessorRender Cachevb-posts Git 仓库PlantUML CLI/JARPlaywright + Mermaid

用例图

用例图适合从用户视角表达系统能力。

语法:

```plantuml
@startuml
left to right direction
actor 访客
actor 作者
rectangle 博客系统 {
  访客 -- (浏览文章列表)
  访客 -- (阅读文章详情)
  访客 -- (查看图表)
  作者 -- (编写 Markdown)
  作者 -- (提交到 vb-posts)
  (阅读文章详情) ..> (渲染 Mermaid) : include
  (阅读文章详情) ..> (渲染 PlantUML) : include
}
@enduml
```

效果:

博客系统浏览文章列表阅读文章详情查看图表编写 Markdown提交到 vb-posts渲染 Mermaid渲染 PlantUML访客作者includeinclude

活动图

活动图适合描述流程、分支和回退策略。

语法:

```plantuml
@startuml
start
:收到文章详情请求;
:同步 vb-posts 仓库;
:读取 Markdown 文件;
if (命中文章渲染缓存?) then (是)
  :返回缓存 HTML;
else (否)
  :解析 Markdown;
  if (存在 PlantUML 代码块?) then (是)
    if (命中 PlantUML SVG 缓存?) then (是)
      :读取 SVG 缓存;
    else (否)
      :调用本地 CLI/JAR 生成 SVG;
      :写入 SVG 缓存;
    endif
  endif
  :生成文章 HTML;
  :写入文章渲染缓存;
endif
:响应页面;
stop
@enduml
```

效果:

收到文章详情请求同步 vb-posts 仓库读取 Markdown 文件命中文章渲染缓存?返回缓存 HTML解析 Markdown命中 PlantUML SVG 缓存?读取 SVG 缓存调用本地 CLI/JAR 生成 SVG写入 SVG 缓存存在 PlantUML 代码块?生成文章 HTML写入文章渲染缓存响应页面

状态图

状态图适合表达缓存对象或业务对象的生命周期。

语法:

```plantuml
@startuml
[*] --> Missing
Missing --> Rendering : 首次请求
Rendering --> Ready : 渲染成功
Rendering --> Failed : 渲染失败
Ready --> Stale : Markdown blob 变化
Stale --> Rendering : 重新请求
Failed --> Rendering : 下次重试
Ready --> [*]
@enduml
```

效果:

MissingRenderingReadyFailedStale首次请求渲染成功渲染失败下次重试Markdown blob 变化重新请求

思维导图

思维导图适合组织主题、能力清单和知识结构。

语法:

```plantuml
@startmindmap
* 博客渲染
** Markdown
*** frontmatter
*** GFM
*** HTML
** 图表
*** Mermaid
*** PlantUML
** 缓存
*** SVG 缓存
*** 文章 HTML 缓存
*** Git blob 版本
@endmindmap
```

效果:

博客渲染MarkdownfrontmatterGFMHTML图表MermaidPlantUML缓存SVG 缓存文章 HTML 缓存Git blob 版本

甘特图

甘特图适合表达任务顺序和里程碑。

语法:

```plantuml
@startgantt
printscale daily
project starts 2026-06-24
[完善 PlantUML 文档] lasts 5 days
[实现文章渲染缓存] lasts 5 days
[验证博客详情页] lasts 3 days
[提交主项目变更] lasts 2 days
[实现文章渲染缓存] starts at [完善 PlantUML 文档]'s end
[验证博客详情页] starts at [实现文章渲染缓存]'s end
[提交主项目变更] starts at [验证博客详情页]'s end
@endgantt
```

效果:

WeThFrSaSuMoTuWeThFrSaSuMoTuWe2425262728293012345678June 2026July 2026完善 PlantUML 文档实现文章渲染缓存验证博客详情页提交主项目变更WeThFrSaSuMoTuWeThFrSaSuMoTuWe2425262728293012345678June 2026July 2026

JSON 图

PlantUML 也可以渲染结构化数据,适合展示配置或接口数据示例。

语法:

```plantuml
@startjson
{
  "cache": {
    "type": "markdown-render",
    "key": "slug + git blob + renderer version",
    "format": "json",
    "payload": ["meta", "html"]
  }
}
@endjson
```

效果:

cache   typemarkdown-renderkeyslug + git blob + renderer versionformatjsonpayload   metahtml

小结

这篇文章覆盖了 PlantUML 的常用图形:时序图、类图、组件图、用例图、活动图、状态图、思维导图、甘特图和 JSON 图。它可以作为博客渲染链路的回归测试文档,用于验证:

  • plantumlpuml 代码块识别;
  • 本地 PlantUML CLI/JAR 渲染;
  • SVG 缓存命中;
  • inline SVG 在文章中的展示;
  • Markdown 整体渲染缓存是否正确失效。
返回博客