簡體   English   中英

如何創建 SHACL 規則以從 rdfs:subClassOf 推斷 rdf:type

[英]How to create a SHACL rule to infer rdf:type from rdfs:subClassOf

為了根據我的 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 + SPARQL 是可能的,因為這會使事情變得更簡單?

您可以使用pySHACL並將規則放入本體文件中,因為 pySHACL 可以在應用 SHACL 驗證器之前運行本體規則/推理(請參閱-i-e選項)。

鑒於以下引用中的“可能”,@NicholasCar 先前回答中的建議是可靠的 IMO。

在這里回答的目的,只是為了證實和擴大最近的經驗。

關於SHACL 和 RDFS 推理之間關系的 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 ] )

在大多數 SHACL 實現中,我玩過基本的 rdfs 類型蘊涵工作(obv IFF rdf:type/rdfs:subClassOf*路徑對 SHACL 驗證器可見),所以(rdf:type [ sh:zeroOrMorePath rdfs:subClassOf ])不是明確需要的。

當您嘗試將高級路徑填充到形狀中時會出現問題 - 例如,按照此示例強制圖形包含至少一個抽象類型的實例:

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

...在許多 SHACL 驗證實現中對我不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM