OWL对象属性domain/range同级限制类
OWL Object Property domain/range restrictions to the same level classes
我想设计一个对象 属性,它总是 link 只在相同级别的 class 之间编辑。例如,
我想把属性isCounterPartOf
限制为属于同一个上class的兄弟节点的弧,比如
house isCounterPartOf cars
bad isCounterPartOf good
slow isCounterPartOf fast
并且 属性 不应 link 在 class 不同级别(具有不同祖先)之间,例如
cars isCounterPartOf bad
cars isCounterPartOf object
cars isCounterPartOf Entity
有没有办法只定义一个 属性?
假设您的 objective 是 :isCounterPartOf
链接两个人,其中一个是例如的成员。 :Bad
,那么另一个应该归为:Good
,不需要定义:isCounterPartOf
的域和范围,只要是owl:SymmetricProperty
。你只需要定义你的 类, :Bad
等同于 :isCounterPartOf some :Good
和 :Good
等同于 :isCounterPartOf some :Bad
, 并且对于所有 "pairs"分别为 类。
那么如果:
:A :isCounterPartOf :B
:C :isCounterPartOf :B
:A a :Slow
:C a :Bad
那么:B
会被分类为:Fast
和:Good
.
澄清(基于评论)
在上面的例子中,
1. :isCouterPartOf
是对称对象属性:
:isCounterPartOf rdf:type owl:ObjectProperty ,
owl:SymmetricProperty .
:Good
、:Bad
、:Slow
和:Fast
是OWL类,其中:
(不知道为什么代码格式不起作用)
:差 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty:isCounterPartOf;
owl:someValuesFrom:好
].
:快速 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty:isCounterPartOf;
owl:someValuesFrom:慢
].
:好 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty:isCounterPartOf;
owl:someValuesFrom:不好
].
:慢 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty:isCounterPartOf;
owl:someValuesFrom:快
] .
:A
、:B
和 :C
是个人,因此断言:
(同样,不知道为什么代码格式不起作用)
:A rdf:type owl:NamedIndividual ,
:慢;
:isCounterPartOf :B .
:B rdf:type owl:NamedIndividual ,
owl:Thing.
:C rdf:type owl:NamedIndividual ,
:不好;
:isCounterPartOf :B .
基于这些断言,当你运行推理时,你会遇到以下情况:
:A rdf:type owl:NamedIndividual ,
:Bad , #inferred
:Slow ;
:isCounterPartOf :B .
:B rdf:type owl:NamedIndividual ,
:Fast , #inferred
:Good , #inferred
owl:Thing ;
:isCounterPartOf :A , #inferred
:C . #inferred
:C rdf:type owl:NamedIndividual ,
:Bad ,
:Slow ; #inferred
:isCounterPartOf :B .
我想设计一个对象 属性,它总是 link 只在相同级别的 class 之间编辑。例如,
我想把属性isCounterPartOf
限制为属于同一个上class的兄弟节点的弧,比如
house isCounterPartOf cars
bad isCounterPartOf good
slow isCounterPartOf fast
并且 属性 不应 link 在 class 不同级别(具有不同祖先)之间,例如
cars isCounterPartOf bad
cars isCounterPartOf object
cars isCounterPartOf Entity
有没有办法只定义一个 属性?
假设您的 objective 是 :isCounterPartOf
链接两个人,其中一个是例如的成员。 :Bad
,那么另一个应该归为:Good
,不需要定义:isCounterPartOf
的域和范围,只要是owl:SymmetricProperty
。你只需要定义你的 类, :Bad
等同于 :isCounterPartOf some :Good
和 :Good
等同于 :isCounterPartOf some :Bad
, 并且对于所有 "pairs"分别为 类。
那么如果:
:A :isCounterPartOf :B
:C :isCounterPartOf :B
:A a :Slow
:C a :Bad
那么:B
会被分类为:Fast
和:Good
.
澄清(基于评论)
在上面的例子中,
1. :isCouterPartOf
是对称对象属性:
:isCounterPartOf rdf:type owl:ObjectProperty ,
owl:SymmetricProperty .
:Good
、:Bad
、:Slow
和:Fast
是OWL类,其中: (不知道为什么代码格式不起作用):差 rdf:type owl:Class ; owl:equivalentClass [ rdf:type owl:Restriction ; owl:onProperty:isCounterPartOf; owl:someValuesFrom:好 ].
:快速 rdf:type owl:Class ; owl:equivalentClass [ rdf:type owl:Restriction ; owl:onProperty:isCounterPartOf; owl:someValuesFrom:慢 ].
:好 rdf:type owl:Class ; owl:equivalentClass [ rdf:type owl:Restriction ; owl:onProperty:isCounterPartOf; owl:someValuesFrom:不好 ].
:慢 rdf:type owl:Class ; owl:equivalentClass [ rdf:type owl:Restriction ; owl:onProperty:isCounterPartOf; owl:someValuesFrom:快 ] .
:A
、:B
和:C
是个人,因此断言: (同样,不知道为什么代码格式不起作用):A rdf:type owl:NamedIndividual , :慢;
:isCounterPartOf :B .
:B rdf:type owl:NamedIndividual , owl:Thing.
:C rdf:type owl:NamedIndividual , :不好;
:isCounterPartOf :B .
基于这些断言,当你运行推理时,你会遇到以下情况:
:A rdf:type owl:NamedIndividual ,
:Bad , #inferred
:Slow ;
:isCounterPartOf :B .
:B rdf:type owl:NamedIndividual ,
:Fast , #inferred
:Good , #inferred
owl:Thing ;
:isCounterPartOf :A , #inferred
:C . #inferred
:C rdf:type owl:NamedIndividual ,
:Bad ,
:Slow ; #inferred
:isCounterPartOf :B .