OWL:基于价值的财产限制:是否可能?

时间:2012-02-22 13:55:06

标签: semantic-web owl protege4

我寻找一个明确的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>

1 个答案:

答案 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课程;
  • make :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必须正常运作,否则可能会有一位母亲同时成为父亲而且无法正常工作!