繁体   English   中英

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

[英]SHACL validate existing domain and range definitions?

我想使用 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 (和范围)的通用 SHACL 形状,然后使用 SPARQL 约束来检查是否没有一个 class 域 class 以外的具有给定属性值的域。 最终结果将是一次检查所有 rdfs:domain 语句。

但可以说 RDFS 应该不理会。 如果您想使用封闭世界语义,您应该使用为此目的而设计的语言,即 SHACL。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM