これを実装する方法は次のとおりです。
:-family
--GoodFamily
--BadFamilly
-FamilyMember --LovesFamilyMember
と、オブジェクトのプロパティの
:あなたは、次の分類を作成することができます
-hasFamilyMe mber
-hasRelative
-lovesFamilyMember
-hatesFamilyMember
そのうち後者は、メンバーが自分自身だけを愛するときなど良い家族を分類除外するために、非反射宣言する必要があります。
次に、あなたはlovesFamilyMember some FamilyMember
の同等としてFamilyMember
を愛する人たちのクラス、およびGoodFamily' as equivalent of
hasFamilyMember一部LovesFamilyMember`のクラスを定義する必要があります。
敬愛され、愛され、憎悪されたメンバーが同じ家族のものであることにさらに注意する必要があります。これは、最初にhasRelative
が、家族と同じ家族のメンバーとをリンクするオブジェクトプロパティであることを定義することによって行うことができます: inverse (hasFamilyMember) o hasFamilyMember
。次に、クラスLovesFamilyMember
のメンバーシップの別の条件としてこの関係を追加する必要があります。そのクラスの完全な定義は、 lovesFamilyMember some FamilyMember and hasRelative some FamilyMember
になります。
そして、これは、このすべてが一緒に個人A
、B
、およびFamily1
で、タートルにどのように見えるかです: `GoodFamily`と` BadFamily`の
#################################################################
# Object Properties
#################################################################
:hasFamilyMember rdf:type owl:ObjectProperty ;
rdfs:domain :Family ;
rdfs:range :FamilyMember .
:hates rdf:type owl:ObjectProperty ,
owl:IrreflexiveProperty .
:hatesFamilyMember rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :hates ;
rdfs:range :FamilyMember .
:loves rdf:type owl:ObjectProperty ,
owl:IrreflexiveProperty .
:lovesFamilyMember rdf:type owl:ObjectProperty ;
rdfs:subPropertyOf :loves ;
rdfs:range :FamilyMember .
#################################################################
# Classes
#################################################################
:BadFamily rdf:type owl:Class ;
rdfs:subClassOf :Family .
:Family rdf:type owl:Class .
:FamilyMember rdf:type owl:Class .
:GoodFamily rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :hasFamilyMember ;
owl:someValuesFrom :LovesFamilyMember
] ;
rdfs:subClassOf :Family .
:LovesFamilyMember rdf:type owl:Class ;
owl:equivalentClass [ owl:intersectionOf ([ rdf:type owl:Restriction ;
owl:onProperty :hasRelative ;
owl:someValuesFrom :FamilyMember
]
[ rdf:type owl:Restriction ;
owl:onProperty :lovesFamilyMember ;
owl:someValuesFrom :FamilyMember
]
) ;
rdf:type owl:Class
] ;
rdfs:subClassOf :FamilyMember .
#################################################################
# Individuals
#################################################################
:A rdf:type owl:NamedIndividual ,
:FamilyMember ;
:lovesFamilyMember :B .
:B rdf:type owl:NamedIndividual ,
:FamilyMember .
:Family1 rdf:type owl:NamedIndividual ,
:Family ;
:hasFamilyMember :A ,
:B .
:Family2 rdf:type owl:NamedIndividual ,
:Family .
#################################################################
# General axioms
#################################################################
[ rdf:type owl:AllDifferent ;
owl:distinctMembers (:A
:B
)
] .
あなたの定義は明確にする必要があります。お互いを愛し合っている人がいれば、それは良いことです。互いに憎む人がいれば、悪いですが、両方のタイプのプロパティにリンクされたメンバーを持つ家族はどのように分類されるべきですか? –
事は私がクラス認識の仕事ではないことを意味します。それはいいのではないよファミリーやバッドファミリー、それだけでファミリー1、ファミリー2 ...ファミリーN ...主な質問は - ケース情報を保存する方法ですか? – arinarodionova
質問は今はっきりしていません。良い/悪い家族の場合にはしばらくお待ちください。あなたはサブクラスGoodFamilyとBadFamilyを持つファミリーを持つことができますし、ファミリーファミリーも必要でしょう。次に、分類条件を定義します。家族1、家族2、家族3、Person1、Person2などのような人がいます。人は家族として主張されるか、推論によって推論されます。家族の個人分布は、2つのサブクラスの定義(匿名の同等クラスまたはサブクラスによる)に依存します。 –