Описание сложной концепции в OWL

Я изучаю OWL, но до сих пор не могу понять следующее. Допустим, у нас есть семейный класс. У него есть подклассы BadFamily и GoodFamily (это могут быть и отдельные лица, а не подклассы). В реальном мире понятие семьи подразумевает существование нескольких объектов (например, Отец, Мать, Сын, Дочь). Некоторые люди в семье могут любить друг друга или ненавидеть друг друга («любовь» и «ненависть» — отношения, насколько я понимаю). Соответственно в BadFamily несколько человек ненавидят друг друга. В GoodFamily несколько человек любят друг друга. Итак, как это может быть представлено в OWL (пример Protege или советы по основным направлениям были бы великолепны!).

Это также можно рассматривать как описание разных случаев, когда одни и те же классы и отношения используются для всех случаев, но в разных сочетаниях.


person arinarodionova    schedule 14.07.2016    source источник
comment
Ваши определения GoodFamily и BadFamily нуждаются в уточнении. Может быть, если некоторые любят друг друга, это хорошо, если некоторые ненавидят друг друга, это плохо, но как следует классифицировать семью, члены которой связаны обоими типами свойств, или семью, в которой нет таких свойств между членами?   -  person Ivo Velitchkov    schedule 14.07.2016
comment
Дело в том, что я имею в виду не задачу распознавания класса. Пусть это будет не GoodFamily или BadFamily, пусть это будет просто Family1, Family2... FamilyN. Главный вопрос - как сохранить информацию о случаях?   -  person arinarodionova    schedule 15.07.2016
comment
Теперь вопрос еще менее ясен. Давайте на мгновение остановимся на кейсе «хорошая/плохая семья». У вас может быть Family с подклассами GoodFamily и BadFamily, и вам также, вероятно, понадобится класс FamilyMember. Затем вы определяете условия классификации. Затем у вас есть такие лица, как Family1, Family2, Family3 и лица Person1, Person2 и т. д. Лица будут либо утверждаться как члены семьи, либо это может быть выведено путем рассуждений. Тогда распределение членов семьи будет зависеть от определения двух подклассов (посредством анонимных эквивалентов или подклассов).   -  person Ivo Velitchkov    schedule 15.07.2016


Ответы (1)


Вот один из способов его реализации. Вы можете создать следующую таксономию:

-Семья

--GoodFamily

--BadFamilly

-член семьи

--LovesFamilyMember

и для свойств объекта:

-hasFamilyMember

-hasRelative

-lovesFamilyMember

-hatesFamilyMember

из которых последний должен быть объявлен иррефлексивным, чтобы исключить классификацию семьи как хорошей, когда члены любят только себя.

Затем вам нужно определить класс тех, кто любит FamilyMember как эквивалент lovesFamilyMember some FamilyMember, а класс GoodFamily' as equivalent ofhasFamilyMember — некоторый 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
                          )
    ] .
person Ivo Velitchkov    schedule 15.07.2016
comment
Спасибо за действительно подробный ответ. Теперь я просто вижу, что дело в том, что гораздо проще выразить знания в neo4j, потому что все эти вещи с людьми и классами делают задачу очень сложной. - person arinarodionova; 18.07.2016