owl: allValuesFrom и rdfs: разница в диапазоне

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

:Person
  a owl:Class ;
  rdfs:subClassOf
    [ a owl:Restriction ;
      owl:onProperty :hasParent ;
      owl:allValuesFrom :Person
   ] .

и написание ограничения диапазона, например:

:hasParent rdfs:range :Person.

мне кажется, что это означает то же самое: у родителя должен быть тип человека. Разве нет никакой разницы?

3 ответов


первый фрагмент означает, что :Person у кого есть родитель обязательно есть :Person-родителя. Однако,:Dog может иметь родителя, который не :Person, например. Второй фрагмент говорит, что все, у кого есть родитель, обязательно имеет :Person - parent, независимо от того, что это такое.

редактировать после комментария krajol это:

на allValuesFrom ограничение первого фрагмента не эквивалентно:

:hasParent  rdfs:domain  :Person;
            rdfs:range   :Person .

в случае allValuesFrom ограничение, все еще возможно, что есть родители, которые не являются людьми. В случае rdfs:domain/rdfs:range комбинация, это невозможно. С allValuesFrom ограничения, можно сказать, что у людей есть человек-родители и что у собак есть собака-родители и т. д. С доменом / диапазоном вы не можете.


есть еще одно отличие, которое стоит отметить. Когда в классе более одного тройного rdfs:range (или rdfs: domain), диапазон или домен-это вместе (пересечение) указанных диапазонов/доменов. См.спецификация RDFS, хотя формулировка неоднозначна, и этот пост.

Если вывод выполняется в онтологии, вы обнаружите, что тройки rdfs:range/domain выводятся для всех суперклассов указанного класс(ы) диапазона/домена. Хотя это семантически правильно, это может быть запутанным или трудным для работы. Этого не случится с allValuesFrom.


(добавление ответа на уже ответленный вопрос, так как я обнаружил, что сущность принятого ответа отсутствует.)

[ a owl:Restriction ;
    owl:onProperty :hasParent ;
    owl:allValuesFrom :Person
]

можно читать как " класс всех вещей, для которых любое значение для hasParent предикат (потенциально none) имеет тип Person".

сказав, что Person является подклассом этого класса, мы говорим, что это более специализированная версия этого класса. Итак,Person все еще может иметь только другие PersonS как значение для hasParent.

в отличие от rdfs:range потому что мы не делаем никаких заявлений о действительных домен/диапазон . Чтобы рециркулировать Антуана, мы все еще можем сказать:

:dog1 a :Dog.
:dog2 a :Dog.
:dog1 :hasParent :dog2.