百积木文档
开发指南类型系统

命名类型与精确引用

Type Definition 5.0.0 的 dataSchema、interfaces、标准数据引用与平台接口引用。

Type Definition 提供稳定身份、命名与精确版本。数据正文是独立的 JSON Schema 资源,接口仍使用平台契约。创建与发布见 Type Definition 开发。

当前共享文档

{
  "schemaVersion": "5.0.0",
  "kind": "INTERFACE",
  "rootType": "ProductProvider",
  "dataSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "baijimu-type://example/123e4567-e89b-12d3-a456-426614174000@1.2.3",
    "$defs": {
      "Product": {
        "type": "object",
        "properties": { "sku": { "type": "string" } },
        "required": ["sku"],
        "additionalProperties": false
      }
    }
  },
  "interfaces": {
    "ProductProvider": {
      "methods": [
        {
          "name": "list",
          "async": false,
          "param_definitions": [],
          "return_type": {
            "@type": "JsonSchema",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "baijimu-type://example/123e4567-e89b-12d3-a456-426614174000@1.2.3#/$defs/Product"
              }
            }
          }
        }
      ],
      "events": []
    }
  }
}
  • schemaVersion 为 5.0.0,不等于业务资源版本。
  • dataSchema 必须是对象形式的标准 Schema 资源;公共数据成员放在 $defs 中。注册的根 $id 必须匹配该定义的精确资源身份。
  • interfaces 是接口名到 Interface 正文的映射;其中的正文不带 @type。独立 Type 位置的 Interface 才带标签。
  • kind: "INTERFACE" 的 rootType 选择 interfaces 中的成员;DATA_TYPE 选择 dataSchema.$defs 中的成员;ENUM 选择其中声明了非空 enum 的成员。
  • DATA_TYPE 仍是资源分类枚举,不表示旧 @type: "DataType" 格式仍可用。
  • 数据成员与接口成员不得重名。dataSchema 和 interfaces 都必须声明;无数据成员可用 {},无接口可用 {}。
  • 不再使用统一的 types 命名表。methods / events 是数组,$defs / interfaces / properties 是映射。

示例的环境、UUID、版本和成员只说明语法。真实身份由类型目录与资源发布结果确定,不能直接复制示例 $id 发布自己的资源。

数据引用与接口引用

用途引用解析范围
同一 Schema 内数据定义{"$ref":"#/$defs/Product"}当前 Schema 资源的 $defs
跨资源数据定义{"$ref":"baijimu-type://example/123e4567-e89b-12d3-a456-426614174000@1.2.3#/$defs/Product"}精确版本的数据 Schema
已声明 anchor{"$ref":"#Product"}当前 Schema 中的 $anchor: "Product",不是平台成员名
同一文档的接口{"@type":"RefType","ref":"#ProductProvider"}当前文档的 interfaces
跨文档接口{"@type":"RefType","ref":"baijimu-type://example/123e4567-e89b-12d3-a456-426614174000@1.2.3#ProductProvider"}精确版本的接口成员

接口里的每个内联 schema 有独立根作用域,局部 #/$defs/Product 不会自动指向外层文档的 dataSchema。上例因此使用完整数据 URI。$ref 指向数据 Schema,不能指向整个文档 envelope。

environmentKey + typeDefinitionId 标识定义,精确 semanticVersion 锁定不可变资源,fragment 标识数据路径、anchor 或接口成员。不能用 latest、版本范围、工作区 ID 或可变名称替代。

引用 URI 不授予权限,不会自动联网下载。调用方必须经身份与权限核验提供完整资源集合;库自身不持有网络、缓存或存储。数据递归遵循 JSON Schema 引用图,不能沿用旧类型的“所有循环都必须展开”规则;无实例进展的引用环仍拒绝。接口引用由平台按接口解析规则检查。

Module 导入声明

{
  "typeImports": {
    "contracts": {
      "locator": {
        "environmentKey": "example",
        "typeDefinitionId": "123e4567-e89b-12d3-a456-426614174000"
      },
      "semanticVersion": "1.2.3"
    }
  }
}

数据位置使用 $ref:

{
  "@type": "JsonSchema",
  "schema": { "$ref": "baijimu-type-import://contracts#/$defs/Product" }
}

接口位置使用 RefType:

{ "@type": "RefType", "ref": "baijimu-type-import://contracts#ProductProvider" }

别名只在当前 Module 作者作用域生效,必须存在于 typeImports。发布器展开为精确资源 URI,并保留数据引用的 JSON Pointer / anchor,不把数据引用改成平台接口引用。已发布共享文档不能依赖某个 Module 的别名。

发布新 Type Definition 不会自动替换旧 Module 的精确引用;Bundle 和 Runtime 不负责猜测类型版本。类型可读也不等于有权调用接口实现。

本页内容