Работа с ресурсами онтологии (классами, свойствами,
экземплярами). В Jena все интерфейсы, соответствующие ресурсам онтологии (классам, свойствам, экземплярам), являются расширением базового интерфейса OntResource, который в свою очередь является расширением интерфейсов Resource и RDFNode. Ниже приведен список атрибутов онтологических ресурсов, к которым возможен доступ через интерфейс OntResource:
•versionInfo – версия ресурса;
•comment – комментарий;
•label – название ресурса, ориентированное на человека;
•seeAlso – адрес, по которому можно получить подробную информацию о ресурсе;
•isDefinedBy – специальная форма seeAlso, указывающая адрес, по которому находится определение ресурса;
•sameAs – адрес другого ресурса, аналогичного рассматриваемому;
•differentFrom – адрес другого ресурса, который по определению отличен от рассматриваемого.
Для каждого из этих атрибутов в интерфейсе OntResource существует стандартный набор методов:
•add<property> – добавляет атрибуту еще одно значение;
•set<property> – удаляет все текущие значения атрибута и устанавливает указанное новое значение;
•list<property> – возвращает итератор по всем значениям атрибута;
•get<property> – возвращает значение атрибута, если оно есть. Если нет, возвращает null. Если у атрибута несколько значений, возвращает одно произвольно выбранное;
•has<property> – возвращает true, если задано хотя бы одно значение атрибута. Для некоторых атрибутов этот метод называется is<property>;
•remove<property> – удаляет указанное значение из списка значений атрибута.
Примеры конкретных методов: addSameAs(Resource r), isSameAs(Resource r).
Еще один важный метод интерфейса OntResource: remove() – удаляет из онтологии указанный ресурс и все отношения, в которых он находится, т. е. является их объектом или субъектом.
26
Работа с классами. Классы – это основные элементы онтологии. Классу в онтологии соответствует интерфейс OntClass. Получить класс с определенным URI можно следующим образом:
OntClass teacherClass = model.getOntClass(“http://www.eltech.ru/semweb/tutorial.
owl#Преподаватель”);
Здесь model – экземпляр OntModel, в который была загружена учебная онтология.
Для создания нового класса используется метод createClass(String uri):
OntClass studentClass = model.createClass(“http://www.eltech.ru/semweb/tutorial.owl#
Студент”);
Если класс с заданным URI уже существует в модели, то новый класс не создается, используется существующий.
Для получения списка всех классов в модели используется метод listClasses():
for (ExtendedIterator iter = model().listClasses();iter.hasNext();)
{OntClass tempClass = (OntClass) iter.next(); System.out.println(tempClass.getLocalName());
}
Через интерфейс OntClass возможен доступ к следующим атрибутам:
•subClass – подклассы данного класса;
•superClass – надклассы данного класса;
•equivalentClass – классы, представляющие то же самое понятие, что и данный класс;
•disjointWith – классы, которые не могут иметь с данным классом общих экземпляров (например, таково отношение между классами «Мужчина» и «Женщина»).
По аналогии с методами работы с атрибутами OntResource в OntClass существуют методы установки, добавления, получения, удаления значений перечисленных выше атрибутов. Например, получить список всех подклассов класса «Преподаватель» можно следующим образом:
OntClass teacherClass = model.getOntClass(“http://www.eltech.ru/semweb/tutorial.owl#
Преподаватель”);
for (Iterator i = teacherClass.listSubClasses(); i.hasNext(); ) {
27
OntClass c = (OntClass) i.next(); System.out.println(c.getLocalName());
}
Работа с экземплярами классов. Экземплярам в онтологии соответствует интерфейс Individual.
Для получения экземпляра с заданным URI используется следующий способ:
Individual inst = model.getIndividual(“http://www.eltech.ru/semweb/
tutorial.owl#Студент_3”);
Для получения списка всех экземпляров класса используется метод listInstances() интерфейса OntClass:
OntClass studentClass = model.getOntClass(“http://www.eltech.ru/semweb/tutorial.owl#Студ ент”);
for (ExtendedIterator iter = studentClass.listInstances();iter.hasNext();) {
Individual inst = (Individual) iter.next(); System.out.println(inst.getLocalName());
}
Для создания нового экземпляра класса используется следующий способ:
OntClass studentClass = model.getOntClass (“http://www.eltech.ru/semweb/tutorial.owl#Студент”); Individual inst =
model.createIndividual("http://www.eltech.ru/semweb/ tutorial.owl#Студент_5", studentClass);
Работа со свойствами. Свойству в онтологии соответствует интерфейс
OntProperty (и его базовый интерфейс Property).
Получить доступ к определенному свойству можно следующим образом:
OntProperty nameProp = model.getOntProperty(“http://www.eltech.ru/semweb/
tutorial.owl#имя”);
Для работы со значениями свойств конкретного экземпляра класса используются следующие методы интерфейса Individual (на самом деле они определены в базовом интерфейсе OntResource):
28
•getPropertyValue(Property p) – возвращает значение свойства, если оно определено. Если нет, возвращает null. Если у экземпляра задано несколько значений свойства, возвращается одно произвольно выбранное значение. Значение свойства возвращается в виде объекта типа RDFNode, который является или литералом (интерфейс Literal), или ссылкой на другой ресурс онтологии (интерфейс OntResource);
•setPropertyValue(Property p, RDFNode value) - удаляет все текущие значения свойства экземпляра, после чего устанавливает указанное новое значение;
•addProperty(Property p, RDFNode value) - добавляет еще одно значение свойству экземпляра;
•listPropertyValues(Property property) - возвращает итератор по всем значениям свойства экземпляра;
•removeProperty(Property property, RDFNode value) -
удаляет указанное значение из списка значений свойства экземпляра.
3.2. Методика выполнения работы
Для онтологии, созданной в Лабораторной работе № 2, необходимо выполнить следующие шаги:
1.Создать модель.
2.Загрузить в модель онтологии из файла.
3.Напечатать названия всех классов в онтологии.
4.Напечатать свойства объектов (например, фамилии всех студентов).
5.Удалить объект.
6.Добавить объект.
7.Сохранить модель в файле.
3.3.Содержание отчета
1.Цель выполнения работы.
2.Краткие сведения о библиотеке классов Jena.
3.Фрагменты программного кода и описание особенностей программной реализации следующих действий:
- создание в Java-приложении онтологической модели;
-загрузка в модель онтологии из файла;
-вывод в консоль названий классов, содержащихся в онтологии;
-добавление и удаление класса из онтологии;
29
-вывод в консоль названий всех свойств выбранного класса;
-удаления и добавления индивидуума выбранного класса;
-сохранение модели в файле.
3.4.Вопросы для самоконтроля
1.Охарактеризуйте основные возможности фреймворка Jena.
2.Как создать в Java-приложении онтологическую модель?
3.Как загрузить в модель онтологию из файла?
4.Как выбрать из онтологии и вывести в консоль названия всех содержащихся в онтологии классов?
5.Как добавить и удалить из онтологии некоторый класс?
6.Как выбрать и вывести в консоль названия всех свойств класса?
7.Как добавить индивидуума в некоторый класс (удалить из него)?
8.Как сохранить онтологию (модель) в файле?
СПИСОК ЛИТЕРАТУРЫ
1.Интеллектуальные агенты, многоагентные системы и семантический Web: концепции, технологии, приложения / М. Г. Пантелеев, Д. В. Пузанков
идр. СПб.: Технолит, 2008. 292 с.
2.Пантелеев М. Г., Водяхо А. И., Жандаров В. В. Технологии семантического Веб: учеб. пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2008. 64 с.
3.Официальный сайт RDF. URL: https://www.w3.org/RDF/.
4.Официальный сайт RDFS. URL: https://www.w3.org/TR/rdf-schema/.
5.Официальный сайт OWL. URL: https://www.w3.org/TR/owl2-quick- reference/.
6.Официальный сайт редактора онтологий Protégé. URL: https://protege.stanford.edu/.
7.Официальный сайт проекта Open Ontology Repository. URL: http://ontolog.cim3.net/wiki/OpenOntologyRepository.html.
8.Официальный сайт проекта Linked Open Vocabularies (LOV). URL: http://lov.okfn.org/dataset/lov/.
9.Официальный сайт Jena. URL: https://jena.apache.org/index.html.
30