在执行 Shex 验证时,如何在 RDF 中允许不可预见的属性?

How do you allow not foreseen properties in RDF when performing Shex validation?

我们正在创建 Shex 定义文件,以检查某些 IRI 是否属于给定类型。我们生成的代码没有问题,但有时我们会得到使用 Protege 生成的文件,并且大多数人的类型都是 X 加上 owl:NamedIndividual,这使得我们的验证失败,因为现在给定的资源有 2 个类型的断言rdf:type.

owl:NamedIndividual 添加到所有形状检查似乎污染了形状定义,那么如何允许与形状定义不冲突的额外属性?

在 Shex 中,默认情况下三重约束是 封闭的,这意味着像这样的形状:

:Shape {
  rdf:type [ :X ]
}

表示符合:Shape的节点必须恰好有一个rdf:type声明其值为:X.

如果要允许 rdf:type 声明有额外的值,可以用关键字 EXTRA 表示为:

:Shape EXTRA rdf:type {
 rdf:type [ :X ]
}

现在的意思是一个一致的节点必须有 rdf:type :X 并且可以有 rdf:type 的零值或模式值。

注意前面的例子可以定义为:

:Shape EXTRA a {
 a [ :X ]
}

在特定情况下,您只想允许一个额外的 rdf:type,值为 owl:NamedIndividual,您也可以将其定义为:

:Shape {
 a [:X ] ;
 a [ owl:NamedIndividual] ;
}

或如:

:Shape {
 a [:X owl:NamedIndividual]{2} ;
}