1

Тема: нужен ли промежуточный класс?

Добрый день!
Помогите, пожалуйста, мозгам, отформатированным реляционной моделью, понять как правильно построить фрагмент онтологии.
Есть клиенты, у которых могут быть определенные льготы, эти льготы должны подтверждаться документами.

В онтологии создаю:
Есть класс "клиенты", класс "льготы", класс"документы".

Свойства: имметЛьготу (домен-клиент, значения из - льготы).

Дальше у меня ступор. Льгот у клиента  может быть несколько и каждая подтверждается отдельным пакетом документов. Была бы железно одна, я б сделала клиенту еще свойство "имеетДокумент" и дело с концом.
В базе данных разумеется все сделано через третью таблицу, где КодКлиента, КодЛьготы, КодДокумента.
Как тут быть в онтологии? Создавать еще один класс? Или, может, неименованный класс типа "клиенты имеющие льготы"?
Мне хоть идею, хоть ссылку на литературу, где это объясняется. Пожалуйста!

Thumbs up Thumbs down

2

Re: нужен ли промежуточный класс?

Проблемы не вижу. Люди имеют документы и льготы.
Множество фактов об этом (ABox) может выглядеть так:
"Ираида Ачибальдовна" is_a "Клиент"
"Ираида Ачибальдовна" имметЛьготу "Льгота на коммунальные услуги"
"Ираида Ачибальдовна" имметЛьготу "Льгота на проезд в ообщественном транспорте"
"Ираида Ачибальдовна" имметДокумент "Удостоверение ветерана труда"

А далее можно навешивать хитрую логику (TBox), что только льготники могут иметь льготы. И что если имеетДокумент ("Удостоверение ветерана труда" или "Удостоверение ..." или ...), то может иметь льготу "Льгота на коммунальные услуги"

Пусть надо ввести правило (TBox), что клиент, имеющий "Удостоверение ветерана труда" имеет льготу на "1 бесплатная стрижка в год" и "60% скидка".

А льготник вида "студент" имеет только "30% скидку"

Тут надо создавать или новые классы или просто анонимные классы. Допустим, создаём явные новые классы.

Класс клиентов ветеранов труда:
<owl:Class rdf:ID="Льготник. Ветеран труда">
  <owl:intersectionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Клиент" />
    <owl:Restriction>
      <owl:onProperty rdf:resource="#имеетДокумент" />
      <owl:hasValue rdf:resource="#Удостоверение ветерана труда" />
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

Допустим, льгот меньше, чем видов льготников.
Создаём классы для льготников, обладающих конкретной льготой: "Клиент-льготник 1 бесплатная стрижка в год" (определяя правило, что все экземпляры этого класса это любые клиенты, которым даётся эта конкретная льгота).

И связываем классы Льгот с классами Льготников отношением subclass_of.

Дерево классов/подклассов будет выглядеть как-то так:

  • "Льгота. 1 бесплатная стрижка"

    • Льготник. Ветеран труда

  • "Льгота. 30% скидка"

    • Льготник. Студент

  • "Льгота. 60% скидка"

    • Льготник. Ветеран труда

Имя и фамилию взял из выступления команды КВН "Уездный город", любые совпадения случайны.

Отредактировано tester (2012-09-27 23:06:37)

Thumbs up Thumbs down

3

Re: нужен ли промежуточный класс?

Большое спасибо за помощь!
Значит, на счет дополнительных классов или анонимных классов я все-таки интуитивно угадала, но пугало, что нужно создавать много субклассов.

Thumbs up Thumbs down