На форуме Semantic Future сейчас активно обсуждаются проблемы использования языка  веб-онтологий .

Читатели спрашивают… (часть 1)

На shcherbak.net  добавлена новая рубрика "Читатели спрашивают..." В рамках этой рубрики читатели shcherbak.net могут  задавать вопросы по тематике , а мы и вы, читатели -специалисты в , надеюсь сможем на эти вопросы ответить. ))

В качестве первой записи этой рубрики решил взять вопросы читателя Dio.

Отвечаем вместе! Присоединяйтесь к обсуждению.

Из комментария читателя dio в FAQ SHCHERBAK.NET:

Я недавно начал знакомиться с инструментарием и пытаюсь выяснить, насколько он применим в моей ситуации. Хотел бы прояснить накопившиеся вопросы, да и вообще уточнить, в ту ли сторону я копаю. Надеюсь, в этом разделе сайта мои вопросы будут более-менее уместны. Должен сказать, что ко всему хорошему вдобавок, мое понимание БД чисто теоретическое, никаких сведений о прикладных аспектах работы с ними я не имею, т.к. моя область — алгоритмы Text Mining. Из-за этого затруднительно бывает понять, какие в точности задачи решает тот или иной инструмент. Одним словом, “сами мы нездешние, люди добрые, допоможите хто сколько сможет”(С) и т.д.

Вопросы:
1) Предположим, объект класса A определен как нечто, имеющее необходимую связь b c объектом класса С (экзистенциальная связь с кардинальностью min 1). Индивидуал I помещен в класс A явно. В Protégé 3 при этом на закладке Frames появляется табличка для ввода значений соответствующего свойства. Табличка подкрашивается красным, пока свойство не введено. В Protégé 4 не происходит вообще ничего.
Вопрос: можно ли заставить Protégé сообщать о таких ситуациях, как о явных ошибках и выдавать их списком.
2) Как выразить на отношение следования вида A b C d V => A e V. Здесь (A, B) – классы, (b, d) – свойства классов, V – класс или тип данных, e – свойство класса или свойство данных.
Например:
Индивидуалы: Событие:Рождение, Персона:Человек, Дата:Год
(Рождение -> Год, Рождение -> Человек) => Человек (родился) Год
3) Контора имеет несколько традиционных баз данных, каждая из которых представляет какой-то аспект «предметной области». Реальна ли такая интеграция этих баз при помощи надстроечной онтологии, описывающей «предметную область» полностью, чтобы никаких фактических изменений в уже работающей части системы делать не пришлось? Годятся ли для этого такие средства, как D2RQ или ? Какое средство предпочтительней?
4) Как решаются проблемы с масштабируемостью отдельной онтологии. Видно, что Protégé целиком прогружает онтологии в память и при размере онтологий порядка нескольких сот тысяч элементов начинает работать уже с некоторым скрипом. Если онтология генерируется по содержимому большой БД «традиционного типа», как это оговорено в п.3, размеры явно будут гораздо большими и критерия для деления результирующей онтологии на фрагменты не видно.
5) Предположим, что часть синсетов WordNet конвертируется в иерархию классов , т.е., отношение isKindOf заменяется isSubclassOf. При этом синсеты WordNet имеют еще десяток связей других типов, каждая из которых имеет определенные свойства (по наличию обратных, транзитивности, запрету на образование циклов и т.п.). Надо полагать, что в нотации это должно быть выражено в виде требования, чтобы экземпляры, выведенные от синсета такого-то, имели связи со всеми экземплярами, выведенными от синсета сякого-то + описание дополнительных свойств. Есть ли практическая возможность поддерживать такого рода онтологию на , или она будет слишком громоздкой?
6) Насколько эффективна будет процедура вывода в онтологии, состоящей из нескольких десятков тысяч классов и нескольких миллионов индивидуалов. Можно ли рассчитывать на то, что при автоматическом пополнении онтологии с таким характерным размером процедура классификации сможет отрабатывать если и не после каждой вставки, то хотя бы раз в час. Ожидающийся темп пополнения – десятки/сотни вставок в час.

Первые ответы на эти вопросы здесь!

Новая задача по представлению на языке класса "Разнородный контейнер" предлагается для обсуждения в нашем Уголке  OWL.

Условие задачи можно прочитать здесь. Ждем ваших решений ))

Обсудить задачу можно здесь!

P.S. Форум работает в тестовом режиме,  о возможных проблемах в работе форума просьба сообщать.

Класс “Разнородный контейнер” (MixedContainer). Есть классы Ball (мяч), Container (контейнер), свойство contains (содержит), связывающее контейнеры с мячами и функциональное свойство hasColor, задающее цвет мяча. Нужно описать класс контейнеров, в котором содержатся минимум два мяча разных цветов.

