OWL Одно и то же свойство объекта для разных классов

Я пытаюсь преобразовать диаграмму классов UML в Ontoloy, и у меня есть вопрос.

Допустим, у меня есть следующая установка:

        rel1
ClassA ------> ClassB

        rel1
ClassC ------> ClassD

В первом случае я преобразовал отношение «rel1» в свойство объекта следующим образом:

_x:rel1 rdf:type owl:ObjectProperty ;
    rdfs:domain _x:ClassA ;
    rdfs:range _x:ClassB .

Но я не знаю, как быть со Вторым. Я хочу иметь следующее: rel1 имеет пару домен-диапазон (ClassA, ClassB) ИЛИ (ClassC, ClassD). Сначала я подумал об использовании объединения, но оно не моделирует его надлежащим образом, потому что возможны комбинации типа (ClassA, ClassD) или (ClassC, ClassB).

Я надеюсь, что кто-то может помочь.

Спасибо, Джон


person John    schedule 24.05.2018    source источник


Ответы (1)


Ваша ассоциация rel1 говорит о том, что она имеет в качестве домена объединение ClassA и ClassC с диапазоном объединения ClassB и ClassD, которое вы можете указать следующим образом:

ObjectProperty: rel1
  Domain: ClassA or ClassC
  Range: ClassB or ClassD

Основное преимущество указания доменных и диапазонных ограничений для свойства заключается в том, что если два человека связаны через это свойство, рассудок может сделать вывод о типах людей. Указание домена и диапазона, как указано выше, не позволит это сделать, потому что ClassA or ClassC является анонимным классом, а алгоритмы рассуждений обычно делают выводы только по именованным классам, а не по анонимным классам. Чтобы обойти это, вы можете сделать следующее:

Class: Rel1Domain 
  EquivalentTo: ClassA or ClassC

Class: Rel1Range 
  EquivalentTo: ClassB or ClassD

ObjectProperty: rel1
  Domain: Rel1Domain
  Range: Rel1Range    
person Henriette Harmse    schedule 25.05.2018
comment
Что ж, я забыл упомянуть, что отношение должно быть либо (ClassA, ClassB), либо (ClassC, ClassD). Я не хочу, чтобы были возможны такие комбинации, как (ClassA, ClassD). Так что я не знаю, поможет ли профсоюз. - person John; 25.05.2018
comment
Ну, тогда у вас действительно есть 2 разных свойства, и они должны называться разными именами. т.е. rel1AB и rel1CD с нужными вам доменами и диапазонами. - person Henriette Harmse; 25.05.2018
comment
Проблема в том, что я должен сделать это в соответствии с диаграммой классов UML. И мне не разрешено его менять. Но если нет обходного пути, возможно, мне придется. Кстати, я использовал многие из ваших правил UML для OWL, которые вы описали в своей статье, так что спасибо за это. Это было действительно полезно :) - person John; 25.05.2018
comment
Вы можете установить локальные ограничения, чтобы исключить нежелательные пары; то есть добавить аксиому, утверждающую, что ClassA является подклассом forall rel1 ClassB. Это будет означать, что любое использование rel1 между индивидуумом ClassA и индивидуумом ClassD потерпит неудачу (при условии, что ClassB и ClassD не пересекаются). В противном случае вам придется отказаться от универсальных диапазонов и указать, что вы ожидаете от наполнителя rel1 для каждого использования. - person Ignazio; 26.05.2018
comment
@John Когда у вас есть ассоциация rel1 между разными классами в UML, фактическое полное имя rel1 отличается. т.е. это A::rel1 против C::rel1. Следовательно, строго говоря, это разные ассоциации. Однако, если вы соберете домены и диапазоны вместе, как я предложил, вы можете обнаружить различные эвристические нарушения моделирования. Я обсуждаю это в главе 7 моей диссертации. - person Henriette Harmse; 26.05.2018