Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Жданова Е.И. и др_Методические указания по ПрБД...doc
Скачиваний:
28
Добавлен:
03.05.2019
Размер:
6.37 Mб
Скачать

1.2.2 Создание онтологии в системе Protégé

Создание проекта

Начало работы в системе Protégé подразумевает создание нового проекта. Для этого необходимо выполнить следующие операции:

1. Запустите Protégé (рис. 1.1). Появится диалог приветствия, предлагающий создать новый проект, открыть недавний проект или посмотреть документацию.

Рис. 1.1 – Окно приветствия

2. Щелкните мышкой по кнопке New Project. Появится диалоговое окно «Create New Project», позволяющее выбрать тип проекта. Если у вас нет необходимости в специальном формате для ваших файлов, просто нажмите кнопку Finish – будет выбран формат файла по умолчанию – Protege Files (.pont and .pins).

3. Откроется окно проекта Protégé (рис. 1.2). Новый проект всегда открывается в области просмотра классов (Classes Browser). Видно, что в этой области на данный момент находятся только внутренние системные классы Protégé: THING и SYSTEM-CLASS. Никаких экземпляров классов к этому моменту еще не создано.

Рис. 1.2 – Окно нового проекта

Во время работы с программой можно сохранять промежуточные изменения, для этого щелкните кнопку с изображением дискеты (рис. 1.3) ил выберите пункт Save Project из меню файл File.

Рис. 1.3 – Сохранение проекта

Создание классов

Основное окно программы Protégé состоит из закладок (tabs) которые отображают различные аспекты модели знаний. Наиболее важной закладкой на начальном этапе проектирования является закладка классов (Classes). Обычно классы соответствуют объектам или типам объектов в некоторой предметной области.

Классы в Protégé отображаются в виде иерархии наследования (inheritance hierarchy), которая располагается в области просмотра, называемой Class Browser (или навигатор классов) в левой части закладки классов. Свойства классов выбранных в текущий момент в навигаторе, будут отображены в редакторе классов справа.

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

Создадим класс «Консультант» (Consultant) (рис. 1.4):

1. Выберите закладку классов.

2. Найдите область в навигаторе классов (Class Browser), где отображается иерархия классов (Class Hierarchy). Эта область отображает иерархию классов, с выделенным текущим (выбранным) классом.

3. Проверьте: по умолчанию класс THING (вещь, нечто) должен быть выделен. Почти все классы в данном примере будут созданы на уровень ниже класса THING. Другой класс SYSTEM-CLASS используется для определения структур различных форм Protégé.

4. Нажмите кнопку создать класс (Create Class) в верхнем правом углу навигатора классов. Новый класс будет создан со стандартным именем (основанном на имени проекта). В нашем случае это – Telecom_Class0. Имя нового класса в навигаторе классов после создания будет выделено, для указания на то, что этот класс выбран в данный момент активным.

Рис. 1.4 – Создание/редактирование класса

5. В активном поле редактора классов введите Consultant. В системе Protégé приняты правила наименования, когда первая буква каждого слова имени класса пишется в верхнем регистре, а остальные буквы – в нижнем, при этом слова разделяются символом подчеркивания.

6. Нажмите ввод или щелкните мышью на отображаемом классе, чтобы подтвердить и отобразить свои изменения.

7. Если при изменении имени класса у вас возникли проблемы, посмотрите в панель редактора классов справа в главном окне Protégé. Стандартное имя нового класса должно быть отображено и выделено в поле Name. Если правильное стандартное имя отображается, но не выделено, просто щелкните на поле Name мышкой, для того чтобы его отредактировать. Если имя не правильное, тогда скорее всего вы выбрали неверный класс в области отображения иерархии классов (Class Hierarchy). Щелкните мышью на нужном классе.

Создадим класс «Клиент». Клиентами отделения электросвязи могут быть как существующие абоненты, так и потенциальные.

1. Выделите класс THING. Если этого не сделать, то будет создан класс, который станет подклассом класса Consultant.

2. Нажмите кнопку создать класс (Create Сlass) и задайте ему имя «Customer».

3. Нажмите ввод для завершения создания класса.

Создадим подклассы класса «Клиент» (рис. 1.5):

1. Выберите класс Customer в области отображения иерархии классов.

