我寻找一个明确的OWL解决方案来定义属性,该属性是另一个属性的限制,类似于等效类。限制基于域或范围的数据属性。受限制的财产绝对属于子财产,必须推断出来。
“小孩”,“母亲”,“父亲”是人 father.gender =“male”数据属性 mother.gender =“女性”(男性子类人员=等同类别“性别价值”男性“)
父亲父母或儿童'对象关系 母亲父母的孩子'对象关系
如何定义fatherOf属性,基于parentOf和parent的性别? 显然它是parentOf的子属性。
然而,Protégé中的等效对象属性编辑器不允许设置属性查询,即使我真的不知道这是否可以通过属性链解决。
将fatherOf定义为subproperty并且(手动)设置fatherOf而不是parentOf不是一个选项,因为这个系列示例是一个更复杂场景的简化情况。
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#fatherOf"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#parentOf"/>
</Declaration>
<Declaration>
<DataProperty IRI="#gender"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#father"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#kid"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#mother"/>
</Declaration>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#father"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#kid"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#mother"/>
</ClassAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#parentOf"/>
<NamedIndividual IRI="#father"/>
<NamedIndividual IRI="#kid"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#parentOf"/>
<NamedIndividual IRI="#mother"/>
<NamedIndividual IRI="#kid"/>
</ObjectPropertyAssertion>
<DataPropertyAssertion>
<DataProperty IRI="#gender"/>
<NamedIndividual IRI="#father"/>
<Literal datatypeIRI="&rdf;PlainLiteral">male</Literal>
</DataPropertyAssertion>
<DataPropertyAssertion>
<DataProperty IRI="#gender"/>
<NamedIndividual IRI="#mother"/>
<Literal datatypeIRI="&rdf;PlainLiteral">female</Literal>
</DataPropertyAssertion>
<SubObjectPropertyOf>
<ObjectProperty IRI="#fatherOf"/>
<ObjectProperty IRI="#parentOf"/>
</SubObjectPropertyOf>
<DataPropertyDomain>
<DataProperty IRI="#gender"/>
<Class IRI="#Person"/>
</DataPropertyDomain>
<DataPropertyRange>
<DataProperty IRI="#gender"/>
<Datatype abbreviatedIRI="xsd:string"/>
</DataPropertyRange>
答案 0 :(得分:5)
因此,您的数据中包含以下内容:
:x :parentOf :y .
:x :gender "male" .
你想推断:
:x :fatherOf :y .
我担心你不能在OWL中做到这一点。对于像这样的情况,您可能希望依赖SWRL,SPIN等规则语言。但是,对于父亲,母亲等的特定情况,您可以执行以下操作:
:hasParent
定义为:parentOf
; :hasParent
的基数限制为2; :hasFather
定义为:fatherOf
; :hasFather
成为owl:FunctionalProperty
; :hasMother
定义为:motherOf
; :hasMother
成为owl:FunctionalProperty
; :Man
类; :Woman
课程; :Man
disjointWith :Woman
; :hasFather
的范围设置为:Man
; :hasMother
的范围设置为:Woman
。所以本体看起来像这样(在Turtle,因为我不熟悉OWL / XML):
:Person a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty :hasParent;
owl:cardinality 2
] .
:Man a owl:Class;
owl:equivalentclass [
a owl:Class;
owl:intersectionOf (
:Person
[
a owl:Restriction;
owl:onProperty :gender;
owl:hasValue "male";
]
)
] .
:Woman a owl:Class;
owl:equivalentclass [
a owl:Class;
owl:intersectionOf (
:Person
[
a owl:Restriction;
owl:onProperty :gender;
owl:hasValue "female";
]
)
] .
:gender a owl:DatatypeProperty, owl:FunctionalProperty .
:hasParent a owl:ObjectProperty;
owl:inverseOf :parentOf;
rdfs:domain :Person;
rdfs:range :Person .
:hasFather a owl:ObjectProperty, owl:FunctionalProperty;
rdfs:subPropertyOf :hasParent;
rdfs:range :Man .
:hasMother a owl:ObjectProperty, owl:FunctionalProperty;
rdfs:subPropertyOf :hasParent;
rdfs:range :Woman .
这应该可以解决问题,但这是一个非常复杂的本体论,并且它的推理可能会很慢。
修改:我补充说:gender
必须正常运作,否则可能会有一位母亲同时成为父亲而且无法正常工作!