对于具有属性限制的继承类,SHACL 中存在 sh:close true 问题

问题描述 投票:0回答:1

将 SHACL 与

sh:closed true
与继承结合使用时遇到问题。具体来说,当子类具有超类没有的属性时,就会出现问题。

这是一个本体示例:

onto:prop a owl:DatatypeProperty .

onto:SuperClass a owl:Class .

onto:SubClass
  a               owl:Class ;
  rdfs:subClassOf onto:SuperClass, 
              [ 
                  a owl:Restriction ;
                  owl:onProperty onto:Prop ;
                  owl:cardinality 1
                  ] .

示例数据:

此陈述应评估为正确:

ex:ExampleCorrect a onto:SubClass ;
  onto:prop "Text" .

但是,这些应该是不正确的:

ex:ExampleWrong a onto:SubClass ;
  onto:other 1 .

ex:ExampleWrongSuperClass a onto:SuperClass ;
  onto:prop "Text" .

解决方案:

如果我想阻止使用其他属性,我将构造这些形状类型:

onto:SuperClass_Shape
  a              sh:NodeShape ;
  sh:closed      true ;
  sh:targetClass onto:SuperClass .

onto:SubClass_Shape
  a              sh:NodeShape ;
  sh:targetClass onto:SubClass ;
  sh:closed      true ;
  sh:property    [
                   a           sh:PropertyShape ;
                   sh:maxCount 1 ;
                   sh:minCount 1 ;
                   sh:path     onto:prop ;
                   sh:severity sh:Violation
                 ] .

但是因为

onto:SuperClass_Shape
没有枚举属性
onto:prop
并且应用了
sh:closed true
,所以这会导致违规。

我知道也可以只针对一个节点,而不是像上面那样针对整个类。

onto:SubClass_Shape
  a             sh:NodeShape ;
  sh:targetNode ex:ExampleCorrect .

但是我想同时评估数千个节点。对我来说,枚举所有数据 IRI 似乎不是一个好的解决方案。

我明白我的目的与SHACL和RDF继承的逻辑有些矛盾。

如何构造 SHACL 形状以允许子类拥有自己的属性而不违反超类的封闭形状限制?

我想防止所有类中出现额外的属性,但仍然允许子类灵活地定义自己的属性。

如有任何建议或见解,我们将不胜感激!

rdf rdfs shacl topbraid-composer
1个回答
0
投票

sh:close 的设计(不幸的是)没有考虑子类关系。但很多人都遇到过类似的问题,你也遇到过,并且有扩展 dash:closeByTypes 来解决它。

https://datashapes.org/constraints.html#ClosedByTypesConstraintComponent

要使用它,您需要一个支持 SHACL-SPARQL 的 SHACL 引擎。

即将推出的 SHACL 1.2 WG 可能会将类似的内容带入 SHACL 核心词汇表中,请参阅 https://github.com/w3c/shacl/issues/43

© www.soinside.com 2019 - 2024. All rights reserved.