2. Нажмите кнопку Create Сlass и переименуйте новый класс в Abonent (существующий абонент). Помните, что когда вы создаете новый класс, он автоматически создается как подкласс текущего, выбранного в навигаторе слева, класса. Также, когда создается первый подкласс текущего класса, слева от родительского класса в навигаторе появляются «иерархические» стрелки. Можно использовать эти стрелки для того, чтобы показать или скрыть подклассы класса. Продолжая разрабатывать онтологию, создадим еще один подкласс класса Customer (New_Client). Это потенциальные клиенты компании.

3. Выберите класс Клиент (Customer) в навигаторе классов (Class Browser).

4. Нажмите кнопку Create Class и переименуйте созданный класс в New_Client.

Рис. 1.5 – Создание подклассов для базового класса Клиент

Аналогично создадим базовый класс Staff (Персонал), включающий подклассы Administrator (Администратор), Operator (Оператор по приему платежей) и Senior_Cashier (Старший кассир).

На данной стадии разработки классы Консультант и Персонал находятся на одном уровне в создаваемой иерархии, в то время как Администратор, Оператор по приему платежей и Старший кассир являются подклассами класса Персонал. С точки зрения концепции Консультант является одной из категорий персонала. Значит, текущее расположение в иерархии противоречит принципам онтологий – все классы, имеющие одно и то же более общее понятие, должны находиться на одном уровне иерархии.

Таким образом, необходимо модифицировать созданную иерархию, чтобы класс Consultant стал подклассом класса Staff, правильно отражая структуру предметной области (см. рис. 1.6). Для этого необходимо сделать следующее:

1. Щелкните на классе Consultant и перетащите (методом drag-n-drop) его на класс Staff.

2. Класс Consultant будет удален с текущего места в иерархии и создан в новом, уже в виде подкласса Staff.

В данном случае, ошибка была введена намерено, в качестве примера. Однако, при создании собственных онтологий, в процессе разработки могут открываться отличия или сходства между классами, которые не были очевидны на начальных этапах проектирования. Перемещение, создание, удаление классов необходимы для создания иерархии, оптимально отражающей положение вещей в предметной области. Также можно сразу уточнить структуру персонала. Разделите весь персонал на два отдела: Расчетный отдел (Accounting_Department) и Отдел по работе с клиентами (Customer_Relations_Department). Подклассами первого станут Operator и Senior_Cashier, а второго – Administrator и Consultant.

Рис. 1.6 – Изменение иерархии классов

В системе Protégé классы могут быть как конкретными (Concrete), на основе таких классов система может непосредственно создавать готовые экземпляры, так и абстрактными (Abstract), у таких классов не может быть экземпляров. При создании класса ему по умолчанию присваивается тип Concrete. Так как в рассматриваемом примере понятие клиента является скорее обобщающим, нежели связанным с какой-либо конкретной сущностью, то класс Customer не может сам по себе иметь экземпляров без более детального определения (к примеру, является ли уже клиент абонентом компании или он только потенциальный). Поэтому классу Customer определяется роль абстрактного класса.

1. Выберите класс Клиент в области иерархии классов (Class Hierarchy). Далее в редакторе классов, перейдите в поле Роль (Role) (см. рис. 1.7).

Рис. 1.7 – Выбор роли класса через меню Role

2. Щелкните по стрелке в правой части поля Role и в выпадающем списке выберите Abstract.

Когда вы меняете роль класса, меняется и иконка перед именем класса. В данном случае, иконка будет означать, что класс является абстрактным.

Консультант может работать как с потенциальными клиентами, рассказывая им об услугах компании, так и с существующими абонентами в расчетном отделе, проясняя с ними вопросы по начислениям и платежам, тарифам и специальным предложениям. Поскольку класс Consultant уже создан в классе Customer_Relations_Department, создавать его снова в виде подкласса Расчетного отдела не требуется. Вместо этого можно сделать так, чтобы существующий класс Consultant стал подклассом Settlement_Department (рис. 1.8). Для этого нужно выполнить следующее:

1. Выберите класс Consultant в навигаторе классов.

Рис. 1.8 – Выбор дополнительного базового класса

2. Найдите панель базовых классов (Superclasses) в нижней левой части окна системы Protégé (под навигатором классов). Заметьте, что когда выбран класс Consultant, его базовый класс Customer_Relations_Department отображается в панели.

3. Нажмите кнопку Add Superclass (добавить базовый класс) в верхнем правом углу панели базовых классов (Superclasses). Появится диалоговое окно, отображающее в виде иерархии все классы, созданные на данный момент.

4. Выберите класс Settlement_Department и нажмите «OK». Теперь класс Консультант имеет два базовых класса. Оба класса отображены в панели базовых классов.

