澄清 Shacl sh:qualifiedValueShape

问题描述

sh:qualifiedValueShape 状态的定义:

指定数量的值节点需要符合的形状。形状中 sh:qualifiedValueShape 的值必须是格式良好的形状。节点形状不能有 sh:qualifiedValueShape 的任何值。这是 sh:QualifiedMinCountConstraintComponent 和 sh:QualifiedMaxCountConstraintComponent 的强制参数。

然后我们有下面的例子

ex:QualifiedValueShapeExampleShape
    a sh:NodeShape ;
    sh:targetNode ex:QualifiedValueShapeExampleValidResource ;
    sh:property [
        sh:path ex:parent ;
        sh:minCount 2 ;
        sh:maxCount 2 ;
        sh:qualifiedValueShape [
            sh:path ex:gender ;
            sh:hasValue ex:female ;
        ] ;
        sh:qualifiedMinCount 1 ;
    ] .
ex:HandShape
    a sh:NodeShape ;
    sh:targetClass ex:Hand ;
    sh:property [
        sh:path ex:digit ;
        sh:maxCount 5 ;
    ] ;
    sh:property [
        sh:path ex:digit ;
        sh:qualifiedValueShape [ sh:class ex:Thumb ] ;
        sh:qualifiedValueShapesdisjoint true ;
        sh:qualifiedMinCount 1 ;
        sh:qualifiedMaxCount 1 ;
    ] ;
    sh:property [
        sh:path ex:digit ;
        sh:qualifiedValueShape [ sh:class ex:Finger ] ;
        sh:qualifiedValueShapesdisjoint true ;
        sh:qualifiedMinCount 4 ;
        sh:qualifiedMaxCount 4 ;
    ] .

虽然我对这两个示例都了解得很好,但我不明白的是,第二个示例在技术上如何与规范相匹配。我更特别指出

sh:qualifiedValueShape [ sh:class ex:Finger ] 

就是这样。虽然在

sh:qualifiedValueShape [
            sh:path ex:gender ;
            sh:hasValue ex:female ;
        ] ;

我们可以看到空白节点是一个属性形状,我不知道空白节点是什么形状

sh:qualifiedValueShape [ sh:class ex:Finger ] 

确实代表。

有什么隐含的东西我在这里看不到吗? sh:class 用于属性形状,那么这里的实际路径是什么?

解决方法

[ sh:class ex:Finger ] 约束是一个隐式节点形状(因为它没有 sh:path 三元组)。这意味着 ex:digit 的四个值必须符合指定的形状,即它们必须是 ex:Finger 的实例。节点形状直接针对节点进行评估,并且在该阶段路径已经通过周围的属性形状进行了评估。