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

如何为关联Base Perspective的目标创建SHACL条件验证形状?

实现思路与方案

核心思路是利用SHACL的逻辑约束(sh:and/sh:or/sh:not)结合节点引用(sh:node),将目标是否关联Base Perspective作为前置条件,对连接验证规则做分支处理。

先明确判断逻辑

首先需要复用已定义的bso:BasePerspective规则,判断Strategic_Objective是否关联了Base Perspective:

# 辅助约束:判断目标是否关联至少一个Base Perspective
bso:LinkedToBasePerspective
  sh:path bso:contributesToPerspective ;
  sh:node bso:BasePerspective ;
  sh:minCount 1 .

这个约束的含义是:目标的contributesToPerspective属性至少指向一个满足bso:BasePerspective规则的视角(即该视角存在反向的isBaseFor关联)。


场景1:关联Base Perspective时,跳过连接验证

如果需求是「关联Base Perspective的目标无需满足连接要求,未关联的必须满足」,可以用sh:or组合两个分支:

bso:ConditionalConnectedObjectives
  a sh:NodeShape ;
  sh:targetClass bso:Strategic_Objective ;
  sh:or (
    # 分支1:关联了Base Perspective,无需验证连接
    [ sh:node bso:LinkedToBasePerspective ]
    # 分支2:未关联Base Perspective,必须满足原连接规则
    [
      sh:or (
        [sh:path bso:hasCauseEffectRelationship; sh:minCount 1]
        [sh:path [sh:inversePath bso:hasCauseEffectRelationship]; sh:minCount 1]
      ) ;
      sh:message "未关联Base Perspective的目标必须与其他战略目标建立连接" ;
    ]
  ) .

场景2:关联Base Perspective时,显示不同的验证提示

如果需求是「无论是否关联Base Perspective都需要验证,但提示信息/严重程度不同」,可以拆分为两个独立约束,用sh:condition控制生效条件:

针对未关联Base Perspective的目标(保留原规则提示)

bso:ConnectedObjectivesNonBase
  a sh:NodeShape ;
  sh:targetClass bso:Strategic_Objective ;
  sh:condition [
    sh:not [ sh:node bso:LinkedToBasePerspective ]
  ] ;
  sh:message "需要与其他战略目标建立连接" ;
  sh:or (
    [sh:path bso:hasCauseEffectRelationship; sh:minCount 1]
    [sh:path [sh:inversePath bso:hasCauseEffectRelationship]; sh:minCount 1]
  ) .

针对关联Base Perspective的目标(自定义提示/严重程度)

bso:ConnectedObjectivesBase
  a sh:NodeShape ;
  sh:targetClass bso:Strategic_Objective ;
  sh:condition [
    sh:node bso:LinkedToBasePerspective
  ] ;
  sh:message "关联Base Perspective的目标建议与其他战略目标建立连接" ;
  sh:severity sh:Warning ; # 可改为sh:Info降低提示等级
  sh:or (
    [sh:path bso:hasCauseEffectRelationship; sh:minCount 1]
    [sh:path [sh:inversePath bso:hasCauseEffectRelationship]; sh:minCount 1]
  ) .

关键注意事项

  1. 规则复用:通过sh:node bso:BasePerspective直接复用已定义的Base Perspective验证逻辑,避免重复编写,保证规则一致性。
  2. 停用原规则:使用新的条件规则时,记得将原有的bso:ConnectedObjectives设置为sh:deactivated true,避免重复验证。
  3. SHACL版本:sh:condition是SHACL 1.1的特性,确保你的验证引擎支持该版本。

内容的提问来源于stack exchange,提问作者António Antunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:24:53