Существует еще одна возможность задания базового класса – при помощи механизма перетаскивания (drag-n-drop):

1. Выберите класс Consultant в навигаторе классов.

2. Удерживая нажатой левую кнопку мыши, перетащите его на класс Settlement_Department. Класс Settlement_Department автоматически будет выделен.

3. Перед тем как отпустить кнопку мыши, нажмите и удерживайте клавишу Ctrl, затем отпустите кнопку мыши, для того чтобы перенести класс.

Создание слотов

В системе Protégé под классами подразумеваются конкретные понятия (концепции) предметной области, такие как, например, консультант или расчетный отдел. В то же время классы – это больше чем объекты, объединенные в иерархию. Они также могут иметь атрибуты (свойства), к примеру, для консультанта это – имя, номер телефона или величина зарплаты, и отношения между ними. Атрибуты класса и их отношения описываются конструкцией под названием слот. В данном разделе описаны процедуры создания слотов, привязки слотов к классам, описываются отношения между классами, а также механизм наследования слотов.

Создание слота возможно несколькими способами.

1 способ. Создание слота с использованием вкладки Slots.

Для того чтобы создать слот name, используя вкладку Slots, необходимо (см. рис. 1.9):

1. Щелкнуть на вкладке Slots. Расположение элементов управления на вкладке слотов схоже с расположением на вкладке классов – готовые слоты отображаются слева, в области просмотра, а редактирование слотов возможно c помощью редактора справа.

2. Нажать кнопку создания слота (Create Slot) в правом верхнем углу панели иерархии слотов (Slot Hierarchy). Новый слот будет создан. Также как и при создании класса, ему присваивается стандартное имя, в нашем случае это – Telecom_Class0 (после создания слота его имя будет автоматически выделено).

3. Перед переименованием слота, убедитесь, что стандартное имя выделено в редакторе слота. Задайте слоту новое имя – name. Рекомендованные правила наименования, таковы, что имя слота должно быть написано в нижнем регистре, при этом слова в имени разделяются подчеркиванием (например, «slot_name»). Данные правила (классы с большой буквы, слоты с маленькой) помогает отличать классы от слотов в созданной онтологии.

4. Значения слота по умолчанию имеют тип String (строка). Тип накладывает ограничения на то, какие значения может принимать слот. Строковый слот, к примеру, может принимать в качестве значений алфавитно-цифровые символы (включая пробелы). В данном случае нет необходимости менять в редакторе какие-либо аспекты/грани (facets) созданного слота.

Рис. 1.9 – Добавление слота

Далее необходимо связать созданный атрибут name (имя) с одним или несколькими классами. К примеру, мы хотим, чтобы каждый из экземпляров-подклассов класса Customer_Relations_Department имел имя. Вернемся к вкладке классов и отредактируем класс Customer_Relations_Department. Любой из создаваемых или связываемых с классом атрибутов будет отображаться в редакторе классов, справа от навигатора классов. Мы уже использовали редактор классов для смены имени нового класса, а также для изменения роли класса. Теперь редактор классов используется для просмотра и именования слотов. Для того чтобы связать слот name с классом (см. рис. 1.10):

1. Перейдите на вкладку классов, расположенную в левой части окна под панелью инструментов.

2. Выделите класс Customer_Relations_Department в панели иерархии классов (Class Hierarchy). В области редактора классов (справа) отображается поле имени, роли класса, а также его документация и ограничения (constraints). Под этими полями расположена панель шаблонов слотов (Template slots), которая занимает всю оставшуюся нижнюю часть редактора классов. Эта область показывает слоты, связанные с классом. На текущий момент она должна быть пуста.

3. Для добавления слота к классу, нажмите кнопку Add Slot. Кнопки управления слотами находятся в верхнем правом углу панели шаблонов слотов (Template slots).

4. После того как вы нажмете кнопку, появится диалог выбора слота, в котором будет отображен список всех доступных слотов проекта (в алфавитном порядке, за исключением системных классов Protégé, которые будут отображены внизу списка).

5. Выберите созданный ранее слот name и нажмите OK.

Рис. 1.10 – Добавление нового слота в список шаблонов

Любой подкласс класса автоматически наследует все слоты базового класса. К примеру, при выборе класса Консультант можно увидеть, что слот name уже связан с этим подклассом через механизм наследования, при этом иконка слота отличается от той, которая использовалась в классе Customer_Relations_Department (см. рис. 1.11). Подклассы более чем с одним базовым классом наследуют слоты от всех базовых классов. К примеру, если для класса Accounting_Department создать слот зарплата (salary), то класс Consultant унаследует оба слота (name и salary), поскольку имеет два базовых класса. Множественное наследование одна из основополагающих возможностей Protégé.

