You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扩展JSON基础Schema,自动为各子Schema添加公共属性?

解决JSON Schema通用属性复用与字段冲突问题

核心方案

把通用属性(比如isDisabled)抽离到基础Schema的基类中,让所有业务任务类型都继承这个基类,既避免重复定义,又解决同名字段冲突。

分步实现

1. 编写基础Schema

新建一个基础任务Schema(比如base-task.schema.json),把所有任务通用的属性都放在这里:

{
  "name": "baseTask",
  "uri": "http://some-company/schema/bpmn/base",
  "$schema": "http://json-schema.org/draft-07/schema",
  "description": "所有任务的通用属性集合",
  "prefix": "base",
  "xml": {
    "tagAlias": "lowerCase"
  },
  "types": [
    {
      "name": "BaseTask",
      "extends": ["bpmn:Task"],
      "properties": [
        {
          "name": "isDisabled",
          "isAttr": false,
          "description": "标记该任务是否禁用",
          "type": "Boolean"
        },
        {
          "name": "taskName",
          "description": "任务名称",
          "isAttr": true,
          "type": "String"
        }
        // 后续新增的通用属性都往这里加
      ]
    }
  ],
  "enumerations": [],
  "associations": []
}

2. 业务Schema继承基类

修改你的语音任务Schema,让业务类型继承基础的BaseTask,而不是直接继承bpmn:Task,这样就能自动拿到所有通用属性,不用再重复定义:

{
  "name": "interactiveVoice",
  "uri": "http://some-company/schema/bpmn/ivr",
  "$schema": "http://json-schema.org/draft-07/schema",
  "description": "语音播放任务专属属性",
  "prefix": "voice",
  "xml": {
    "tagAlias": "lowerCase"
  },
  "types": [
    {
      "name": "voiceFilePlayerTask",
      "extends": ["base:BaseTask"], // 替换成继承基础基类
      "properties": [
        {
          "name": "taskType",
          "description": "任务类型标识",
          "isAttr": true,
          "type": "String"
        }
        // 只保留业务独有的属性即可
      ]
    }
  ],
  "enumerations": [],
  "associations": []
}

3. 适配XML验证与渲染

因为你是基于XML流程渲染并验证Schema,需要注意两点:

  • 确保XML命名空间中正确引入基础Schema的uri
  • 确认你的XML解析工具支持Schema类型继承,能自动将基类的属性合并到业务类型对应的XML元素中

冲突解决原理

之前的同名字段冲突,是因为你在多个独立Schema中重复定义了isDisabled,导致Schema合并时出现重复声明。通过继承基类的方式,通用属性只在基础Schema中定义一次,所有业务类型通过继承复用,既不会重复定义,还能统一使用isDisabled这个通用字段,不用再给字段加任务类型后缀。

内容的提问来源于stack exchange,提问作者Shaan Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:35