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 是有帮助的。
是否可以使用 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 是有帮助的。