Rdf 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

是否可以使用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: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定义的,它只是将其对象添加到目标节点集中。