【问题标题】:Can SHACL express constraints about the entire data scope?SHACL 能否表达对整个数据范围的约束?
【发布时间】:2019-04-24 11:28:37
【问题描述】:

是否可以使用 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 的 instance of 数据三元组的每个数据图,上述代码都会引发错误——这包括空数据图。

【问题讨论】:

    标签: rdf turtle-rdf shacl


    【解决方案1】:

    一般来说,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 约束?显然,属性的最小约束渗透到应该评估其属性的节点的最小要求?我将不胜感激(参考)对此的一些背景解释。
    • SHACL W3C 规范可能没有直接解释这些事情——它只是一个正式的文档,可以从中推断出这些细节。简而言之,没有节点存在的概念,所以即使一个节点没有出现在任何三元组中,它仍然可以用作目标节点。这是由 sh:targetNode 定义的,它只是将其对象添加到目标节点集。
    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2016-02-19
    • 2017-12-31
    相关资源
    最近更新 更多