SHACL 可以表达对整个数据范围的约束吗?

Jer*_*ane 2 rdf turtle-rdf shacl

是否可以使用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
Run Code Online (Sandbox Code Playgroud)

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

小智 6

一般来说,SHACL 验证需要提供起点的目标语句。

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

ex:MyShape
    sh:targetNode ex:DummyNode ;
    sh:sparql [ ... ] .
Run Code Online (Sandbox Code Playgroud)

您最初的问题没有提供足够的详细信息来说明您正在测试的具体内容 - 什么是“形状的实例”?也许您的意思是“我的图表是否包含 X 类的任何实例”。以下形状检查是否至少有一个 Person 实例:

ex:PersonCountShape
    a sh:NodeShape ;
    sh:targetNode ex:Person ;
    sh:property [
        sh:path [ sh:inversePath rdf:type ] ;
        sh:minCount 1 ;
    ] .
Run Code Online (Sandbox Code Playgroud)

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