SHACL sh:qualifiedValueShape隐式规则与节点类型判定疑问
指定数量的值节点必须符合的形状。形状中sh:qualifiedValueShape的取值必须是格式良好的形状。节点形状不可设置sh:qualifiedValueShape属性值,它是sh:QualifiedMinCountConstraintComponent和sh:QualifiedMaxCountConstraintComponent的必填参数。
问题核心解答
sh:qualifiedValueShape [ sh:class ex:Finger ]的写法完全符合SHACL规范,不存在合规性问题,相关规则说明如下:
形状类型的隐式推断规则
SHACL 允许省略形状的
rdf:type声明,无需显式写a sh:NodeShape或a sh:PropertyShape,系统会自动根据结构判定形状类型:- 包含
sh:path属性的形状,判定为属性形状 - 不包含
sh:path属性的形状,判定为节点形状
你提到的空白节点仅包含sh:class约束、没有sh:path属性,属于合法的节点形状,不需要关联任何path。
- 包含
两种
sh:qualifiedValueShape用法的差异两个示例的写法都是合法的,差异仅在于约束的目标不同:
- 第一个示例中
sh:qualifiedValueShape的值是属性形状:约束目标是ex:parent属性值节点的下属属性,要求parent值节点的ex:gender属性值为ex:female,因此需要额外加sh:path ex:gender指定下一级路径 - 第二个示例中
sh:qualifiedValueShape的值是节点形状:约束目标是ex:digit属性的值节点本身,要求值节点必须属于ex:Finger类,不需要额外路径,因此不需要加sh:path
- 第一个示例中
示例逻辑验证
第二个示例的约束逻辑完全自洽:要求
ex:Hand类实例的ex:digit属性最多有5个值,其中必须恰好有1个值是ex:Thumb类实例、恰好有4个值是ex:Finger类实例,sh:qualifiedValueShapesDisjoint true保证不会有值同时被两个规则统计,两类实例合计刚好5个,符合上层的数量约束。
内容的提问来源于stack exchange,提问作者MaatDeamon
相关产品推荐
相关产品推荐