Рис. 1.11 – Отображение наследованных слотов

2 способ создания слотов. Использование вкладки классов (см. рис. 1.12).

Создадим вышеупомянутый слот salary для класса Settlement_Department:

1. Выберите класс Settlement_Department в панели иерархии классов.

2. Нажмите кнопку создания слота (Create Slot), в правом углу панели шаблонов слотов – появится окно добавления слота.

3. В поле имя (Name) наберите salary и нажмите ввод.

4. Вернитесь в главное окно (при этом не обязательно закрывать окно редактирования, можно оставить его открытым и вернуться туда позже для редактирования свойств слота). Теперь при выборе класса Settlement_Department новый слот отображается в панели шаблонов слотов.

Рис. 1.12 – Создание слота на вкладке классов

Созданные на предыдущем шаге слоты являются простыми. Однако, слоты сами по себе, тоже могут иметь свойства. К примеру, зарплата всегда является числом, так что соответствующий слот может иметь денежный тип. Слоты также можно использовать для задания отношений между классами. Свойства слота, называемые аспектами/гранями (facets), могут быть созданы как на вкладке классов (с использованием диалога спецификации слота), так и на вкладке слотов (с помощью редактора слотов).

Создание граней слота

Определим аспекты слота salary (зарплата):

1. Выберите класс Settlement_Department в панели иерархии классов.

2. Щелкните на слоте salary в панели шаблонов слотов (Template slots), откроется форма выбора вида слота. При редактировании данного слота, можно выбрать, будут ли изменения применяться к слоту и всем связанным с ним классам (вверх по иерархии до самого верхнего), либо они затронут только текущий класс и всех его потомков.

3. В нашем случае необходимо просмотреть и отредактировать слот верхнего уровня. Убедитесь, что режим просмотра слотов верхнего уровня (View top-level slot) выбран и нажмите OK. При этом изменение определения слота будет затрагивать всю онтологию.

4. В открывшейся форме редактирования слота из списка типов значения (Value Type) выберите Float. Теперь при создании экземпляров данного слота можно будет вводить их значения только в формате с плавающей запятой.

5. Введите 0 (ноль) в поле Minimum (минимальное значение). Таким образом, любое значение поля salary будет неотрицательным.

6. Закройте, диалог редактирования слота, при этом описание слота в панели шаблонов слотов изменится. В колонке тип теперь указан Float, а в колонке Other facets (другие аспекты) отображено минимальное значение слота, равное нулю.

Создание отношений между классами

Система Protégé позволяет создавать слоты, которые могут быть использованы для описания отношений между классами, которые не определены в иерархии классов (см. рис. 1.13). Для этого существуют слоты Instance (экземпляр) или Class (класс). К примеру, Administrator может быть ответственным за одного или более Consultant.

Создадим новый слот, описывающий связь между ними:

1. В навигаторе классов выберите класс Administrator.

2. Для того чтобы создать и связать новый слот с классом нажмите кнопку Create Slot.

3. В поле имя (Name) открывшейся формы редактирования наберите «responsible_for» (ответственный за).

4. Из списка типов значений (Value Type) выберите Instance (экземпляр). Ниже меню выбора типа значения (Value Type) будет отображена панель доступных классов (Allowed Classes).

5. Нажмите кнопку Add Class (в правой верхней части панели Allowed Classes). Появится окно выбора классов, содержащее все классы проекта. Выберите класс Consultant и нажмите OK.

6. Чтобы разрешить администратору быть ответственным более чем за одного сотрудника, поставьте галочку в пункте multiple панели мощности (cardinality).

Рис. 1.13 – Редактор слота

Аналогично перемещению классов по иерархии, можно перемещать и слоты. Слоты перемещаются перетаскиванием мышью, в случае копирования – перетаскиванием с удерживанием клавиши Ctrl.

Скопируйте name и salary в класс Staff.

Создание экземпляров классов

Экземпляры классов – это непосредственно данные проектируемой базы знаний. Создадим два экземпляра класса Administrator (см. рис. 1.14):

1. Перейдите на вкладку экземпляров (instances). Вкладка содержит три панели. Первая, слева, отображает иерархию классов. Средняя панель, которая в данный момент пуста, показывает список экземпляров, созданных для конкретного класса. Третья панель соответствует редактору экземпляров класса, где вводятся значения слотов текущего (выбранного) класса.

