为了根据我的 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 规则解决这个问题,所以我的问题是是否也可以通过三重规则来解决这个问题。感谢提示!