Protege/Turtle/OWL затрудняется заставить работать свойства объектов для овеществленных операторов

Предположим, я хочу изобразить, что Билл тренируется раз в неделю. Я хочу изучить различные способы представления этого в owl, поскольку я все больше знакомлюсь с построением онтологий в owl и формулированием их в черепахе. Я готов выслушать альтернативные представления, но вот то, что я пытаюсь сделать:

  1. ActivityType — это класс.
  2. Упражнение является экземпляром этого класса.
  3. Билл является экземпляром Human (класса), и он выполняет упражнение.
  4. Затем я хочу квалифицировать выступление Билла как то, что происходит раз в неделю.
  5. Для этого я создаю класс частот и экземпляр под названием OnceAWeek.
  6. Затем я хочу овеществить выполнение упражнения Биллом и связать это овеществленное предложение совы с Частотой OnceAWeek.

Вот как я это пробовал (я опущу некоторые вещи из верхней онтологии, но это не должно быть проблемой):

:performsActivityType rdf:type owl:ObjectProperty;
    rdfs:Domain :Animal;
    rdfs:Range :ActivityType.

:performsWithFrequency rdf:type owl:ObjectProperty;
    rdfs:Domain owl:Axiom;
    rdfs:Range :Frequency.

:Human rdf:type owl:Class ;
       rdfs:subClassOf :Animal.


:ActivityType rdf:type owl:Class .

:Frequency rdf:type owl:Class .

:Exercise rdf:type owl:NamedIndividual, :ActivityType.

:OnceAWeek rdf:type owl:NamedIndividual, :Frequency.

:Bill rdf:type :Human;
      :performsActivityType :Exercise.

[rdf:type owl:NamedIndividual, owl:Axiom ;
    owl:annotatedSource :Bill;
    owl:annotatedProperty :performsActivityType;
    owl:annotatedTarget :Exercise;
    :performsWithFrequency :OnceAWeek].

Проблема: когда я это делаю, я не могу проверить, добавил ли я предполагаемые знания, посмотрев это в Protege. Я могу убедиться, что я создаю правильную аксиому, так как я могу проникнуть в что-то вроде rdfs:label, он делает это раз в неделю, и это аннотирует утверждение и видно, когда я открываю .owl файл в протеже. Но я не могу найти способ проверить, что я делаю утверждение :performsWithFrequency о предложении (Bill PerformsActivityType Exercise).

Помощь?

(Опять же, мысли о том, как лучше реализовать это представление, также приветствуются, хотя я все еще хочу узнать, как справиться с этим, если это возможно).


