2

是否可以使用 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 的数据三元组实例的数据图引发错误——这包括空数据图。

4

1 回答 1

5

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

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

ex:MyShape
    sh:targetNode ex:DummyNode ;
    sh:sparql [ ... ] .

您最初的问题没有提供有关您正在测试的具体内容的足够详细信息 - 什么是“形状的实例”?也许您的意思是“我的图表是否包含 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 很有帮助。

于 2019-04-25T06:20:42.017 回答