SHACL是否验证现有的域和范围定义



我想用SHACL验证现有本体和知识库的现有rdfs:domain和rdfs:range语句。然而,使用SHACL这样做似乎非常冗长。

现有定义

:prop1 a owl:ObjectProperty;
rdfs:domain ?A;
rdfs:range ?B.

在SHACL

:AShape a sh:NodeShape;
sh:targetClass :A;
sh:property [sh:path :prop1];
sh:closed true.
:ADomainShape a sh:NodeShape;
sh:targetSubjectsOf :prop1;
sh:class :A.
:prop1RangeShape a sh:NodeShape;
sh:targetObjectsOf :prop1;
sh:ClassB.

当你有几十个属性时,这会在原始域和范围语句中已经声明的内容上添加大量的仪式。虽然使用脚本或多行编辑器可以加快这个过程,但对我来说似乎仍然没有必要。有没有一种方法可以告诉像PySHACL这样的SHACL验证器只验证现有的域和范围语句,而不需要所有额外的三元组?

让我首先说rdfs:domain和rdfs:range不是约束,也不是你所暗示的。他们只是在做推论。话虽如此,许多人过去习惯于";平均值;仅仅是因为没有其他建模语言。有关背景信息,请参见

https://www.topquadrant.com/owl-blog/

如果不想将RDFS三元组复制为单独的SHACL约束,可以编写一个具有sh:targetSubjectsOf RDFS:domain(和range(的通用SHACL形状,然后使用SPARQL约束来检查除了具有给定属性值的域类之外,是否没有其他类的实例。最终的结果是,所有rdfs:domain语句都将同时被检查。

但可以说,应该让RDFS独处。如果你想使用封闭世界语义,你应该使用为此目的设计的语言,即SHACL。

(顺便说一句,有一个Discord小组,以防你想要更高的带宽来讨论这些事情https://twitter.com/HolgerKnublauch/status/1461590465304662019)

相关内容

  • 没有找到相关文章

最新更新