При этом реализация цветов остается на ваше усмотрение – можно использовать класс Color или datatype (т.е. просто строки типа “red”, “green” и т.д.).

Эта задачка недавно рассматривалась в mailing list Pellet’a (просто с чуть другими именами классов). Эврен Сирин (главный разработчик Pellet) предложил очень красивый вариант решения, который мне захотелось обсудить. Его нетрудно найти, поэтому я не скрываю, но рекомендую сначала подумать самим. Ну и разумеется не лишать других такого удовольствия.

Ни для кого не секрет, что львиная доля проектов, связанных с , разрабатывается на Java. Фреймворки для работы с семантическими онтологиями не являются исключением: все основные проекты (Jena, API, Sesame и т. д.) написаны именно на Java. Единственным серьезным представителем, использующим .NET, является фирма Intellidimension с продуктами RDF Gateway и Semantics.SDK.

В этой статье опишу свой опыт работы с вышеуказанными фреймворками и поделюсь результатами тестирования.
Читать продолжение »

Уголок OWL

На этой страничке будут собираться интересные, простые но нетривиальные примеры использования . Надеемся, что с вашей помощью этот Уголок быстро перерастет размеры одной страницы!

Я буду использовать Манчестерский синтаксис OWL (не потому, что я сам из Манчестера, а просто потому, что он самый короткий и читабельный). Первым нашим примером будет тот самый "дядя".

1) Класс "Дядя" (Uncle) - класс всех объектов, братья и сестры которых имеют своих детей. Реализация в 2:

ObjectProperty: hasParent • hasBrother
SubPropertyOf: hasUncle
Class Uncle:
EquivalentTo: Person that (inverse hasUncle some Person)

Объяснение: здесь используется цепочка свойств (property chain) с вложенностью: сложное свойство hasParent hasBrother (цепочка двух свойств) являетс подсвойством hasUncle (это аналогично правилу hasParent(x,y) ^ hasBrother(y,z) => hasUncle(x,z)). Далее все просто: дядя - это все такие объекты x, что x принадлежит Person и существует такой y (племянник(ца)), что hasUncle(y,x). Заметим, что этот класс можно описать в 2 в котором появились property chains, но не в 1.

2) Класс "любитель кошек" (CatLover). Подразумевая класс "Кошка" (Cat) и свойство "любить" (loves)  надо выразить класс любителей кошек. Каждый экземпляр CatLover любит *всех* экземпляров Cat.

linkLover o (inverse linkCat) SubPropertyOf: loves
CatLover SubClassOf (linkLover some {link})
Cat SubClassOf (linkCat some {link})

Иллюстрация:

catlover

Смысл в том, что используется вспомогательный экземпляр (link), который связывает   любителей кошек и самих кошек. В легко сказать, что *каждый* любитель кошек связан с link при помощи свойства linkLover, и *каждая* кошка связана с link при помощи свойства linkCat (описания свойств тривиальны). Далее остается последний шаг: сказать, что любая цепочка "любитель кошек -> link ->  кошка" означает свойство "любить" (loves). Желающие могут проверить в Protege, что для любого x из класса CatLover и любого y из класса Cat, reasoner сможет вывести loves(x,y). Если не сможет - то это баг (мой или reasoner'a). При этом ему будет гораздо сложнее вывести, что некий объект x является экземпляром CatLover, поскольку в это не будет следовать даже если x будет любить всех кошек *явно* перечисленных в онтологии (для желающих понять почему: почитайте про Open World Assumption).

Я заранее согласен со всеми, кто скажет, что подобное решение слишком сложно для такой простой проблемы. Возможно. К сожалению, логические языки, в которых это решается легко (в частности в логике предикатов), сложнее в вычислительном смысле. Возможно мне стоит создать страничку для обсуждения применимости вообще (только я не хочу делать это на *этой* странице).

3) Класс "Разнородный контейнер" (MixedContainer).

Условие задачи и варианты решения см. здесь!

4) Ждем предложений следующей задачки! (а вы думали, что я один буду трудиться? )

Начало положено, продолжение следует. Обязательно задавайте вопросы и присылайте свои примеры (даже если вы не знаете, как их выразить в ).

На пути к OWL 2…

Рабочаю группа по закончила Last Call и в ответ на замечания выпустила небольшой  обзорный документ, в котором описаны отличия 2 от 1.

Вполне возможно, что больше в 2 серьезных изменений  не будет:

http://www.w3.org/TR/owl2-overview/