LinkType Spec

表达对象之间关联类型的定义语义。LinkType 以 name 作为自然键,隶属于源对象(source object),通过 sourceObjectRef / targetObjectRef 引用参与关联的两个对象类型。

资源类型与自然键

资源类型自然键说明
LinkTypename关联类型名称,在源对象下唯一

LinkTypeSpecDTO

字段类型说明
namestring名称,作为自然键
displayNamestring显示名称
descriptionstring未使用。描述占位字段,当前写入服务不消费。
sourceObjectRefResourceRefDTO源对象引用
targetObjectRefResourceRefDTO目标对象引用
cardinalityCardinalityEnum关联基数
sourceRolestring源角色,写入 join_condition_json.sourceRole
targetRolestring目标角色,写入 join_condition_json.targetRole
isHierarchicalboolean是否为层级关系,写入 join_condition_json.hierarchical
semanticTypestring语义类型:CAUSAL(因果)/ COMPOSITIONAL(组成)/ REFERENCE(引用记录)/ HIERARCHICAL(层级)。可选;缺失时运行态按 linkName 命名启发式推导
maxDepthinteger最大深度,写入 join_condition_json.maxDepth
joinJoinSpecDTO连接规格
propertiesList<PropertySpecDTO>关联属性列表,写入 join_condition_json.properties

关联基数(CardinalityEnum)

枚举值说明
ONE_TO_ONE一对一
ONE_TO_MANY一对多
MANY_TO_MANY多对多

源/目标对象引用(ResourceRefDTO)

写入服务通过 name 解析对象名称;name 为空时回退使用 apiName。kind 当前不参与解析。

字段类型说明
kindstring未使用。资源类型,通常填 ObjectType。
namestring资源自然键(名称),优先使用
apiNamestringAPI 名称,name 为空时回退使用

连接规格(JoinSpecDTO)

字段类型说明
joinTypestring连接类型:DIRECT(直接关联) / BRIDGE(桥接关联);为空时默认 DIRECT
conditionsList<JoinConditionDTO>连接条件列表;DIRECT 关联时必填
bridgeBridgeJoinDTO桥接连接配置;BRIDGE 关联时必填

连接条件(JoinConditionDTO)

DIRECT 关联时,定义源对象属性与目标对象属性的等值连接条件。

字段类型说明
sourcePropertyApiNamestring源属性 API 名称
operatorstring操作符,当前消费为等值比较(如 EQUALS)
targetPropertyApiNamestring目标属性 API 名称

桥接连接(BridgeJoinDTO)

BRIDGE 关联时,定义通过桥接数据集(中间表)实现的多对多关联。

字段类型说明
bridgeDatasetNamestring桥接数据集名称
sourceToBridgeList<BridgeMappingDTO>源对象到桥接表的映射
bridgeToTargetList<BridgeMappingDTO>桥接表到目标对象的映射

桥接映射(BridgeMappingDTO)

字段类型说明
propertyApiNamestring属性 API 名称
bridgeColumnNamestring桥接表列名

关联属性(properties)

properties 为 List<PropertySpecDTO>,表达关联自身的属性(如关系的权重、生效时间等)。字段语义与对象属性一致,详见 Property Spec。

消费位置

  • foundry-ontology-biz: OntologyDomainProjectionAdapter.LinkTypeProjectionHandler 解析 sourceObjectRef / targetObjectRef,并调用 ontologyApi.upsertLink。
  • foundry-ontology-biz: OntologyDefinitionWriteService.upsertLink 将 name / displayName / targetObjectRef / cardinality 投影到 fd_ontology_link。
  • foundry-ontology-biz: OntologyDefinitionWriteService.joinConditionFromSpec 将 sourceRole / targetRole / isHierarchical / maxDepth / join / properties 序列化为 join_condition_json。
  • foundry-ontology-biz: TraverseExecutor / DefaultQueryPlanner 读取 join_condition_json.maxDepth 执行层级遍历。
  • foundry-analysis-biz / 归因与影响类算法:按 semanticType 选择边;缺失时按 linkName 命名启发式推导。
  • foundry-asset-biz: SpecToLegacyAssembler.assembleLinkCreateReq 映射到 LinkCreateReqDTO。

示例 YAML

DIRECT 关联

kind: LinkType
name: PlantHasLines
spec:
  name: PlantHasLines
  displayName: 工厂拥有产线
  sourceObjectRef:
    kind: ObjectType
    name: Plant
  targetObjectRef:
    kind: ObjectType
    name: ProductionLine
  cardinality: ONE_TO_MANY
  sourceRole: plant
  targetRole: lines
  isHierarchical: false
  join:
    joinType: DIRECT
    conditions:
      - sourcePropertyApiName: plant_id
        operator: EQUALS
        targetPropertyApiName: plant_id

BRIDGE 关联

kind: LinkType
name: LineUsesMaterials
spec:
  name: LineUsesMaterials
  displayName: 产线使用物料
  sourceObjectRef:
    kind: ObjectType
    name: ProductionLine
  targetObjectRef:
    kind: ObjectType
    name: Material
  cardinality: MANY_TO_MANY
  sourceRole: productionLine
  targetRole: materials
  join:
    joinType: BRIDGE
    bridge:
      bridgeDatasetName: line_material_bridge
      sourceToBridge:
        - propertyApiName: line_id
          bridgeColumnName: line_id
      bridgeToTarget:
        - propertyApiName: material_id
          bridgeColumnName: material_id

示例 JSON

{
  "kind": "LinkType",
  "name": "PlantHasLines",
  "spec": {
    "name": "PlantHasLines",
    "displayName": "工厂拥有产线",
    "sourceObjectRef": {
      "kind": "ObjectType",
      "name": "Plant"
    },
    "targetObjectRef": {
      "kind": "ObjectType",
      "name": "ProductionLine"
    },
    "cardinality": "ONE_TO_MANY",
    "sourceRole": "plant",
    "targetRole": "lines",
    "isHierarchical": false,
    "join": {
      "joinType": "DIRECT",
      "conditions": [
        {
          "sourcePropertyApiName": "plant_id",
          "operator": "EQUALS",
          "targetPropertyApiName": "plant_id"
        }
      ]
    }
  }
}