Можно ли делать утверждения свойств на уровне класса в OWL 2?

У меня есть онтология OWL 2, содержащая несколько именованных лиц, принадлежащих к классу, которым необходимо иметь одно и то же свойство объекта с одинаковым значением.

Я хотел бы сделать это утверждение свойства «для класса» таким образом, чтобы рассуждающий мог сделать вывод, что свойство должно быть у всех его членов, таким образом, не требуя явного утверждения для каждого. (получение чего-то похожего на классовое объектно-ориентированное наследование свойств)

Простым примером может быть онтология, содержащая индивидуумов milkBottle1, milkBottle2, milkBottle3, принадлежащих к классу Milk. Все они должны иметь свойство containsNutrient со значением protein, но очевидно, что это то, что является общим для всех членов класса Milk и должно быть явно установлено только один раз.

Я нашел тот же вопрос только здесь, но единственный ответ предполагает неподходящее решение: сделать класс подклассом класса ограничения свойств. Это приводит к выводу, что класс эквивалентен классу Nothing (поскольку не существует именованных индивидуумов с таким свойством), что создает несогласованность из-за отнесения к нему индивидуумов.

Я знаю, что это простая задача с использованием правила SWRL, такого как

Молоко(?а) содержит питательные вещества(?а, белок)

но я хотел бы избежать их, если это возможно.

Возможно ли это без обходных путей в OWL 2? Если да, то как это можно сделать?


person Community    schedule 16.03.2015    source источник


Ответы (1)


Я хотел бы сделать это утверждение свойства "для класса" таким образом, чтобы автор рассуждений мог сделать вывод, что свойство должно быть у всех его членов, таким образом, не требуя явного утверждения для каждого. (получение чего-то похожего на классовое объектно-ориентированное наследование свойств)

Если вы хотите сказать, что каждый член некоторого класса C имеет индивидуальное значение v в качестве значения свойства p, вы можете написать:

C subClassOf (p value v)

Теперь, что касается вашего дополнительного комментария:

Я нашел тот же вопрос только здесь, но единственный ответ предполагает неподходящее решение: сделать класс подклассом класса ограничения свойств. Это приводит к выводу, что класс эквивалентен классу Nothing (поскольку не существует именованных индивидуумов с таким свойством), что создает несогласованность из-за присвоения ему индивидуумов.

То, что я только что предложил, совпадает с тем, что описано в этом ответе. Нет ничего непоследовательного в том, чтобы сказать «C subClassOf (p value v)», даже если нет объявленных именованных лиц типа C. Если вы столкнулись с какой-то конкретной проблемой с этим типом решения вы можете уточнить его (и, возможно, задать дополнительный вопрос); аксиома C subClassOf (p value v) включает правило SWRL C(?c) p(?c,v)< /эм>. (Правило SWRL менее общее, поскольку оно применяется только к названным лицам, тогда как аксиома применяется ко всем лицам.)

Пример

Рисунок 1. C является подклассом (p value v). C subClassOf (значение p v)

Рисунок 2. Когда включен механизм рассуждений, предполагается, что отдельный элемент c типа C имеет значение v для свойства p. p(c,v)

Онтология (TTL и RDF/XML)

@prefix :      <http://stackoverflow.com/q/29075078/1281433#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:c      a       owl:NamedIndividual , :C .

:C      a                owl:Class ;
        rdfs:subClassOf  [ a               owl:Restriction ;
                           owl:hasValue    :v ;
                           owl:onProperty  :p
                         ] .

:p      a       owl:ObjectProperty .

:       a       owl:Ontology .

:v      a       owl:Thing , owl:NamedIndividual .
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns="http://stackoverflow.com/q/29075078/1281433#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:Ontology rdf:about="http://stackoverflow.com/q/29075078/1281433#"/>
  <owl:Class rdf:about="http://stackoverflow.com/q/29075078/1281433#C">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="http://stackoverflow.com/q/29075078/1281433#p"/>
        </owl:onProperty>
        <owl:hasValue>
          <owl:Thing rdf:about="http://stackoverflow.com/q/29075078/1281433#v">
            <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
          </owl:Thing>
        </owl:hasValue>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  <owl:NamedIndividual rdf:about="http://stackoverflow.com/q/29075078/1281433#c">
    <rdf:type rdf:resource="http://stackoverflow.com/q/29075078/1281433#C"/>
  </owl:NamedIndividual>
</rdf:RDF>
person Joshua Taylor    schedule 16.03.2015
comment
Но если вы явно не говорите, что у индивидуума есть свойство какого-то индивидуума, а говорите только, что у класса есть свойство некоего класса, то рассудок не сможет его произвести. По крайней мере, если это возможно, пожалуйста, скажите мне, как это сделать. - person Artemis; 16.03.2015
comment
@Артермис, я не понимаю, о чем ты спрашиваешь в этом комментарии. Если вы скажете, что C subClassOf (значение p v), а затем скажете, что c ∈ C, вы можете сделать вывод, что p(c,v). - person Joshua Taylor; 16.03.2015
comment
Я думаю, что был задан вопрос, если у вас есть экземпляры класса, и вы определяете ограничение, как вы предлагаете, то как заставить рассудок генерировать вывод. Вы пробовали это? Я сделал с OWLAPI и не могу его получить. Я хочу знать, как ты это сделал. - person Artemis; 16.03.2015
comment
Я добавил пример, показывающий, что это работает с резонером HermiT под Protege. Я не знаю навскидку, как использовать резоны под OWLAPI, но знаю, что в его документации масса примеров. - person Joshua Taylor; 16.03.2015
comment
Этого должно быть достаточно, чтобы показать, что это возможно, и что ограничение hasValue является подходящим способом сделать это. Вопрос, в конце концов, был о конструкции OWL2 для этого; не о способе доступа к результату OWLAPI. - person Joshua Taylor; 16.03.2015
comment
Предложенное вами решение верное. (как и решение, на которое я ссылался) Я получал сообщения о несоответствии от Protégé (классы были отмечены красным), но очевидно, что проблема заключалась в другом, поскольку я смог воспроизвести ваш простой пример и несколько подобных за пределами большой онтологии. Я не уверен, что заставило меня поверить, что это неправильный способ сделать это. Спасибо за невероятно подробный ответ. - person ; 17.03.2015
comment
Обратите внимание, что Protege помечает класс красным цветом, если он неудовлетворителен; то есть, если ничто не может быть его экземпляром. Это отличается от непоследовательности онтологии. Несоответствие возникнет только в том случае, если какой-либо индивидуум должен быть экземпляром неудовлетворительного класса. - person Joshua Taylor; 17.03.2015