2. Раскройте список подклассов класса Customer_Relations_Department.

3. Выберите класс Administrator. Кнопка Create Instance станет активной, что означает возможность создания экземпляра класса.

4. Нажмите кнопку Create Instance. Будет создан экземпляр класса и появится окно редактора экземпляра. Количество полей данного окна соответствует числу созданных слотов, поля используются для присвоения слотам значений. Заметьте, что отображение класса Administrator в панели иерархии классов (Class Hierarchy) изменилось после того, как был создан новый экземпляр класса. Единица в скобках означает, что класс имеет один экземпляр.

5. Введите «Игорь Усачев» в поле Имя (Name).

6. Введите «20000» в поле Зарплата (Salary). Если в данное поле ввести значение, тип которого отличен от заданного типа значений поля (в нашем случае это – Float, число с плавающей запятой), то встроенный редактор подсветит введенные символы красным цветом. Заметим, что экземпляр в навигаторе экземпляров (Instance Browser) все еще имеет стандартное имя Telecom_Class(4). Создайте еще один экземпляр класса AdministratorДенис Любимов с зарплатой 40000. Аналогичным образом создайте экземпляры класса Consultant: Михаила Скокова, получающего 15000, и Игоря Сергеенко, с зарплатой 12000.

Рис. 1.14 – Вид редактора класса с экземпляром

Создание отношений (связей) между экземплярами классов

В этом разделе приводится пример модификации экземпляра Денис Любимов таким образом, чтобы он стал «ответственным» за экземпляр Михаил Скоков (см. рис. 1.15):

1. Перейдите на вкладку экземпляров (instances), разверните класс Customer_Relations_Department в панели иерархии классов (Class Hierarchy) и выберите класс Administrator. Экземпляры класса Administrator теперь показаны в навигаторе экземпляров (Instance Browser).

2. Выберите Денис Любимов в навигаторе экземпляров. Слоты для него будут показаны в редакторе экземпляров, включая слот responsible_for (ответственный за). Заметьте, что система Protégé использует имена слотов в форме редактора, но автоматически заменяет подчеркивания на пробелы и переводит в верхний регистр первую букву названия.

3. Нажмите кнопку Add Instance, рядом с полем Responsible For в правой верхней части окна. Откроется окно диалога с двумя панелями. Слева будет представлена иерархия доступных классов для слота responsible_for.

4. Выберите класс Consultant. Справа отобразятся все его экземпляры. Выберите Михаил Скоков и нажмите ОК.

Выполнение перечисленных этапов приводит к созданию отношения (связи) в онтологии, которая означает, что администратор Денис Любимов является ответственным за консультанта Михаила Скокова.

Рис. 1.15 – Выбор класса для задания связи

Настройка формы ввода

Для каждого класса в онтологии, Protégé генерирует форму по умолчанию, которую можно использовать для ввода данных экземпляра. Формы содержат поля ввода данных («виджеты») для каждого слота, связанного с классом. Cтандартная, созданная Protégé, форма может быть изменена на вкладке форм (Forms) (см. рис. 1.16).

Рис. 1.16 – Конфигурация формы

«Виджет» можно настроить так, чтобы он показывал надпись или список кнопок, отличные от установленных по умолчанию. К примеру, если требуется удалить экземпляр слота responsible_for из проекта, досточно просто нажать кнопку в InstanceListWidget. В свою очередь, для того чтобы отобразить кнопку удаления необходимо сделать следующее (см. рис. 1.17):

1. Два раза щелкнуть на InstanceListWidget с именем Responsible For в редакторе форм.

2. Перейти на вкладку кнопки.

3. Установить галочку для пункта Show Delete Instance Button (показывать кнопку удаления экземпляра).

4. Нажать ОК. «Виджет» для слота responsible_for (ответственный за) после проделанных операций будет иметь пять кнопок.

Рис. 1.17 – Редактирование свойств «виджета»

Создание и сохранение запросов

Вкладка запросов позволяет записывать и получать сведения по всем экземплярам классов проекта, которые удовлетворяют интересующим критериям. Для того чтобы создать запрос, необходимо выбрать один или более классов и один или более слотов в классе (см. рис. 1.18). Можно также сохранять запросы во встроенной библиотеке для последующего использования (кнопка Add to Query Library).

Рис. 1.18 – Редактор запросов