是否可以使用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 [ ... ] .
您的原始问题没有提供有关您正在测试的具体内容的足够详细信息 - 什么是“形状实例”?也许你的意思是“我的图表是否包含任何X类实例”。以下形状检查是否至少有一个Person实例:
ex:PersonCountShape
a sh:NodeShape ;
sh:targetNode ex:Person ;
sh:property [
sh:path [ sh:inversePath rdf:type ] ;
sh:minCount 1 ;
] .
也许你的数据形状有类似的三元组,可以用作起点。上面我们使用了rdf:type triples,但是经常sh:targetSubjectsOf和sh:targetObjectsOf很有帮助。