您可能在 RDF(S) 中工作,而不是在 OWL 中工作,但如果您确实有能力使用基于 OWL 的工具,并且为了任何发现这个问题并可以使用基于 OWL 的工具的人,这里有一个 OWL-基于答案。
如果您希望类的每个实例(包括其子类的实例)都具有一些共同的属性值,则可以使用Individual Value Restriction。在曼彻斯特语法中,您可以说SomeClass
all 的实例具有公理sharedIndividual
的属性值:hasValue
SomeClass SubClassOf hasValue value sharedIndividual
然后每个实例SomeClass
都有 type hasValue value sharedIndividual
,这意味着该实例具有sharedIndividual
作为hasValue
属性的值。
SomeClass
这是具有一个类和两个子类的本体的 N3 序列化SomeSubClass
和AnotherSubClass
. 这三个类别中的每一个都有一个声明的个体。该类型hasValue value sharedIndividual
是 的超类SomeClass
。
@prefix : <http://www.example.com/valueClassExample#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<http://www.example.com/valueClassExample>
a owl:Ontology .
:hasValue
a owl:ObjectProperty .
:sharedValue
a owl:Thing , owl:NamedIndividual .
:SomeClass
a owl:Class ;
rdfs:subClassOf
[ a owl:Restriction ;
owl:hasValue :sharedValue ;
owl:onProperty :hasValue
] .
:SomeSubClass
a owl:Class ;
rdfs:subClassOf :SomeClass .
:AnotherSubClass
a owl:Class ;
rdfs:subClassOf :SomeClass .
:SomeClassInstance
a :SomeClass , owl:NamedIndividual .
:SomeSubClassInstance
a owl:NamedIndividual , :SomeSubClass .
:AnotherSubClassInstance
a owl:NamedIndividual , :AnotherSubClass .
将这个本体加载到 Protégé 中并附加 Pellet 进行推理,询问哪些个体具有sharedValue
作为hasValue
属性的值会显示所有个体。