Tor*_*orx 2 semantic-web owl protege4
我寻找一个明确的OWL解决方案来定义一个属性,该属性是另一个属性的限制,类似于等价的类.限制基于域或范围的数据属性.受限制的财产绝对是一个子财产,必须推断.
"孩子","母亲","父亲"是人的父亲.gender ="男性"数据属性mother.gender ="女性"
(男性子类人员=等同类别"性别价值"男性")
父亲父母或儿童'对象关系母亲父母子女'对象关系
如何定义fatherOf属性,基于parentOf和父亲的性别?显然,它是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>
Run Code Online (Sandbox Code Playgroud)
因此,您的数据中包含以下内容:
:x :parentOf :y .
:x :gender "male" .
Run Code Online (Sandbox Code Playgroud)
你想推断:
:x :fatherOf :y .
Run Code Online (Sandbox Code Playgroud)
我担心你不能在OWL中做到这一点.对于像这样的情况,您可能希望依赖SWRL,SPIN等规则语言.但是,对于父亲,母亲等的特定情况,您可以执行以下操作:
:hasParent为:parentOf;:hasParent为2;:hasFather为:fatherOf;:hasFather一个owl:FunctionalProperty;:hasMother为:motherOf;:hasMother一个owl:FunctionalProperty;:Man男性的阶级;:Woman女性的阶级;:MandisjointWith :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 .
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题,但这是一个非常复杂的本体论,并且它的推理可能会非常缓慢.
编辑:我补充说,:gender必须是功能性的,否则可能会有一位母亲同时是一位父亲而且不会工作!