Материал: Sb96724

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Работа с ресурсами онтологии (классами, свойствами,

экземплярами). В 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