AWS-PlantUML如何解决图标命名冲突:SHA1去重与递归命名空间生成机制全解析

发布时间:2026/8/23 13:13:02

AWS-PlantUML如何解决图标命名冲突:SHA1去重与递归命名空间生成机制全解析
AWS-PlantUML如何解决图标命名冲突SHA1去重与递归命名空间生成机制全解析【免费下载链接】AWS-PlantUMLPlantUML sprites, macros, and other includes for AWS components.项目地址: https://gitcode.com/gh_mirrors/aw/AWS-PlantUMLAWS-PlantUML 是一个为 PlantUML 提供 AWS 组件图标sprite、宏macro与构造型stereotype的开源工具包让你几行代码就能画出带官方 AWS 图标的架构图。当上千个 AWS 图标涌入同一仓库同名图标撞车几乎是必然的。本文带你完整拆解它如何用SHA1 去重与递归命名空间生成两大机制彻底解决图标命名冲突问题。图标命名冲突从何而来AWS 官方图标包遵循严格的文件命名规范见 README.mdCATEGORY_SERVICE_NAME[_SERVICE_COMPONENT][_LARGE]例如Storage_AmazonS3_bucket.png会被拆分为类别Storage / AmazonS3与组件名bucket解析逻辑见 puml.py。问题就出在这里bucket、table、action 这类子组件名在不同服务下大量重名。如果直接拿组件名生成宏名BUCKET、TABLE这些宏必然互相覆盖此外同一张图标图片还被 Amazon 放在多个分类目录下会产生完全相同图形的重复文件。AWS-PlantUML 的生成脚本 puml.py 用先去重、再递归加命名空间两步走解决了这两个问题。第一道防线SHA1 去重在 filter_duplicate_images() 中脚本对每张图标文件的原始字节计算 SHA1 摘要再用groupby按摘要分组同一组内只有 1 个文件 → 正常保留同一组内有多个文件即图片内容完全一致只是文件名/路径不同→只保留第一个。这一步的妙处在于它判断的不是名字是否相同而是内容是否相同。两个不同路径下像素级一致的图标只会生成一份宏与 sprite从源头消灭了重复定义带来的命名冲突。# puml.py 中的去重核心思路 def shasum(puml): h sha1() with open(puml.image_path, rb) as f: h.update(f.read()) return h.hexdigest()第二道防线递归命名空间生成去重之后仍会剩下名字相同、内容不同的图标。这时轮到 set_unique_names() 登场——一个教科书级的递归消歧函数按 expand_name() 生成的候选名排序并分组某组里只有 1 个图标 → 候选名即最终唯一名unique_name某组里有多个→ 只对这些冲突者递归调用自身expand 加 1候选名多拼一级父类别。以Storage_AmazonS3_bucket.png为例三轮候选名依次是轮次expand候选名说明第 1 轮0bucket只用组件名最简洁第 2 轮1AmazonS3_bucket加上父级服务名第 3 轮2Storage_AmazonS3_bucket加上顶层类别名必然唯一递归只在冲突子集内进行且候选名最长也只是完整命名空间因此必然收敛、必然终止——每个图标最终都拿到一个全局唯一的unique_name。双重宏输出与点分命名空间拿到唯一名后macros 属性 会做一件贴心的事当unique_name ! name时同时生成两份宏与两份 spritegenerate_sprite() 末尾追加了第二份定义。短名宏如BUCKET画图时最常用简洁好写全名宏如AMAZONS3_BUCKET当你同时需要多个不同来源的bucket时用它精确引用。此外namespaced_name 还会把路径转成点分命名空间如Storage.AmazonS3.bucket它被用作 INI 配置文件的 section 名。InheritingConfigParser 在查不到当前节时会自动向上逐级回退Storage.AmazonS3.bucket→Storage.AmazonS3→Storage这就是 awspuml.ini 中[Analytics]、[Analytics.AWSGlue]、[Analytics.AWSGlue.AWSGlue_LARGE]这种层次化配置可以按粒度覆盖颜色与实体类型的原因。; awspuml.ini 中的点分命名空间配置节 [Analytics] color: ${PUML.colors:orange} entity_type: node [Analytics.AWSGlue]最终效果几行代码画出 AWS 架构图以上机制全部发生在生成期画图时你只需 common.puml 里的PUML_ENTITY宏。以 examples/component-customization.puml 为例!include path/to/common.puml !include path/to/Storage/AmazonS3/AmazonS3.puml AMAZONS3(s3_internal,Default S3) AMAZONS3(s3_internal2,S3 as node,node) AMAZONS3_LARGE(s3_partner,Large S3)每个宏只需传别名 可选标签冲突消解、sprite 编码、构造型换行全部由生成机制在幕后完成。综合多个服务图标就能得到如 examples/comments-architecture.puml 这样的完整架构机制速查表机制解决的问题代码位置SHA1 去重内容相同的重复图标文件puml.py递归命名空间生成同名不同内容的图标puml.py双重宏 / 双 sprite 输出短名易用与精确引用的兼得puml.py点分命名空间 配置继承按分类粒度自定义样式puml.py 一句话总结先用 SHA1 保证相同内容只定义一次再用递归命名空间保证不同内容必有唯一名——两道防线组合起来就让上千个 AWS 图标宏可以和平共处而画图的人完全无感。【免费下载链接】AWS-PlantUMLPlantUML sprites, macros, and other includes for AWS components.项目地址: https://gitcode.com/gh_mirrors/aw/AWS-PlantUML创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

