关于 odata-vocabularies-sync
用于维护 `packages/odata-vocabularies` 与上游 OData 词汇表同步的开发技能。它可更新已登记词汇表,也可按 JSON URL 添加新词汇表,并包含 README 核对和测试步骤。
主要功能
- 01更新已登记词汇表资源
- 02通过 JSON URL 添加词汇表
- 03维护命名空间与别名登记
- 04核对 README 支持列表
- 05运行测试并更新快照
适用场景
- 01同步上游词汇表的最新版本
- 02将新的 OASIS 或 SAP 词汇表加入包
- 03检查并补全支持词汇表列表
- 04更新资源后验证测试与快照
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sap/ open-ux-tools --skill odata-vocabularies-sync安装后在 Claude Code 中输入/odata-vocabularies-sync确认已加载。
详细介绍
odata-vocabularies-sync
使 packages/odata-vocabularies 包与上游 OData 词汇表源保持同步。
- 不带参数 — 将所有现有词汇表资源文件更新到最新发布版本。
- 带 URL 参数 — 先注册并添加新词汇表,然后更新所有内容。
所有文件编辑均相对于 packages/odata-vocabularies/ 进行。
注意:
com.sap.cds.vocabularies.*文件(ObjectModel、AnalyticsDetails)是手工编写的,不由此技能管理。不要尝试通过 URL 添加这些文件。
第 1 步 — 添加新词汇表(仅在提供 URL 参数时)
1a. 获取并检查词汇表 JSON
获取提供的 URL 中的 JSON(必须以 .json 结尾 — 更新工具不支持 XML URL)。提取:
namespace— 顶层 schema 对象的键(例如Org.OData.NewThing.V1或com.sap.vocabularies.NewThing.v1)alias— 该 schema 对象中$Alias的值(例如NewThing)
根据 namespace 确定词汇表系列:
- 以
Org.OData.开头 → OASIS 词汇表 - 以
com.sap.vocabularies.开头 → SAP 词汇表 - 以
com.sap.cds.开头 → CDS 词汇表 — 停止。 这些文件是手工编写的,不能通过此技能添加。向用户说明这一点。 - 其他任何情况 → 停止并请用户确认所属系列后再继续。
1b. 编辑 tools/update.ts
按字母顺序在现有条目中向 SUPPORTED_VOCABULARIES 添加一项:
'<namespace>': {
uri: '<the provided URL>'
},
注意: 条目可以包含
update: false,以固定该词汇表并将其排除在今后的自动更新之外(例如,com.sap.vocabularies.CDS.v1因为由人工维护而使用此设置)。正常自动更新时省略此字段。
1c. 编辑 src/resources/index.ts
完成全部六项添加。六项缺一不可 — 任何一项缺失都会导致运行时错误。
-
导入 — 按别名的字母顺序插入到单个导入代码块中(OASIS 和 SAP 导入按别名交错排列,而不是按系列分组):
import <Alias> from './<namespace>.js';使用 JSON 中的
$Alias值作为导入标识符。例外: 如果别名是保留的 JS 关键字或内置对象(例如JSON、Map、Error),则添加前缀,使其成为有效标识符(例如,JSON→ODataJSON)。同时检查现有导入中的先例 — 某些别名为简洁起见使用了缩写(例如,Authorization→Auth)。 -
Namespace 联合类型 — 添加到匹配的系列类型:
- OASIS →
OasisVocabularyNamespace - SAP →
SapVocabularyNamespace
| '<namespace>' - OASIS →
-
Alias 联合类型 — 添加到匹配的系列类型:
- OASIS →
OasisVocabularyAlias - SAP →
SapVocabularyAlias
| '<Alias>' - OASIS →
-
NAMESPACE_TO_ALIASMap:['<namespace>', '<Alias>'], -
ALIAS_TO_NAMESPACEMap:['<Alias>', '<namespace>'], -
vocabulariesRecord:'<namespace>': <Alias>,
1d. 编辑 src/loader.ts
按字母顺序将 namespace 添加到所属系列代码块中的 SUPPORTED_VOCABULARY_NAMESPACES:
'<namespace>',
1e. 编辑 README.md
按字母顺序将别名添加到 “Supported Vocabularies” 部分中正确的项目符号列表:
- OASIS namespace → OASIS Vocabularies 列表
- SAP namespace → SAP Vocabularies 列表
* <Alias>
第 2 步 — 运行更新工具
此操作会获取每个已注册词汇表(包括任何新添加的词汇表)的最新 JSON,并重新生成所有 src/resources/*.ts 资源文件。
从仓库根目录运行:
pnpm --filter @sap-ux/odata-vocabularies update:vocabularies
如果工具失败,请停止并在继续之前报告完整的错误输出。
步骤 3 — 审核并修正 README
对照已注册的词汇表检查 README,并补充所有缺少的条目。
-
阅读
src/resources/index.ts,收集NAMESPACE_TO_ALIAS中的所有命名空间,并按系列分类:- OASIS:以
Org.OData.开头的命名空间 - SAP:以
com.sap.vocabularies.开头,但不包括com.sap.vocabularies.CDS.v1 - 跳过所有
com.sap.cds.命名空间(这些是手动编写的,不会列在 README 中)
- OASIS:以
-
对于收集到的每个命名空间,阅读对应的生成资源文件
src/resources/<namespace>.ts,并提取$Alias值——这是 README 中用作显示名称的权威发布别名。 -
阅读
README.md,找到「支持的词汇表」下的两个项目符号列表:- OASIS 词汇表列表
- SAP 词汇表列表
-
对于尚未出现在对应列表中的每个别名,按字母顺序插入。
如果 README 已经完整,则无需操作。
步骤 4 — 运行测试并更新快照
pnpm --filter @sap-ux/odata-vocabularies test -- -u
报告所有与快照无关的测试失败。只有在词汇表内容确实发生变化时,才应更新快照(由更新工具检测到上游差异,或新增词汇表)。如果快照发生的变化超出已更新的内容,请在接受前检查差异——这可能表示存在回归。
步骤 5 — 汇报
总结完成的工作:
- 如果新增了词汇表:确认其命名空间、别名、所属系列以及所有变更的文件。
- 如果发现并补充了缺失的 README 条目,请列出这些条目。
- 列出更新工具重新生成的词汇表资源文件。
- 确认测试通过。