Skip to content

内嵌资源

innerResources 表示把另一个元数据资源的完整内容嵌入当前文件。它不是外部资源引用,不通过 targetPath 指向外部文件,也不写入当前文件的 referenceResources

常见场景包括页面中的内嵌加工、内嵌 SQL 数据集、临时模型或只归属于当前页面的局部资源。

使用方式

使用内嵌资源的位置通常只保存一个代号,完整资源内容集中放在 innerResources 中。

jsonc
{
  "sources": [
    {
      "id": "topStores",
      "name": "门店销售 TopN",
      "modelType": "dataflow",
      "content": "tbl1"
    }
  ],
  "innerResources": {
    "tbl1": {
      "type": "tbl",
      "content": {
        "version": "5.8.2",
        "settings": {},
        "sources": []
      }
    }
  }
}

上例中,sources[0].content 保存 tbl1,完整加工内容写在 innerResources.tbl1.content

和外部引用的区别

referenceResourcesinnerResources 都可能通过代号被业务字段使用,但含义不同:

结构保存内容是否外部依赖是否使用 targetPath
referenceResources外部资源的路径、类型和引用用途。
innerResources被嵌入资源的完整元数据内容。

查找一个代号时,先看 innerResources 是否有同名条目;没有时,再看 referenceResources。这个顺序可以避免把内嵌资源误判为外部文件。

内嵌资源也会继续引用外部资源

内嵌资源的 content 本身仍是一个 Super JSON 资源。它如果读取外部模型、引用脚本、使用图片或关联其他资源,应在自己的 content.referenceResources 中记录这些外部依赖。

不要把内嵌资源内部使用的外部依赖直接写到所属文件这一层。所属文件只负责记录内嵌资源本身,内嵌资源内部的引用由内嵌资源自己的内容维护。

直接编辑规则

直接编辑 innerResources 时按这个顺序处理:

  1. 先确认当前文件类型和使用点字段,例如数据集可能用 content 保存内嵌资源代号。
  2. 新增内嵌资源时,同时新增使用点字段和 innerResources[refId]
  3. innerResources[refId].type 写内嵌资源的文件类型,content 写该资源完整 Super JSON 内容。
  4. 如果内嵌资源内部引用外部资源,在 innerResources[refId].content.referenceResources 中维护。
  5. 删除内嵌资源前,先确认没有业务字段继续使用这个代号。
  6. 移动或重命名外部资源不会直接影响内嵌资源代号,但可能影响内嵌资源内容里的外部引用。

应该查看的 DTS

DTS重点查看
types/meta/superjson/base.d.tsSuperJSON.innerResources 的根字段说明。
types/meta/superjson/referenceResources.d.tsInnerResource 的结构定义。
具体文件类型 DTS哪个业务字段保存内嵌资源代号。

外部资源引用的写法见资源引用与路径

微信公众号微信公众号:山川软件