구현 방법은 다음과 같습니다.
: - 가족
--GoodFamily
--BadFamilly
-FamilyMember --LovesFamilyMember
및 객체 속성에 대한
다음과 같은 분류를 만들 수 있습니다
-hasFamilyMe mber
-hasRelative
-lovesFamilyMember
-hatesFamilyMember
있는 후자는 회원 만 자신을 사랑하면 좋은 가족을 분류 제외, irreflexive 선언해야한다.
은 그럼 당신은 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
:
#################################################################
# 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
)
] .
귀하의 GoodFamily''의 정의와'BadFamily'는 설명이 필요합니다. 어떤 사람들이 서로를 사랑한다면 좋을 수도 있고, 서로를 증오하는 것이 좋지 않을 수도 있지만, 두 가지 유형의 속성과 연결된 가족이있는 가족이 어떻게 분류되어야하는지, 또는 구성원간에 그러한 속성이없는 가족이 어떻게 분류 될 수 있습니까? –
것은 클래스 인식 작업이 아니라는 의미입니다. 그것은 좋지 않게합시다. 패밀리 또는 배드 패밀리, 그냥 가족 1, 패밀리 2 ... 패밀리 N. 주요 질문은 - 사례 정보를 저장하는 방법입니다. – arinarodionova
질문은 지금보다 분명하지 않습니다. 좋거나 나쁜 가정에 잠시 머물러 봅시다.GoodFamily 하위 클래스와 BadFamily 하위 클래스가있는 Family를 가질 수 있으며 FamilyMember 클래스가 필요할 수도 있습니다. 그런 다음 분류 조건을 정의합니다. 그런 다음 Family1, Family2, Family3 및 Person1, Person2 등의 개인이 있습니다. 개인은 가족 구성원으로 주장되거나 추론을 통해 추론 할 수 있습니다. 그런 다음 가족 구성원의 분포는 익명의 동급 또는 하위 클래스를 통해 두 하위 클래스의 정의에 따라 달라집니다. –