首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHACL验证现有的域和范围定义?

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

Stack Overflow用户
提问于 2022-01-20 14:21:11
回答 1查看 73关注 0票数 0

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

现有定义

代码语言:javascript
复制
:prop1 a owl:ObjectProperty;
       rdfs:domain ?A;
       rdfs:range ?B.

在SHACL

代码语言:javascript
复制
: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.

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 02:23:14

让我首先说,rdfs:domain和rdfs:range不是约束,也不是您所暗示的。他们只是在做出推论。尽管如此,许多人在过去仅仅因为没有其他建模语言而使用它们来“表示”约束。有关背景,请参见

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

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

但可以说,RDFS应该被置之不理。如果您想要使用封闭世界的语义,那么您应该使用一种为此目的而设计的语言,即SHACL。

(顺便说一句,如果你想要更高的带宽来讨论这些事情,https://twitter.com/HolgerKnublauch/status/1461590465304662019)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70787874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档