person stcTempest    schedule 26.07.2020    source источник
comment
Можете ли вы уточнить, сгенерирован ли этот код Черепахи с помощью инструмента или написан вами вручную? Меня озадачивает [rdf:type owl:NamedIndividual, owl:Axiom ; - овеществленная аксиома для целей аннотации не должна также иметь тип NamedIndividual (и в любом случае представлена ​​​​пустым узлом в этом файле), поэтому я подозреваю, что соответствующая тройка фактически игнорируется, и некоторые инструменты могут отклонить это как недействительное.   -  person Ignazio    schedule 27.07.2020
comment
Я написал это от руки. Я посмотрю, что произойдет, когда я брошу эту часть. Хотя, как я заметил в комментарии ниже: когда я делаю :performsWIthFrequency свойством аннотации, оно работает с остальной частью представления точно так же, как вы видите выше.   -  person stcTempest    schedule 28.07.2020


Ответы (2)


Когда вы разрабатываете онтологию, часто бывает полезно подумать о выводах, которые вы хотите сделать. В вашем случае предположим, что мы хотим иметь возможность классифицировать людей в соответствии с их уровнем активности. Мы можем сделать следующее:

:hasExerciseFrequency rdf:type owl:DatatypeProperty ;
                      rdfs:range xsd:integer .

:HighlyActivePerson rdf:type owl:Class ;
                    owl:equivalentClass [ rdf:type owl:Restriction ;
                                          owl:onProperty :hasExerciseFrequency ;
                                          owl:someValuesFrom [ rdf:type rdfs:Datatype ;
                                                               owl:onDatatype xsd:integer ;
                                                               owl:withRestrictions ( [ xsd:minInclusive 7
                                                                                      ]
                                                                                    )
                                                             ]
                                        ] ;
                    rdfs:subClassOf :Person .


:ModeratelyActivePerson rdf:type owl:Class ;
                        owl:equivalentClass [ rdf:type owl:Restriction ;
                                              owl:onProperty :hasExerciseFrequency ;
                                              owl:someValuesFrom [ rdf:type rdfs:Datatype ;
                                                                   owl:onDatatype xsd:integer ;
                                                                   owl:withRestrictions ( [ xsd:minInclusive 3
                                                                                          ]
                                                                                          [ xsd:maxInclusive 6
                                                                                          ]
                                                                                        )
                                                                 ]
                                            ] ;
                        rdfs:subClassOf :Person .

:Person rdf:type owl:Class ;
        owl:equivalentClass [ rdf:type owl:Restriction ;
                              owl:onProperty :hasExerciseFrequency ;
                              owl:someValuesFrom xsd:integer
                            ] .

:SedentaryPerson rdf:type owl:Class ;
                 owl:equivalentClass [ rdf:type owl:Restriction ;
                                       owl:onProperty :hasExerciseFrequency ;
                                       owl:someValuesFrom [ rdf:type rdfs:Datatype ;
                                                            owl:onDatatype xsd:integer ;
                                                            owl:withRestrictions ( [ xsd:maxInclusive 0
                                                                                   ]
                                                                                 )
                                                          ]
                                     ] ;
                 rdfs:subClassOf :Person .

:SlightlyActivePerson rdf:type owl:Class ;
                      owl:equivalentClass [ rdf:type owl:Restriction ;
                                            owl:onProperty :hasExerciseFrequency ;
                                            owl:someValuesFrom [ rdf:type rdfs:Datatype ;
                                                                 owl:onDatatype xsd:integer ;
                                                                 owl:withRestrictions ( [ xsd:minInclusive 1
                                                                                        ]
                                                                                        [ xsd:maxInclusive 2
                                                                                        ]
                                                                                      )
                                                               ]
                                          ] ;
                      rdfs:subClassOf :Person .

:ann rdf:type owl:NamedIndividual ;
     :hasExerciseFrequency 10 .

:dave rdf:type owl:NamedIndividual ;
      :hasExerciseFrequency 0 .

:pete rdf:type owl:NamedIndividual ;
      :hasExerciseFrequency 3 .

[ rdf:type owl:AllDisjointClasses ;
  owl:members ( :HighlyActivePerson
                :ModeratelyActivePerson
                :SedentaryPerson
              )
] .

Если вы загрузите это в Protege и запустите анализатор, он классифицирует ann как высокоактивный, pete как умеренно активный. активный, и dave как малоподвижный.

Я рассказываю о том, как это сделать, в своей диссертации, которую можно скачать здесь.

person Henriette Harmse    schedule 04.08.2020

Ах. Я думаю, что вижу проблему. Мне нужно было сделать :performsWithFrequency owl:AnnotationProperty вместо owl:ObjectProperty. Как только я внесу это изменение, все будет работать так, как ожидалось.

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

person stcTempest    schedule 26.07.2020
comment
если вы сделаете его свойством аннотации, оно не будет использоваться стандартным разработчиком OWL, поэтому то, что вы сделали, было неправильным направлением. Вам следует удалить rdfs:Domain owl:Axiom; - person UninformedUser; 28.07.2020
comment
Спасибо за это. Почему наличие этого rdfs:Domain вызывает проблемы? Разве не правильно сказать, что я хочу, чтобы мое отношение применялось к предложениям? - person stcTempest; 29.07.2020