【问题标题】:How to create a SHACL rule to infer rdf:type from rdfs:subClassOf如何创建 SHACL 规则以从 rdfs:subClassOf 推断 rdf:type
【发布时间】:2020-03-26 22:10:52
【问题描述】:

为了根据我的 SHACL 验证形状 V 验证我的 RDF 图,我想推断出一些三元组以保持我的形状简单。特别是,我需要实现的规则之一是(在伪代码中):

(?s, rdf:type, :X) <-- (?s, rdfs:subClassOf, :Y)

我尝试了几种实现,最终得到了这个三重规则(及其变体):

@prefix sh:            <http://www.w3.org/ns/shacl#> .
@prefix rdf:           <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:          <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <http://example.com/ex#> .
:s
    a              sh:NodeShape ;
    sh:targetClass rdfs:Resource ;
    sh:rule        [ 
                     a            sh:TripleRule ;
                     sh:subject   sh:this ;
                     sh:predicate rdf:type ;
                     sh:object    :X ;
                     sh:condition [ sh:property [ sh:path     rdfs:subClassOf ;
                                                  sh:hasValue :Y ] ]
                   ] .

但是规则不会为数据图推断:A rdf:type :X .

:A rdfs:subClassOf :Y .

(针对https://github.com/TopQuadrant/shacl 执行)。可以使用 SPARQL 规则解决这个问题,所以我的问题是是否也可以通过三重规则来解决这个问题。感谢您的提示!

【问题讨论】:

    标签: shacl


    【解决方案1】:

    您为什么不将推理规则和验证分开,因为您已经注意到使用 SHACL + SPARQL 是可能的,因为这会使事情变得更简单?

    您可以使用 pySHACL 并将规则放入本体文件中,因为 pySHACL 可以在应用 SHACL 验证器之前运行本体规则/推理(请参阅 -i-e 选项)。

    【讨论】:

      【解决方案2】:

      鉴于以下引用中的“MAY”,@NicholasCar 先前回答中的建议是可靠的 IMO。

      在这里回答的目的,只是为了佐证和扩展最近的经验。

      关于 Relationship between SHACL and RDFS inferencing 的 2017 W3C SHACL 文档:

      SHACL 实现可以(但不是必须)支持蕴涵 制度。如果形状图包含任何带有谓词的三元组 sh:entailment 和对象 E 和 SHACL 处理器不支持 E 作为给定数据图的蕴涵机制,然后处理器 必须发出失败信号。

      (AFAICT 短语“权利制度”仅指 SPARQL 作为标准)

      查看Property Paths上的部分:

      SPARQL 属性路径:rdf:type/rdfs:subClassOf*

      SHACL 属性路径:(rdf:type [ sh:zeroOrMorePath rdfs:subClassOf ])

      在我使用基本 rdfs 类型蕴涵工作的大多数 SHACL 实现中(obv IFF,SHACL 验证器可以看到 rdf:type/rdfs:subClassOf* 路径),因此不需要明确需要 (rdf:type [ sh:zeroOrMorePath rdfs:subClassOf ])

      当您尝试将 advanced 路径填充到形状中时,问题就出现了 - 例如跟随this example 强制图至少包含一个抽象类型的实例:

      sh:path [ sh:inversePath ( rdf:type [ sh:zeroOrMorePath rdfs:subClassOf ] ) ] ;
      

      ...在许多 SHACL 验证实现中对我不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多