SHACL 能否表达对整个数据范围的约束?

Can SHACL express constraints about the entire data scope?

是否可以使用 SHACL 来制定关于整个数据范围的约束?

例如,我可以要求数据中存在符合特定形状的三元组吗?

我想到的代码示例:

# DEMO code, currently raises an error!!

@prefix ex: <http://example.org/ns#> .
@prefix sh:   <http://www.w3.org/ns/shacl#> .

ex:ObligatoryShape
    a sh:NodeShape ;
    minCount 1 . # What I want

我的想法是,对于每个不包含至少一个符合 ex:ObligatoryShape 的 数据三元组 实例的数据图,上面的代码都会引发错误 --这包括空数据图。

通常,SHACL 验证需要提供起点的目标语句。

如果您没有任何特定的目标节点自然会作为验证的触发器,请使用类似

的东西
ex:MyShape
    sh:targetNode ex:DummyNode ;
    sh:sparql [ ... ] .

您最初的问题没有提供足够的详细信息来说明您具体要测试什么 - "an instance of a shape" 是什么?也许你的意思是 "does my graph contain any instance of class X"。以下形状检查是否至少有一个 Person 实例:

ex:PersonCountShape
    a sh:NodeShape ;
    sh:targetNode ex:Person ;
    sh:property [
        sh:path [ sh:inversePath rdf:type ] ;
        sh:minCount 1 ;
    ] .

也许您的数据形状具有相似的三元组,可以用作起点。上面我们使用了 rdf:type 三元组,但通常 sh:targetSubjectsOf 和 sh:targetObjectsOf 是有帮助的。