我们正在创建我们的 Shex 定义文件,检查某些 IRI 是否属于给定类型。我们生成的代码没有问题,但有时我们会使用 Protege 生成文件,并且大多数个人都是类型X
plus owl:NamedIndividual
,这使我们的验证失败,因为现在给定的资源有 2 个类型的断言rdf:type
。
添加owl:NamedIndividual
到所有形状检查似乎污染了形状定义,那么您将如何允许与您的形状定义不冲突的额外属性?
我们正在创建我们的 Shex 定义文件,检查某些 IRI 是否属于给定类型。我们生成的代码没有问题,但有时我们会使用 Protege 生成文件,并且大多数个人都是类型X
plus 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} ;
}