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

为何我的SHACL校验未按预期生效?序列路径写法问题求助

问题根源

你的SHACL规则结构不符合规范逻辑,两处错误导致校验失败:

  1. ex:ColorProperty作为sh:property声明的属性形状,缺少必填的sh:path属性,校验器无法确定需要校验目标节点的哪个属性。
  2. 你把序列路径写在了sh:qualifiedValueShape内部,该位置的sh:path是用来定义内嵌形状的属性校验路径,而非外层属性形状的取值路径,完全不符合你的业务逻辑。

修复方案

提供两种符合需求的正确写法,任意一种都可以实现「验证ex:John至少绘制2个红色球」的规则:

方案1:序列路径直接统计(写法简洁)

@prefix ex: <http://datashapes.org/sh/tests/core/path/path-sequence-003.test#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ex:paintNodeShape
  rdf:type sh:NodeShape ;
  sh:targetNode ex:John ;
  sh:property [
    # 序列路径直接取所有ex:paint关联节点的ex:ballColor值
    sh:path (ex:paint ex:ballColor) ;
    # 值为Red的结果至少有2个
    sh:minCount 2 ;
    sh:hasValue "Red" ;
  ] .

方案2:嵌套属性形状校验(分层逻辑清晰)

@prefix ex: <http://datashapes.org/sh/tests/core/path/path-sequence-003.test#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ex:paintNodeShape
  rdf:type sh:NodeShape ;
  sh:targetNode ex:John ;
  sh:property [
    sh:path ex:paint ;
    # 校验ex:paint的取值中至少有2个符合下方定义的形状
    sh:qualifiedMinCount 2 ;
    sh:qualifiedValueShape [
      sh:property [
        sh:path ex:ballColor ;
        sh:hasValue "Red" ;
      ] ;
    ] ;
  ] .

替换你原有shacl.ttl的内容后重新校验即可通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:04