shacl - 如何创建 SHACL 规则以从 rdfs:subClassOf 推断 rdf:type
问题描述
为了根据我的 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
选项)。
推荐阅读
- python - 从 Scrapy 将数据插入数据库时使用 Django 信号
- c# - Percentage to Factor
- sql - PostgreSQL / Oracle => 查询对分层值进行分组和计数
- python - Pandas DataFrame subtract a series using groupby classification
- mongodb - Calculate Average Duration from a Series of Dates
- php - How change column in laravel model?
- scala - 玩 Akka Actors 网络和非网络应用程序一起工作
- authentication - AspNetCore SignalR 1.0.0-rc1-final NTLM/协商身份验证与 C# 托管客户端
- python-2.7 - AttributeError:“模块”对象没有属性“CAN_RAW”
- php - 从 db 中选择不同的值