Rdf SHACL能否表达关于整个数据范围的约束?
是否可以使用SHACL来制定关于整个数据范围的约束 例如,我可以要求数据中存在符合特定形状的三元组吗 我想到的一个代码示例:Rdf SHACL能否表达关于整个数据范围的约束?,rdf,turtle-rdf,shacl,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 ; min
# 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:OblicationShape的数据三元组实例-这包括空数据图。通常,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通常都很有用。谢谢,这解决了我的问题。我对这个问题稍加修改以更正我的术语。我仍然对这个解决方案的有效性感到惊讶。如果图中没有符合sh:targetNode ex:Person的节点,如何检查节点的属性是否符合minCount约束?显然,属性的最小约束渗透到了应该评估其属性的节点的最小要求?我希望能参考一些背景解释。ShaclW3C规范可能没有直接解释这些东西-它只是一个正式的文档,可以从中推断出这些细节。简而言之,没有节点存在的概念,因此即使节点没有出现在任何三元组中,它仍然可以用作目标节点。这是由sh:targetNode定义的,它只是将其对象添加到目标节点集中。