На форуме Semantic Future сейчас активно обсуждаются проблемы использования языка веб-онтологий OWL.
На shcherbak.net добавлена новая рубрика "Читатели спрашивают..." В рамках этой рубрики читатели shcherbak.net могут задавать вопросы по тематике Semantic Web, а мы и вы, читатели -специалисты в Semantic Web, надеюсь сможем на эти вопросы ответить. ))
В качестве первой записи этой рубрики решил взять вопросы читателя Dio.
Отвечаем вместе! Присоединяйтесь к обсуждению.
Из комментария читателя dio в FAQ SHCHERBAK.NET:
Я недавно начал знакомиться с инструментарием Semantic Web и пытаюсь выяснить, насколько он применим в моей ситуации. Хотел бы прояснить накопившиеся вопросы, да и вообще уточнить, в ту ли сторону я копаю. Надеюсь, в этом разделе сайта мои вопросы будут более-менее уместны. Должен сказать, что ко всему хорошему вдобавок, мое понимание БД чисто теоретическое, никаких сведений о прикладных аспектах работы с ними я не имею, т.к. моя область — алгоритмы Text Mining. Из-за этого затруднительно бывает понять, какие в точности задачи решает тот или иной инструмент. Одним словом, “сами мы нездешние, люди добрые, допоможите хто сколько сможет”(С) и т.д.
Вопросы:
1) Предположим, объект класса A определен как нечто, имеющее необходимую связь b c объектом класса С (экзистенциальная связь с кардинальностью min 1). Индивидуал I помещен в класс A явно. В Protégé 3 при этом на закладке Frames появляется табличка для ввода значений соответствующего свойства. Табличка подкрашивается красным, пока свойство не введено. В Protégé 4 не происходит вообще ничего.
Вопрос: можно ли заставить Protégé сообщать о таких ситуациях, как о явных ошибках и выдавать их списком.
2) Как выразить на OWL отношение следования вида A b C d V => A e V. Здесь (A, B) – классы, (b, d) – свойства классов, V – класс или тип данных, e – свойство класса или свойство данных.
Например:
Индивидуалы: Событие:Рождение, Персона:Человек, Дата:Год
(Рождение -> Год, Рождение -> Человек) => Человек (родился) Год
3) Контора имеет несколько традиционных баз данных, каждая из которых представляет какой-то аспект «предметной области». Реальна ли такая интеграция этих баз при помощи надстроечной онтологии, описывающей «предметную область» полностью, чтобы никаких фактических изменений в уже работающей части системы делать не пришлось? Годятся ли для этого такие средства, как D2RQ или Virtuoso? Какое средство предпочтительней?
4) Как решаются проблемы с масштабируемостью отдельной онтологии. Видно, что Protégé целиком прогружает онтологии в память и при размере онтологий порядка нескольких сот тысяч элементов начинает работать уже с некоторым скрипом. Если онтология генерируется по содержимому большой БД «традиционного типа», как это оговорено в п.3, размеры явно будут гораздо большими и критерия для деления результирующей онтологии на фрагменты не видно.
5) Предположим, что часть синсетов WordNet конвертируется в иерархию классов OWL, т.е., отношение isKindOf заменяется OWL isSubclassOf. При этом синсеты WordNet имеют еще десяток связей других типов, каждая из которых имеет определенные свойства (по наличию обратных, транзитивности, запрету на образование циклов и т.п.). Надо полагать, что в нотации OWL это должно быть выражено в виде требования, чтобы экземпляры, выведенные от синсета такого-то, имели связи со всеми экземплярами, выведенными от синсета сякого-то + описание дополнительных свойств. Есть ли практическая возможность поддерживать такого рода онтологию на OWL, или она будет слишком громоздкой?
6) Насколько эффективна будет процедура вывода в онтологии, состоящей из нескольких десятков тысяч классов и нескольких миллионов индивидуалов. Можно ли рассчитывать на то, что при автоматическом пополнении онтологии с таким характерным размером процедура классификации сможет отрабатывать если и не после каждой вставки, то хотя бы раз в час. Ожидающийся темп пополнения – десятки/сотни вставок в час.
Первые ответы на эти вопросы здесь!
Новая задача по представлению на языке OWL класса "Разнородный контейнер" предлагается для обсуждения в нашем Уголке OWL.
Условие задачи можно прочитать здесь. Ждем ваших решений ))
Обсудить задачу можно здесь!
P.S. Форум работает в тестовом режиме, о возможных проблемах в работе форума просьба сообщать.
Класс “Разнородный контейнер” (MixedContainer). Есть классы Ball (мяч), Container (контейнер), свойство contains (содержит), связывающее контейнеры с мячами и функциональное свойство hasColor, задающее цвет мяча. Нужно описать класс контейнеров, в котором содержатся минимум два мяча разных цветов.
При этом реализация цветов остается на ваше усмотрение – можно использовать класс Color или datatype (т.е. просто строки типа “red”, “green” и т.д.).
Эта задачка недавно рассматривалась в mailing list Pellet’a (просто с чуть другими именами классов). Эврен Сирин (главный разработчик Pellet) предложил очень красивый вариант решения, который мне захотелось обсудить. Его нетрудно найти, поэтому я не скрываю, но рекомендую сначала подумать самим. Ну и разумеется не лишать других такого удовольствия.
Ни для кого не секрет, что львиная доля проектов, связанных с Semantic Web, разрабатывается на Java. Фреймворки для работы с семантическими онтологиями не являются исключением: все основные проекты (Jena, OWL API, Sesame и т. д.) написаны именно на Java. Единственным серьезным представителем, использующим .NET, является фирма Intellidimension с продуктами RDF Gateway и Semantics.SDK.
В этой статье опишу свой опыт работы с вышеуказанными фреймворками и поделюсь результатами тестирования.
Читать продолжение »
На этой страничке будут собираться интересные, простые но нетривиальные примеры использования OWL. Надеемся, что с вашей помощью этот Уголок быстро перерастет размеры одной страницы!
Я буду использовать Манчестерский синтаксис OWL (не потому, что я сам из Манчестера, а просто потому, что он самый короткий и читабельный). Первым нашим примером будет тот самый "дядя".
1) Класс "Дядя" (Uncle) - класс всех объектов, братья и сестры которых имеют своих детей. Реализация в OWL 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). Заметим, что этот класс можно описать в OWL 2 в котором появились property chains, но не в OWL 1.
2) Класс "любитель кошек" (CatLover). Подразумевая класс "Кошка" (Cat) и свойство "любить" (loves) надо выразить класс любителей кошек. Каждый экземпляр CatLover любит *всех* экземпляров Cat.
linkLover o (inverse linkCat) SubPropertyOf: loves
CatLover SubClassOf (linkLover some {link})
Cat SubClassOf (linkCat some {link})
Иллюстрация:

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