我们正在创建 Shex 定义文件,检查某些 IRI 是否属于给定类型。我们生成的代码没有问题,但有时我们会使用 Protege 生成的文件,并且大多数人的类型为X
加owl:NamedIndividual
,使我们的验证失败,因为现在给定的资源有 2 个类型rdf:type
的断言。
向所有形状检查添加owl:NamedIndividual
似乎会污染 Shape 定义,那么如何允许与形状定义不冲突的额外属性呢?
在 Shex 中,默认情况下,三重约束是闭合的,这意味着形状如下:
:Shape {
rdf:type [ :X ]
}
表示符合:Shape
的节点必须只有一个值为:X
的rdf:type
声明。
如果要为rdf:type
声明允许额外的值,可以使用关键字EXTRA
将其表示为:
:Shape EXTRA rdf:type {
rdf:type [ :X ]
}
现在的意思是,符合标准的节点必须具有rdf:type :X
,并且可以具有零或rdf:type
的模式值。
请注意,前面的示例可以定义为:
:Shape EXTRA a {
a [ :X ]
}
在特殊情况下,您只想允许具有值owl:NamedIndividual
的额外rdf:type
,您还可以将其定义为:
:Shape {
a [:X ] ;
a [ owl:NamedIndividual] ;
}
或作为:
:Shape {
a [:X owl:NamedIndividual]{2} ;
}