rdfs:subPropertyOf 的 Shacl 处理

问题描述

我有以下 shacl 规范

efdn:Relation
  rdf:type owl:Class ;
  rdf:type sh:NodeShape ;
  rdfs:label "Relation"@en ;
  sh:property [
    sh:path efdn:nondirectionalLinkWith ;
    sh:NodeKind sh:IRI ;
    sh:maxCount 2 ;
    sh:minCount 2 ;
  ] ;
.

我的目标是表达一个 Relation 必须完全由 "nondirectionalLinkWith" 对象属性连接。更具体地说,我想表示它可以是 "nondirectionalLinkWith" 的任何 subPropertyOf。 换句话说,可以说,一个 Relation 对象必须通过 2 个无方向的 Link 连接。其中非定向链接是任何对象属性,它是 subPropertyOf "nondirectionalLinkWith"

1 ) 我想知道如何使用 shacl 来表达这一点。

到目前为止,我看到的唯一可能性是明确使用 RDFS reasoner。也就是说,虽然 Shacl 优雅地处理 rdfs:subClassOf,因此不需要使用 RDFS reasoner,但 rdfs:SubPropertyOf 似乎没有支持

在这里是否正确,或者有一种方法可以直接在 shacl 中表达这样的约束。

使用 RDFS reasoner 我们有:

Construct {
  :x1 :p1 :x2
} Where {
  :x1 :p2. :x2
  :p2 rdfs:subPropertyOf :p1. 
}

这允许然后验证关系。但是,我想知道我是否可以完全避免使用 RDFS reasoner 来处理这样一个简单的情况?如果它可以以某种方式用纯 shacl 表示,或者任何其他解决方法将不胜感激。

解决方法

首先注意约束属性sh:nodeKind必须以小写n开头

SHACL 不直接支持 rdfs:subPropertyOf,因此您是对的,要求 RDFS 推理是一种方法。为此,您可以使用 sh:entailment,请参阅 https://www.w3.org/TR/shacl/#shacl-rdfs

如果您事先知道子属性,您还可以使用替代路径并在 | 中枚举所有子属性。列表,参见https://www.w3.org/TR/shacl/#property-path-alternative

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...