Загрузка данных
2.1 Установка необходимых пакетов
Выполните команды:
sudo apt update
sudo apt install -y default-jre unzip wget
Пакет default-jre обеспечивает запуск Java-приложений, включая графический интерфейс; unzip распаковывает архивы; wget скачивает файлы.
В Debian 12 пакет default-jre устанавливает OpenJDK 17, в Debian 13 — OpenJDK 21. Обе версии подходят для указанного выпуска Protégé [3, 4]. Проверьте Java:
java -version
2.2 Скачивание и распаковка
Перейдите в домашний каталог и скачайте архив. Переменная base содержит начало адреса, чтобы команда оставалась удобной для набора:
cd ~
base="https://github.com/protegeproject/protege-distribution"
wget "$base/releases/download/protege-5.6.9/Protege-5.6.9-platform-independent.zip"
Альтернативный способ: откройте страницу выпуска [1] в браузере Debian и скачайте Protege-5.6.9-platform-independent.zip из раздела Assets. Для следующих команд файл должен находиться в домашнем каталоге.
Распакуйте архив и запустите программу:
unzip Protege-5.6.9-platform-independent.zip
cd Protege-5.6.9
sh run.sh
Если есть проблемы при запуске. Можно попробовать написать:
export PROTEGE_JAVA_HOME=/usr/lib/jvm/java-21-openjdk-arm64
bash run.sh
Запускайте Protégé от обычного пользователя, без sudo. Для следующего запуска достаточно:
cd ~/Protege-5.6.9
sh run.sh
Способ запуска через run.sh предусмотрен для независимого от платформы дистрибутива [2]. Для дальнейших проверок используйте механизм вывода HermiT, чтобы применять одинаковую инструкцию на AMD64 и ARM64.
2.3 Возможные проблемы при запуске
Сообщение или ситуация Действие
java: command not found Проверьте установку default-jre.
Unable to access jarfile Перейдите в распакованный каталог Protégé и повторите запуск.
Ошибка DISPLAY или отсутствие графического окружения Запускайте программу из терминала графического рабочего стола Debian.
Exec format error после скачивания другого дистрибутива Используйте platform-independent.zip и Java из Debian.
Контрольный результат: открыто главное окно Protégé. Сделайте скриншот и сохраните сведения о версии Java и архитектуре Debian.
3 Основные понятия
Элемент Значение и пример
Класс — Class Категория объектов. SoftwareProduct — программный продукт.
Подкласс — Subclass Более узкая категория. WebApplication — веб-приложение.
Экземпляр — Individual Конкретный объект. LibraryWeb — библиотечная система.
Объектное свойство — Object property Связь объектов. Продукт implementsFunction функцию.
Свойство данных — Data property Связь объекта со значением. Название продукта — строка.
Аксиома Формальное утверждение. Веб-приложение является программным продуктом.
Механизм вывода — Reasoner Проверяет модель и получает логические следствия из её утверждений.
Класс WebApplication является категорией, а LibraryWeb — конкретным объектом этой категории. Не смешивайте классы и экземпляры.
Названия сущностей вводите латиницей, без пробелов, точно по инструкции. Русские пояснения добавляйте в аннотации rdfs:label и rdfs:comment. Чтобы названия в выражениях совпадали с инструкцией, оставьте отображение сущностей по коротким именам IRI, а не по русским меткам.
4 Создание новой онтологии
1. Выберите File → New ontology.
2. Укажите IRI онтологии http://example.org/practice3/software и завершите создание.
3. Выберите File → Save as и сохраните файл Practice3_Фамилия.owl.
4. Если предлагается выбор формата, используйте RDF/XML.
IRI — идентификатор онтологии. Создавать сайт по этому адресу не требуется.
В аннотациях онтологии добавьте rdfs:label со значением «Онтология программных продуктов», а в rdfs:comment укажите ФИО, группу и назначение модели.
5 Создание классов
Откройте Entities → Classes. Выделите owl:Thing и создавайте классы кнопкой добавления подкласса. Чтобы создать вложенный класс, предварительно выделите родительский класс.
Постройте следующую иерархию. Отступ обозначает вложенность:
owl:Thing
SoftwareProduct
WebApplication
DesktopApplication
ProductWithSecurityFunction
ProductWithBothRequirementTypes
UserRole
Function
DataManagementFunction
SecurityFunction
Requirement
FunctionalRequirement
NonFunctionalRequirement
Класс Смысл
SoftwareProduct Программный продукт
WebApplication Веб-приложение
DesktopApplication Настольное приложение
UserRole Роль пользователя
Function Функция программного продукта
DataManagementFunction Функция работы с данными
SecurityFunction Функция безопасности
Requirement Требование к продукту
FunctionalRequirement Требование к выполняемым действиям
NonFunctionalRequirement Требование к качеству или условиям работы
ProductWithSecurityFunction Продукт с описанной функцией безопасности
ProductWithBothRequirementTypes Продукт с требованиями обоих типов
Последние два класса позднее получат формальные определения.
5.1 Непересекающиеся классы
Объявите SoftwareProduct, UserRole, Function и Requirement попарно непересекающимися через раздел Disjoint With. Например, для SoftwareProduct добавьте три остальных класса; для UserRole — Function и Requirement; для Function — Requirement. Обратные пары повторно вводить не требуется.
Также объявите непересекающимися FunctionalRequirement и NonFunctionalRequirement. В учебной модели один объект представляет либо функциональное, либо нефункциональное требование. Смешанное требование следует разделить на два объекта.
Не объявляйте все подклассы SoftwareProduct непересекающимися: веб-приложение может одновременно иметь функцию безопасности и требования обоих типов.
Контрольный результат: создано 12 именованных классов, не считая owl:Thing, установлены иерархия и непересекаемость указанных классов.
6 Создание объектных свойств
Откройте Object properties и создайте четыре свойства. Для каждого выделите его в дереве, добавьте класс в Domains и класс в Ranges.
Свойство Domain Range
implementsFunction SoftwareProduct Function
intendedFor SoftwareProduct UserRole
hasRequirement SoftwareProduct Requirement
isFunctionOf Function SoftwareProduct
Свойство implementsFunction означает «продукт реализует функцию», intendedFor — «продукт предназначен для роли», hasRequirement — «к продукту предъявляется требование», isFunctionOf — «функция относится к продукту».
У implementsFunction в разделе Inverse Of укажите isFunctionOf. Из утверждения LibraryWeb implementsFunction BookSearch программа сможет вывести BookSearch isFunctionOf LibraryWeb.
Не устанавливайте для этих свойств характеристику Functional: продукт может иметь несколько функций, ролей и требований.
Domain и Range используются для вывода типов объектов. Они не являются списком допустимых значений обычной формы: ошибочная связь может привести к выводу нежелательного типа или к противоречию [5].
7 Создание свойств данных
Откройте Data properties. Создайте свойства и задайте Domain и Range.
Свойство Domain Range
productName SoftwareProduct xsd:string
productVersion SoftwareProduct xsd:string
requirementText Requirement xsd:string
maxResponseTime NonFunctionalRequirement xsd:decimal
productName хранит название продукта; productVersion — версию; requirementText — текст требования; maxResponseTime — допустимое время ответа в секундах.
Версия задаётся строкой: значение вида 1.2.0 не является десятичным числом. Для maxResponseTime добавьте комментарий «Допустимое время ответа, секунды».
8 Создание экземпляров
Откройте Individuals by class. Если вкладка отсутствует, включите её через Window → Tabs. Выберите нужный класс и добавьте экземпляр. В Types задавайте класс из таблицы; принадлежность к родительским классам следует из иерархии.
Экземпляр Класс
LibraryWeb WebApplication
NotesDesktop DesktopApplication
StudyPortal WebApplication
Librarian UserRole
Student UserRole
BookSearch DataManagementFunction
BookIssue DataManagementFunction
Login SecurityFunction
FR_Search FunctionalRequirement
FR_Issue FunctionalRequirement
FR_Notes FunctionalRequirement
NFR_LibrarySpeed NonFunctionalRequirement
NFR_PortalSpeed NonFunctionalRequirement
LibraryWeb — библиотечная система; NotesDesktop — приложение для заметок; StudyPortal — учебный портал. Librarian обозначает роль библиотекаря, Student — роль студента. BookSearch — поиск книг, BookIssue — учёт выдачи, Login — вход пользователя.
Не назначайте экземплярам типы ProductWithSecurityFunction и ProductWithBothRequirementTypes вручную. Их должен определить механизм вывода.
8.1 Свойства продуктов
Выберите продукт. В Data property assertions нажмите добавление, выберите свойство, введите значение и тип xsd:string. Заполните таблицу значений:
Экземпляр productName productVersion
LibraryWeb Библиотечная система 1.0
NotesDesktop Заметки студента 2.1
StudyPortal Учебный портал 1.5
8.2 Тексты требований
Выберите каждый экземпляр требования и добавьте requirementText с типом xsd:string.
Экземпляр Текст требования
FR_Search Система должна обеспечивать поиск книг по названию и автору.
FR_Issue Система должна позволять библиотекарю регистрировать выдачу книги читателю.
FR_Notes Приложение должно позволять создавать, изменять и удалять заметки.
NFR_LibrarySpeed При 20 одновременных пользователях поиск должен завершаться не более чем за 2 секунды.
NFR_PortalSpeed При 30 одновременных пользователях поиск должен завершаться не более чем за 3 секунды.
Добавьте maxResponseTime: для NFR_LibrarySpeed — 2.0, для NFR_PortalSpeed — 3.0. Тип значений xsd:decimal; используйте десятичную точку.
Значения описывают требования. Protégé не измеряет фактическую скорость работы приложений.
9 Связи между экземплярами
Выберите экземпляр продукта. В Object property assertions нажмите добавление, выберите свойство и связанный объект. Если перечислено несколько объектов, создайте отдельное утверждение для каждого.
Продукт Свойство Связанные объекты
LibraryWeb implementsFunction BookSearch, BookIssue, Login
LibraryWeb intendedFor Librarian, Student
LibraryWeb hasRequirement FR_Search, FR_Issue, NFR_LibrarySpeed
NotesDesktop intendedFor Student
NotesDesktop hasRequirement FR_Notes
StudyPortal implementsFunction BookSearch, Login
StudyPortal intendedFor Student
StudyPortal hasRequirement FR_Search, NFR_PortalSpeed
В учебном примере предполагается, что портал предоставляет доступ к поиску по библиотечному каталогу. Связи isFunctionOf вручную не вводите: они должны выводиться из обратности свойств.
Для NotesDesktop сведения о реализованных функциях пока отсутствуют. Это понадобится для анализа открытого мира.
Контрольный результат: у LibraryWeb видны название, версия, функции, роли пользователей и требования.
10 Определение вычисляемых классов
Откройте Classes, выберите ProductWithSecurityFunction. В Equivalent To нажмите добавление и в редакторе выражения введите:
SoftwareProduct and (implementsFunction some SecurityFunction)
Выражение определяет продукты, реализующие хотя бы одну функцию безопасности.
Выберите ProductWithBothRequirementTypes и добавьте в Equivalent To:
SoftwareProduct
and (hasRequirement some FunctionalRequirement)
and (hasRequirement some NonFunctionalRequirement)
Это продукты, для которых известно хотя бы одно функциональное и хотя бы одно нефункциональное требование. Выражение можно вводить одной строкой. Слова and и some являются частью синтаксиса.
Equivalent To задаёт определение и позволяет включать в класс объекты, удовлетворяющие условию. Одного такого ограничения в SubClass Of для обратного вывода недостаточно [6, 7].
11 Запуск логического вывода
1. Откройте Reasoner и выберите HermiT.
2. Выполните Reasoner → Start reasoner и дождитесь обработки.
3. После изменения модели используйте Reasoner → Synchronize reasoner.
Проверьте выводимые типы экземпляров или используйте запросы следующего раздела.
Проверка Ожидаемый результат
Экземпляры SoftwareProduct LibraryWeb, NotesDesktop, StudyPortal
Экземпляры ProductWithSecurityFunction LibraryWeb, StudyPortal
Экземпляры ProductWithBothRequirementTypes LibraryWeb, StudyPortal
Обратные связи BookSearch isFunctionOf LibraryWeb; isFunctionOf StudyPortal
Если выводимые утверждения не отображаются в карточке объекта, проверьте их через DL Query. Программа получила новые утверждения из фактов и определений.
Принадлежность к ProductWithSecurityFunction показывает наличие описанной функции безопасности. Она не доказывает защищённость реального приложения.
12 Запросы DL Query
Включите Window → Tabs → DL Query. Запустите механизм вывода. В результатах включите экземпляры — Instances или Individuals, в зависимости от интерфейса. Если есть параметр Direct, отключите его, чтобы видеть также экземпляры подклассов [8].
Введите выражение и нажмите Execute. Выполните семь запросов. Для каждого внесите в отчёт выражение, результат и краткое объяснение. Ожидаемые результаты приведены для исходной модели до самостоятельного расширения.
Запрос 1 Все известные продукты
SoftwareProduct
Ожидается: LibraryWeb, NotesDesktop, StudyPortal.
Запрос 2 Веб приложения
WebApplication
Ожидается: LibraryWeb, StudyPortal.
Запрос 3 Продукты для библиотекаря
SoftwareProduct and (intendedFor value Librarian)
Ожидается: LibraryWeb.
Запрос 4 Продукты с функцией безопасности
SoftwareProduct and (implementsFunction some SecurityFunction)
Ожидается: LibraryWeb, StudyPortal.
Запрос 5 Продукты с требованиями обоих типов
ProductWithBothRequirementTypes
Ожидается: LibraryWeb, StudyPortal.
Запрос 6 Продукты с поиском книг
SoftwareProduct and (implementsFunction value BookSearch)
Ожидается: LibraryWeb, StudyPortal.
Запрос 7 Функции библиотечной системы
Function and (isFunctionOf value LibraryWeb)
Ожидается: BookSearch, BookIssue, Login. Результат использует обратное свойство.
12.1 Эксперимент с неизвестными сведениями
Выполните дополнительный запрос:
SoftwareProduct and not (implementsFunction some SecurityFunction)
Не следует ожидать NotesDesktop в результате только потому, что у него не указана функция безопасности. В OWL действует предположение открытого мира: отсутствие утверждения не означает истинности противоположного утверждения. Программа пока не знает, есть ли у продукта такая функция [9].
Ответьте в отчёте: чем отличаются утверждения «у продукта нет функции безопасности» и «в онтологии не описана функция безопасности этого продукта»?
13 Проверка противоречия
1. Сохраните корректную онтологию.
2. Выберите LibraryWeb и в Types дополнительно добавьте Requirement.
3. Выполните Reasoner → Synchronize reasoner.
4. Зафиксируйте сообщение о противоречивости онтологии.
LibraryWeb относится к WebApplication, а значит, к SoftwareProduct. Классы SoftwareProduct и Requirement непересекающиеся. Ошибка возникла потому, что один объект оказался в несовместимых категориях.
Удалите у LibraryWeb ошибочный тип Requirement. Повторите проверку, убедитесь, что противоречие исчезло, и сохраните исправленный файл.
Контрольный результат: в отчёте показаны ошибка, её причина и повторная успешная проверка.
14 Самостоятельное задание
Расширьте онтологию собственным программным продуктом. Используйте продукт из предыдущей практической работы, курсовой работы или выберите новый: систему записи на приём, интернет-магазин, учёт оборудования, бронирование аудиторий, учёт личных расходов или регистрацию заявок в техническую поддержку.
14.1 Описание продукта
В одном абзаце укажите название, решаемую задачу, пользователей и тип приложения — веб-приложение или настольное приложение.
14.2 Новые экземпляры
Создайте не менее семи новых экземпляров. В таблице приведён пример для системы заявок; используйте имена своего варианта.
Категория Число Пример
Программный продукт 1 HelpDeskWeb
Роль пользователя 1 SupportOperator
Функция работы с данными 1 TicketRegistration
Функция безопасности 1 OperatorAuthentication
Функциональное требование 2 FR_CreateTicket, FR_ChangeTicketStatus
Нефункциональное требование 1 NFR_TicketResponseTime
Можно создавать больше объектов, если это нужно для содержательной модели.
14.3 Заполнение свойств
Для продукта задайте название и версию. Для каждого требования напишите конкретный текст. Для требования к времени ответа заполните maxResponseTime.
Примеры требований: «Система должна позволять пользователю зарегистрировать заявку с темой и описанием»; «Система должна позволять оператору изменить статус заявки»; «При 20 одновременных пользователях список заявок должен открываться не более чем за 2 секунды».
Не используйте слова «удобно» и «быстро» без уточнения проверяемого условия.
14.4 Установление связей
Свяжите продукт с ролью через intendedFor, с обеими функциями через implementsFunction и со всеми новыми требованиями через hasRequirement.
14.5 Автоматическая классификация
Синхронизируйте HermiT. Новый продукт должен автоматически попасть в ProductWithSecurityFunction и ProductWithBothRequirementTypes. Не назначайте эти типы вручную.
Объясните в отчёте, какие факты позволили программе получить каждый вывод.
14.6 Три собственных запроса
Составьте запросы, отвечающие на вопросы: какие продукты предназначены для новой роли; какие функции реализует новый продукт; какие продукты реализуют выбранную новую функцию.
Для примера с системой заявок:
SoftwareProduct and (intendedFor value SupportOperator)
Function and (isFunctionOf value HelpDeskWeb)
SoftwareProduct and (implementsFunction value TicketRegistration)
Замените названия на имена своего варианта. В отчёт включите запросы и фактические результаты.
14.7 Изменение знаний
1. Удалите связь своего продукта с созданной функцией безопасности.
2. Синхронизируйте механизм вывода.
3. Проверьте принадлежность продукта к ProductWithSecurityFunction и объясните результат.
4. Восстановите связь и повторите проверку.
Если это была единственная связь с функцией безопасности и других оснований нет, принадлежность перестанет выводиться. Это не является доказательством отсутствия функций безопасности.
15 Требования к отчёту и сдаче работы
Не делайте отдельный скриншот каждого действия. Выберите изображения, подтверждающие основные результаты.
Перед сдачей закройте и повторно откройте OWL-файл, запустите HermiT и убедитесь в отсутствии противоречий. Итоговая онтология должна содержать не менее 12 классов, 4 объектных свойств, 4 свойств данных и 20 экземпляров, включая самостоятельное расширение.