本地部署千问3.8-27B大模型:从环境配置到能力实测的完整指南

本地部署千问3.8-27B大模型:从环境配置到能力实测的完整指南

2026/8/23 13:13:02

千问3.8-27B这类大模型,最吸引人的地方在于它宣称的“无审查”和“越狱”特性,这让很多开发者想把它部署在本地,用于代码生成、创意写作或特定领域的对话测试。但直接上手很容易踩坑,比如模型文件巨大、Ollama拉取失败、显存不足跑…

BongoCat 互动桌宠快速上手指南:键盘、鼠标、手柄全响应

BongoCat 互动桌宠快速上手指南:键盘、鼠标、手柄全响应

2026/8/23 12:52:44

BongoCat 互动桌宠快速上手指南:键盘、鼠标、手柄全响应 【免费下载链接】BongoCat 🐱 跨平台互动桌宠 BongoCat,为桌面增添乐趣! 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat BongoCat 是一款跨平台互动桌宠…

pandas-ta 快速上手:5 分钟让一列价格长出 130+ 技术指标

pandas-ta 快速上手:5 分钟让一列价格长出 130+ 技术指标

2026/8/23 12:52:44

pandas-ta 快速上手:5 分钟让一列价格长出 130 技术指标 【免费下载链接】pandas-ta Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 130 Indicators 项目地址: https://gitcode.com/gh_mirrors/pa/pandas-ta …

5分钟修好十字军之王II中文乱码:CK2DLL补丁安装指南

5分钟修好十字军之王II中文乱码:CK2DLL补丁安装指南

2026/8/23 15:03:06

5分钟修好十字军之王II中文乱码:CK2DLL补丁安装指南 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 刚打下一块封地,结果领主名字是一串问…

MobileNet-Yolo 快速上手:3MB 轻量目标检测,ARM 手机 5ms 出结果

MobileNet-Yolo 快速上手:3MB 轻量目标检测,ARM 手机 5ms 出结果

2026/8/23 15:03:06

MobileNet-Yolo 快速上手:3MB 轻量目标检测,ARM 手机 5ms 出结果 【免费下载链接】MobileNet-Yolo MobileNetV2-YoloV3-Nano: 0.5BFlops 3MB HUAWEI P40: 6ms/img, YoloFace-500k:0.1Bflops 420KB:fire::fire::fire: 项目地址: https://gitcode.com/gh…

RedisDesktopManager(RDM)连不上、跑得慢?这份三层排查+调优清单帮你省下两小时

RedisDesktopManager(RDM)连不上、跑得慢?这份三层排查+调优清单帮你省下两小时

2026/8/23 15:03:06

RedisDesktopManager(RDM)连不上、跑得慢?这份三层排查调优清单帮你省下两小时 【免费下载链接】RedisDesktopManager RedisInsight/RedisDesktopManager: RedisDesktopManager 是一个用于 Redis 数据库管理的桌面应用程序,可以用于连接和操作 Redis 数据…

layoutlmv3-base进阶指南:文档图像分类与版面分析(Layout Analysis)双任务详解

layoutlmv3-base进阶指南:文档图像分类与版面分析(Layout Analysis)双任务详解

2026/8/23 15:03:06

layoutlmv3-base进阶指南:文档图像分类与版面分析(Layout Analysis)双任务详解 【免费下载链接】layoutlmv3-base 项目地址: https://ai.gitcode.com/hf_mirrors/microsoft/layoutlmv3-base layoutlmv3-base 是微软(Micro…

番茄小说搜索为何突然失灵:Tomato Novel Downloader 搜索功能换源的完整复盘

番茄小说搜索为何突然失灵:Tomato Novel Downloader 搜索功能换源的完整复盘

2026/8/23 15:03:06

番茄小说搜索为何突然失灵:Tomato Novel Downloader 搜索功能换源的完整复盘 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 副标题:小说下载器第三方 …

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑

2026/8/23 14:53:06

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…